@kameleoon/javascript-sdk-core 3.6.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +369 -0
- package/CHANGELOG_INTERNAL.md +3 -0
- package/dist/cacheManager/cacheManager.js +1 -1
- package/dist/cacheManager/cacheManager.js.map +1 -1
- package/dist/cacheManager/index.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.d.ts +2 -3
- package/dist/clientConfiguration/clientConfiguration.js +1 -1
- package/dist/clientConfiguration/clientConfiguration.js.map +1 -1
- package/dist/clientConfiguration/constants.js +1 -1
- package/dist/clientConfiguration/constants.js.map +1 -1
- package/dist/clientConfiguration/index.js +1 -1
- package/dist/clientConfiguration/types.d.ts +7 -8
- package/dist/clientConfiguration/types.js +1 -1
- package/dist/clientConfiguration/types.js.map +1 -1
- package/dist/clientSettings/clientSettings.js +1 -1
- package/dist/clientSettings/clientSettings.js.map +1 -1
- package/dist/clientSettings/index.js +1 -1
- package/dist/constants.d.ts +0 -8
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/eventSource/constants.js +1 -1
- package/dist/eventSource/constants.js.map +1 -1
- package/dist/eventSource/eventSource.d.ts +17 -0
- package/dist/eventSource/eventSource.js +2 -0
- package/dist/eventSource/eventSource.js.map +1 -0
- package/dist/eventSource/index.d.ts +2 -2
- package/dist/eventSource/index.js +1 -1
- package/dist/eventSource/index.js.map +1 -1
- package/dist/eventSource/types.d.ts +8 -19
- package/dist/eventSource/types.js.map +1 -1
- package/dist/hasher/hasher.js +1 -1
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/index.js +1 -1
- package/dist/hasher/index.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +2 -207
- package/dist/kameleoonClient.js +1 -1
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonClientInterface.d.ts +199 -0
- package/dist/kameleoonClientInterface.js +2 -0
- package/dist/kameleoonClientInterface.js.map +1 -0
- package/dist/kameleoonData/applicationVersion.js +1 -1
- package/dist/kameleoonData/applicationVersion.js.map +1 -1
- package/dist/kameleoonData/browser.js +1 -1
- package/dist/kameleoonData/browser.js.map +1 -1
- package/dist/kameleoonData/constants.js +1 -1
- package/dist/kameleoonData/constants.js.map +1 -1
- package/dist/kameleoonData/conversion.js +1 -1
- package/dist/kameleoonData/conversion.js.map +1 -1
- package/dist/kameleoonData/cookie.js +1 -1
- package/dist/kameleoonData/cookie.js.map +1 -1
- package/dist/kameleoonData/customData.js +1 -1
- package/dist/kameleoonData/customData.js.map +1 -1
- package/dist/kameleoonData/dataManager.js +1 -1
- package/dist/kameleoonData/dataManager.js.map +1 -1
- package/dist/kameleoonData/dataProcessor.d.ts +2 -2
- package/dist/kameleoonData/dataProcessor.js +1 -1
- package/dist/kameleoonData/dataProcessor.js.map +1 -1
- package/dist/kameleoonData/device.js +1 -1
- package/dist/kameleoonData/device.js.map +1 -1
- package/dist/kameleoonData/geolocation.js +1 -1
- package/dist/kameleoonData/geolocation.js.map +1 -1
- package/dist/kameleoonData/helpers.js +1 -1
- package/dist/kameleoonData/helpers.js.map +1 -1
- package/dist/kameleoonData/index.js +1 -1
- package/dist/kameleoonData/operatingSystem.js +1 -1
- package/dist/kameleoonData/operatingSystem.js.map +1 -1
- package/dist/kameleoonData/pageView.js +1 -1
- package/dist/kameleoonData/pageView.js.map +1 -1
- package/dist/kameleoonData/types.d.ts +2 -2
- package/dist/kameleoonData/types.js +1 -1
- package/dist/kameleoonData/types.js.map +1 -1
- package/dist/kameleoonData/userAgent.js +1 -1
- package/dist/kameleoonData/userAgent.js.map +1 -1
- package/dist/kameleoonData/visitsData.js +1 -1
- package/dist/kameleoonData/visitsData.js.map +1 -1
- package/dist/kameleoonError/constants.d.ts +1 -0
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/helpers.js.map +1 -1
- package/dist/kameleoonError/index.js +1 -1
- package/dist/kameleoonError/kameleoonError.d.ts +1 -1
- package/dist/kameleoonError/kameleoonError.js +1 -1
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.d.ts +1 -0
- package/dist/kameleoonError/types.js +1 -1
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/kameleoonUtils.js +1 -1
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/constants.js +1 -1
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.js +1 -1
- package/dist/requester/requester.js +1 -1
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.js +1 -1
- package/dist/requester/types.js.map +1 -1
- package/dist/storage/constants.js +1 -1
- package/dist/storage/constants.js.map +1 -1
- package/dist/storage/index.d.ts +2 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/storage.d.ts +13 -0
- package/dist/storage/storage.js +2 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/storage/types.d.ts +15 -30
- package/dist/storage/types.js.map +1 -1
- package/dist/targeting/conditions/applicationVersion.js +1 -1
- package/dist/targeting/conditions/applicationVersion.js.map +1 -1
- package/dist/targeting/conditions/browser.js +1 -1
- package/dist/targeting/conditions/browser.js.map +1 -1
- package/dist/targeting/conditions/conditionFactory.js +1 -1
- package/dist/targeting/conditions/conditionFactory.js.map +1 -1
- package/dist/targeting/conditions/conversion.js +1 -1
- package/dist/targeting/conditions/conversion.js.map +1 -1
- package/dist/targeting/conditions/cookie.js +1 -1
- package/dist/targeting/conditions/cookie.js.map +1 -1
- package/dist/targeting/conditions/customData.js +1 -1
- package/dist/targeting/conditions/customData.js.map +1 -1
- package/dist/targeting/conditions/device.js +1 -1
- package/dist/targeting/conditions/device.js.map +1 -1
- package/dist/targeting/conditions/exclusiveCampaign.js +1 -1
- package/dist/targeting/conditions/exclusiveCampaign.js.map +1 -1
- package/dist/targeting/conditions/firstVisit.js +1 -1
- package/dist/targeting/conditions/firstVisit.js.map +1 -1
- package/dist/targeting/conditions/geolocation.js +1 -1
- package/dist/targeting/conditions/geolocation.js.map +1 -1
- package/dist/targeting/conditions/index.js +1 -1
- package/dist/targeting/conditions/lastVisit.js +1 -1
- package/dist/targeting/conditions/lastVisit.js.map +1 -1
- package/dist/targeting/conditions/newVisitor.js +1 -1
- package/dist/targeting/conditions/newVisitor.js.map +1 -1
- package/dist/targeting/conditions/operatingSystem.js +1 -1
- package/dist/targeting/conditions/operatingSystem.js.map +1 -1
- package/dist/targeting/conditions/pageTitle.js +1 -1
- package/dist/targeting/conditions/pageTitle.js.map +1 -1
- package/dist/targeting/conditions/pageUrl.js +1 -1
- package/dist/targeting/conditions/pageUrl.js.map +1 -1
- package/dist/targeting/conditions/previousPage.js +1 -1
- package/dist/targeting/conditions/previousPage.js.map +1 -1
- package/dist/targeting/conditions/sameDayVisits.js +1 -1
- package/dist/targeting/conditions/sameDayVisits.js.map +1 -1
- package/dist/targeting/conditions/sdkLanguage.js +1 -1
- package/dist/targeting/conditions/sdkLanguage.js.map +1 -1
- package/dist/targeting/conditions/segment.js +1 -1
- package/dist/targeting/conditions/segment.js.map +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js +1 -1
- package/dist/targeting/conditions/targetFeatureFlag.js.map +1 -1
- package/dist/targeting/conditions/visitedPages.js +1 -1
- package/dist/targeting/conditions/visitedPages.js.map +1 -1
- package/dist/targeting/conditions/visitorCode.js +1 -1
- package/dist/targeting/conditions/visitorCode.js.map +1 -1
- package/dist/targeting/conditions/visits.js +1 -1
- package/dist/targeting/conditions/visits.js.map +1 -1
- package/dist/targeting/index.js +1 -1
- package/dist/targeting/node.js +1 -1
- package/dist/targeting/node.js.map +1 -1
- package/dist/targeting/tree.js +1 -1
- package/dist/targeting/tree.js.map +1 -1
- package/dist/targeting/types.js +1 -1
- package/dist/targeting/types.js.map +1 -1
- package/dist/types.d.ts +14 -26
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/constants.js +1 -1
- package/dist/utilities/constants.js.map +1 -1
- package/dist/utilities/index.js +1 -1
- package/dist/utilities/types.d.ts +7 -7
- package/dist/utilities/types.js +1 -1
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.js +1 -1
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/variationConfiguration/index.js +1 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +3 -3
- package/dist/variationConfiguration/variationConfiguration.js +1 -1
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/dist/visitorCodeManager/constants.d.ts +3 -0
- package/dist/visitorCodeManager/constants.js +2 -0
- package/dist/visitorCodeManager/constants.js.map +1 -0
- package/dist/visitorCodeManager/index.d.ts +2 -0
- package/dist/visitorCodeManager/index.js +1 -1
- package/dist/visitorCodeManager/index.js.map +1 -1
- package/dist/visitorCodeManager/types.d.ts +7 -0
- package/dist/visitorCodeManager/types.js +2 -0
- package/dist/visitorCodeManager/types.js.map +1 -0
- package/dist/visitorCodeManager/visitorCodeManager.d.ts +11 -8
- package/dist/visitorCodeManager/visitorCodeManager.js +1 -1
- package/dist/visitorCodeManager/visitorCodeManager.js.map +1 -1
- package/package.json +4 -8
- package/dist/eventSource/externalEventSource.d.ts +0 -12
- package/dist/eventSource/externalEventSource.js +0 -2
- package/dist/eventSource/externalEventSource.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var _targeting=require("../targeting"),_dataProcessor=require("./dataProcessor"),_utilities=require("../utilities"),_clientConfiguration=require("../clientConfiguration"),_types=require("../types"),_types2=require("./types");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataManager=void 0;var _targeting=require("../targeting"),_dataProcessor=require("./dataProcessor"),_utilities=require("../utilities"),_clientConfiguration=require("../clientConfiguration"),_types=require("../types"),_types2=require("./types");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||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){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)}class DataManager{constructor(a){let{storage:b,targetingCleanupInterval:c}=a;if(_defineProperty(this,"targetingTrees",new Map),_defineProperty(this,"localCustomDataIndexes",new Set),_defineProperty(this,"persistentCustomDataIndexes",new Set),_defineProperty(this,"mappingIdentifierCustomDataIndexes",new Set),_defineProperty(this,"targetingDataIntervalId",null),_defineProperty(this,"dataProcessor",void 0),_defineProperty(this,"unsentData",void 0),_defineProperty(this,"sentPageViewTimestamps",new Map),this.dataProcessor=new _dataProcessor.DataProcessor(b),this.unsentData={},c){const a=0>c?1:c,b=()=>{this.dataProcessor.cleanupOutdatedTargetingData(c),this.sentPageViewTimestamps.clear()};try{this.targetingDataIntervalId=setInterval(b,a*_types.Milliseconds.Minute)}catch(a){throw this.targetingDataIntervalId&&clearInterval(this.targetingDataIntervalId),a}}}addData(a){this.unsentData[a]||(this.unsentData[a]=new Map);for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];for(const b of c)switch(this.dataProcessor.updateData(a,b),b.data.type){case _types2.KameleoonData.CustomData:{const c=b,d=c.data;this.mappingIdentifierCustomDataIndexes.has(d.index)&&(c._isMappingIdentifier=!0),this.localCustomDataIndexes.has(d.index)||b.isSent||this.unsentData[a].set(d.index,c);break}case _types2.KameleoonData.PageView:{const c=b.data,d=this.dataProcessor.storedTargetingData.or({}),e=d[a][_types2.KameleoonData.PageView];if(e){const d=e[c.urlAddress];if(!b.isSent)for(const c of d.timestamps)this.sentPageViewTimestamps.has(c)||(this.unsentData[a].set(c,b),this.sentPageViewTimestamps.set(c,!0));else for(const a of d.timestamps)this.sentPageViewTimestamps.has(a)||this.sentPageViewTimestamps.set(a,!0)}break}case _types2.KameleoonData.Conversion:{const c=this.unsentData[a];if(!b.isSent)if(c.has(_types2.KameleoonData.Conversion)){const a=c.get(_types2.KameleoonData.Conversion);a.push(b),c.set(_types2.KameleoonData.Conversion,a)}else c.set(_types2.KameleoonData.Conversion,[b]);break}default:{const{data:c}=b;b.isSent||this.unsentData[a].set(c.type,b)}}return this.dataProcessor.createVisit(a)}getTree(a){if(!this.targetingTrees.has(a.id)){const b=new _targeting.Tree(a);return this.targetingTrees.set(a.id,new _targeting.Tree(a)),b}return this.targetingTrees.get(a.id)}clearTrees(){this.targetingTrees.clear()}getUnsentData(a){return this.unsentData[a]}clearUnsentData(a){var b;const c=null===(b=this.unsentData[a])||void 0===b?void 0:b.values();if(c&&this.persistentCustomDataIndexes.size){const b=new Map;for(const a of c)!Array.isArray(a)&&this.isPersistentCustomData(a)&&b.set(a.data.index,a);if(b.size)return void(this.unsentData[a]=b)}delete this.unsentData[a]}clearUnsentDataByKey(a,b){const c=this.unsentData[a];if(c){if(b===_types2.KameleoonData.CustomData&&this.persistentCustomDataIndexes.size)for(const[a,d]of c.entries())this.isPersistentCustomData(d)||a===b&&c.delete(a);else if(b===_types2.KameleoonData.PageView)for(const a of c.keys())"number"==typeof a&&c.delete(a);else c.delete(b);c.size||delete this.unsentData[a]}}isPersistentCustomData(a){return!!this.persistentCustomDataIndexes.size&&!!_utilities.Utilities.isCustomData(a)&&this.persistentCustomDataIndexes.has(a.data.index)}getVisitorIdentifier(a){const b=this.storedTargetingData;if(!b[a])return a;const c=b[a][_types2.KameleoonData.CustomData];if(!c)return a;for(const[b,d]of Object.entries(c))if(this.mappingIdentifierCustomDataIndexes.has(parseInt(b))&&d)return d.value[0];return a}get trees(){return this.targetingTrees}get unsentDataVisitors(){return Object.keys(this.unsentData)}get storedTargetingData(){return this.dataProcessor.storedTargetingData.or({})}set customDataIndexes(a){const[b,c,d]=[[],[],[]];a.forEach(a=>{a.localOnly&&b.push(a.index),a.scope===_clientConfiguration.CustomDataScope.Visitor&&c.push(a.index),a.isMappingIdentifier&&d.push(a.index)}),b.length&&(this.localCustomDataIndexes=new Set(b)),c.length&&(this.persistentCustomDataIndexes=new Set(c)),d.length&&(this.mappingIdentifierCustomDataIndexes=new Set(d))}}exports.DataManager=DataManager;
|
|
2
2
|
//# sourceMappingURL=dataManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataManager.js","names":["DataManager","a","b","c","storage","targetingCleanupInterval","_classCallCheck","_defineProperty","Map","Set","dataProcessor","DataProcessor","unsentData","cleanupInterval","cleanupCallback","cleanupOutdatedTargetingData","sentPageViewTimestamps","clear","targetingDataIntervalId","setInterval","Milliseconds","Minute","err","clearInterval","_createClass","key","value","addData","visitorCode","arguments","length","kameleoonData","Array","d","dataItem","f","g","updateData","data","type","KameleoonData","CustomData","customData","mappingIdentifierCustomDataIndexes","has","index","_isMappingIdentifier","localCustomDataIndexes","isSent","set","PageView","storedData","storedTargetingData","or","storedVisitorData","pageView","urlAddress","n","o","_createForOfIteratorHelper","timestamps","s","done","timestamp","e","q","r","Conversion","existingConversions","get","push","createVisit","getTree","segment","targetingTrees","id","targetingTree","Tree","clearTrees","getUnsentData","clearUnsentData","dataItems","values","persistentCustomDataIndexes","size","persistentCustomData","isArray","isPersistentCustomData","clearUnsentDataByKey","visitorData","entries","_slicedToArray","dataKey","delete","i","j","keys","Utilities","isCustomData","getVisitorIdentifier","targetingData","Object","parseInt","customDataLocalOnlyIndexes","forEach","localOnly","scope","CustomDataScope","Visitor","isMappingIdentifier","exports"],"sources":["../../src/kameleoonData/dataManager.ts"],"sourcesContent":["import { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, TargetingDataType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { Utilities } from 'src/utilities';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { Milliseconds } from 'src/types';\nimport { CustomData } from './customData';\nimport {\n DataManagerParametersType,\n ExistingPageViewDataType,\n KameleoonData,\n KameleoonDataType,\n PageViewDataType,\n UnsentTargetingDataType,\n UnsentVisitorTargetingDataType,\n} from './types';\n\ninterface IDataManager {\n addData(visitorCode: string, ...kameleoonData: KameleoonDataType[]): void;\n getUnsentData: (\n visitorCode: string,\n ) => UnsentTargetingDataType[string] | undefined;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n clearUnsentData: (visitorCode: string) => void;\n isPersistentCustomData: (dataItem: KameleoonDataType) => boolean;\n readonly trees: Map<string, Tree>;\n readonly storedTargetingData: TargetingDataType;\n readonly unsentDataVisitors: string[];\n}\n\nexport class DataManager implements IDataManager {\n private targetingTrees: Map<string, Tree> = new Map();\n private localCustomDataIndexes: Set<number> = new Set();\n private persistentCustomDataIndexes: Set<number> = new Set();\n private mappingIdentifierCustomDataIndexes: Set<number> = new Set();\n private targetingDataIntervalId: NodeJS.Timer | null = null;\n private dataProcessor: DataProcessor;\n private unsentData: UnsentTargetingDataType;\n private sentPageViewTimestamps: Map<number, boolean> = new Map();\n\n constructor({\n storage,\n targetingCleanupInterval,\n }: DataManagerParametersType) {\n this.dataProcessor = new DataProcessor(storage);\n this.unsentData = {};\n\n if (targetingCleanupInterval) {\n const cleanupInterval =\n targetingCleanupInterval < 0 ? 1 : targetingCleanupInterval;\n\n const cleanupCallback = () => {\n this.dataProcessor.cleanupOutdatedTargetingData(\n targetingCleanupInterval,\n );\n this.sentPageViewTimestamps.clear();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.targetingDataIntervalId = setInterval(\n cleanupCallback,\n cleanupInterval * Milliseconds.Minute,\n );\n } catch (err) {\n if (this.targetingDataIntervalId) {\n clearInterval(this.targetingDataIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public addData(\n visitorCode: string,\n ...kameleoonData: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n // --- Note ---\n // We assume `this.unsentTargetingData[visitorCode]` is always presents further\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n for (const dataItem of kameleoonData) {\n this.dataProcessor.updateData(visitorCode, dataItem);\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const customData = dataItem as CustomData;\n const data = customData.data;\n\n // --- Bug ---\n // - There's a known issue here: `mappingIdentifier` won't be updated\n // in the storage because the data is written before `unsentData` update\n // and we get `mappingIdentifier` only by checking CC here\n // - It doesn't affect the functionality, as stored data is\n // only used for condition evaluation and `Visitor` scoped CD is never removed from `unsentData`\n // still it should be fixed with some `.updateData` refactor\n if (this.mappingIdentifierCustomDataIndexes.has(data.index)) {\n customData._isMappingIdentifier = true;\n }\n\n if (\n !this.localCustomDataIndexes.has(data.index) &&\n !dataItem.isSent\n ) {\n this.unsentData[visitorCode]!.set(data.index, customData);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // `PageViews` can only be processed during storage update as they\n // can't create and merge referrers/titles/timestamps on their own\n // So we have to extract them from storage to update `unsentData` correctly\n const storedData = this.dataProcessor.storedTargetingData.or({});\n const storedVisitorData =\n storedData[visitorCode][KameleoonData.PageView];\n\n if (storedVisitorData) {\n const pageView = (storedVisitorData as ExistingPageViewDataType)[\n data.urlAddress\n ];\n\n // --- Note ---\n // A case for newly created page view\n if (!dataItem.isSent) {\n for (const timestamp of pageView.timestamps) {\n // --- Note ---\n // As we don't keep `sent` status for each timestamp, we have to\n // check if it was already sent to avoid duplicates\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.unsentData[visitorCode]!.set(timestamp, dataItem);\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n // --- Note ---\n // A case for `getRemoteVisitorData` pre-loaded pages that shouldn't be sent again\n } else {\n for (const timestamp of pageView.timestamps) {\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const unsentData = this.unsentData[visitorCode]!;\n\n if (!dataItem.isSent) {\n if (unsentData.has(KameleoonData.Conversion)) {\n const existingConversions = unsentData.get(\n KameleoonData.Conversion,\n ) as KameleoonDataType[];\n\n existingConversions.push(dataItem);\n\n unsentData.set(KameleoonData.Conversion, existingConversions);\n } else {\n unsentData.set(KameleoonData.Conversion, [dataItem]);\n }\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n\n if (!dataItem.isSent) {\n this.unsentData[visitorCode]!.set(data.type, dataItem);\n }\n }\n }\n }\n\n return this.dataProcessor.createVisit(visitorCode);\n }\n\n public getTree(segment: SegmentType): Tree {\n if (!this.targetingTrees.has(segment.id)) {\n const targetingTree = new Tree(segment);\n\n this.targetingTrees.set(segment.id, new Tree(segment));\n\n return targetingTree;\n }\n\n return this.targetingTrees.get(segment.id) as Tree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public getUnsentData(\n visitorCode: string,\n ): UnsentTargetingDataType[string] | undefined {\n return this.unsentData[visitorCode];\n }\n\n public clearUnsentData(visitorCode: string): void {\n const dataItems = this.unsentData[visitorCode]?.values();\n\n if (dataItems && this.persistentCustomDataIndexes.size) {\n const persistentCustomData: UnsentVisitorTargetingDataType = new Map();\n\n for (const dataItem of dataItems) {\n if (!Array.isArray(dataItem) && this.isPersistentCustomData(dataItem)) {\n persistentCustomData.set(dataItem.data.index, dataItem);\n }\n }\n\n if (persistentCustomData.size) {\n this.unsentData[visitorCode] = persistentCustomData;\n return;\n }\n }\n\n delete this.unsentData[visitorCode];\n }\n\n public clearUnsentDataByKey(visitorCode: string, key: KameleoonData): void {\n const visitorData = this.unsentData[visitorCode];\n\n if (!visitorData) {\n return;\n }\n\n if (\n key === KameleoonData.CustomData &&\n this.persistentCustomDataIndexes.size\n ) {\n for (const [dataKey, dataItem] of visitorData.entries()) {\n if (this.isPersistentCustomData(dataItem as KameleoonDataType)) {\n continue;\n }\n\n if (dataKey === key) {\n visitorData.delete(dataKey);\n }\n }\n } else if (key === KameleoonData.PageView) {\n for (const dataKey of visitorData.keys()) {\n if (typeof dataKey === 'number') {\n visitorData.delete(dataKey);\n }\n }\n } else {\n visitorData.delete(key);\n }\n\n if (!visitorData.size) {\n delete this.unsentData[visitorCode];\n }\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const targetingData = this.storedTargetingData;\n\n if (!targetingData[visitorCode]) {\n return visitorCode;\n }\n\n const customData = targetingData[visitorCode][KameleoonData.CustomData];\n\n if (!customData) {\n return visitorCode;\n }\n\n for (const [index, dataItem] of Object.entries(customData)) {\n if (\n this.mappingIdentifierCustomDataIndexes.has(parseInt(index)) &&\n dataItem\n ) {\n return dataItem.value[0];\n }\n }\n\n return visitorCode;\n }\n\n get trees() {\n return this.targetingTrees;\n }\n\n get unsentDataVisitors(): string[] {\n return Object.keys(this.unsentData);\n }\n\n get storedTargetingData(): TargetingDataType {\n return this.dataProcessor.storedTargetingData.or({});\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [\n customDataLocalOnlyIndexes,\n persistentCustomDataIndexes,\n mappingIdentifierCustomDataIndexes,\n ]: Array<number[]> = [[], [], []];\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.isMappingIdentifier) {\n mappingIdentifierCustomDataIndexes.push(customData.index);\n }\n });\n\n if (customDataLocalOnlyIndexes.length) {\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n }\n\n if (persistentCustomDataIndexes.length) {\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n }\n\n if (mappingIdentifierCustomDataIndexes.length) {\n this.mappingIdentifierCustomDataIndexes = new Set(\n mappingIdentifierCustomDataIndexes,\n );\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataManager.js","names":["DataManager","constructor","a","storage","targetingCleanupInterval","_defineProperty","Map","Set","dataProcessor","DataProcessor","unsentData","cleanupInterval","cleanupCallback","cleanupOutdatedTargetingData","sentPageViewTimestamps","clear","targetingDataIntervalId","setInterval","Milliseconds","Minute","err","clearInterval","addData","visitorCode","b","arguments","length","kameleoonData","Array","d","dataItem","updateData","data","type","KameleoonData","CustomData","customData","mappingIdentifierCustomDataIndexes","has","index","_isMappingIdentifier","localCustomDataIndexes","isSent","set","PageView","storedData","storedTargetingData","or","storedVisitorData","pageView","urlAddress","timestamp","timestamps","Conversion","existingConversions","get","push","createVisit","getTree","segment","targetingTrees","id","targetingTree","Tree","clearTrees","getUnsentData","clearUnsentData","dataItems","values","persistentCustomDataIndexes","size","persistentCustomData","isArray","isPersistentCustomData","clearUnsentDataByKey","key","visitorData","dataKey","entries","delete","keys","Utilities","isCustomData","getVisitorIdentifier","targetingData","Object","parseInt","value","trees","unsentDataVisitors","customDataIndexes","customDataLocalOnlyIndexes","forEach","localOnly","scope","CustomDataScope","Visitor","isMappingIdentifier","exports"],"sources":["../../src/kameleoonData/dataManager.ts"],"sourcesContent":["import { Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { SegmentType, TargetingDataType, Tree } from 'src/targeting';\nimport { DataProcessor } from './dataProcessor';\nimport { Utilities } from 'src/utilities';\nimport {\n CustomDataConfigurationType,\n CustomDataScope,\n} from 'src/clientConfiguration';\nimport { Milliseconds } from 'src/types';\nimport { CustomData } from './customData';\nimport {\n DataManagerParametersType,\n ExistingPageViewDataType,\n KameleoonData,\n KameleoonDataType,\n PageViewDataType,\n UnsentTargetingDataType,\n UnsentVisitorTargetingDataType,\n} from './types';\n\ninterface IDataManager {\n addData(visitorCode: string, ...kameleoonData: KameleoonDataType[]): void;\n getUnsentData: (\n visitorCode: string,\n ) => UnsentTargetingDataType[string] | undefined;\n getTree(segment: SegmentType): Tree;\n clearTrees(): void;\n clearUnsentData: (visitorCode: string) => void;\n isPersistentCustomData: (dataItem: KameleoonDataType) => boolean;\n readonly trees: Map<string, Tree>;\n readonly storedTargetingData: TargetingDataType;\n readonly unsentDataVisitors: string[];\n}\n\nexport class DataManager implements IDataManager {\n private targetingTrees: Map<string, Tree> = new Map();\n private localCustomDataIndexes: Set<number> = new Set();\n private persistentCustomDataIndexes: Set<number> = new Set();\n private mappingIdentifierCustomDataIndexes: Set<number> = new Set();\n private targetingDataIntervalId: NodeJS.Timer | null = null;\n private dataProcessor: DataProcessor;\n private unsentData: UnsentTargetingDataType;\n private sentPageViewTimestamps: Map<number, boolean> = new Map();\n\n constructor({\n storage,\n targetingCleanupInterval,\n }: DataManagerParametersType) {\n this.dataProcessor = new DataProcessor(storage);\n this.unsentData = {};\n\n if (targetingCleanupInterval) {\n const cleanupInterval =\n targetingCleanupInterval < 0 ? 1 : targetingCleanupInterval;\n\n const cleanupCallback = () => {\n this.dataProcessor.cleanupOutdatedTargetingData(\n targetingCleanupInterval,\n );\n this.sentPageViewTimestamps.clear();\n };\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.targetingDataIntervalId = setInterval(\n cleanupCallback,\n cleanupInterval * Milliseconds.Minute,\n );\n } catch (err) {\n if (this.targetingDataIntervalId) {\n clearInterval(this.targetingDataIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public addData(\n visitorCode: string,\n ...kameleoonData: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n // --- Note ---\n // We assume `this.unsentTargetingData[visitorCode]` is always presents further\n if (!this.unsentData[visitorCode]) {\n this.unsentData[visitorCode] = new Map();\n }\n\n for (const dataItem of kameleoonData) {\n this.dataProcessor.updateData(visitorCode, dataItem);\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const customData = dataItem as CustomData;\n const data = customData.data;\n\n // --- Bug ---\n // - There's a known issue here: `mappingIdentifier` won't be updated\n // in the storage because the data is written before `unsentData` update\n // and we get `mappingIdentifier` only by checking CC here\n // - It doesn't affect the functionality, as stored data is\n // only used for condition evaluation and `Visitor` scoped CD is never removed from `unsentData`\n // still it should be fixed with some `.updateData` refactor\n if (this.mappingIdentifierCustomDataIndexes.has(data.index)) {\n customData._isMappingIdentifier = true;\n }\n\n if (\n !this.localCustomDataIndexes.has(data.index) &&\n !dataItem.isSent\n ) {\n this.unsentData[visitorCode]!.set(data.index, customData);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // `PageViews` can only be processed during storage update as they\n // can't create and merge referrers/titles/timestamps on their own\n // So we have to extract them from storage to update `unsentData` correctly\n const storedData = this.dataProcessor.storedTargetingData.or({});\n const storedVisitorData =\n storedData[visitorCode][KameleoonData.PageView];\n\n if (storedVisitorData) {\n const pageView = (storedVisitorData as ExistingPageViewDataType)[\n data.urlAddress\n ];\n\n // --- Note ---\n // A case for newly created page view\n if (!dataItem.isSent) {\n for (const timestamp of pageView.timestamps) {\n // --- Note ---\n // As we don't keep `sent` status for each timestamp, we have to\n // check if it was already sent to avoid duplicates\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.unsentData[visitorCode]!.set(timestamp, dataItem);\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n // --- Note ---\n // A case for `getRemoteVisitorData` pre-loaded pages that shouldn't be sent again\n } else {\n for (const timestamp of pageView.timestamps) {\n if (!this.sentPageViewTimestamps.has(timestamp)) {\n this.sentPageViewTimestamps.set(timestamp, true);\n }\n }\n }\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const unsentData = this.unsentData[visitorCode]!;\n\n if (!dataItem.isSent) {\n if (unsentData.has(KameleoonData.Conversion)) {\n const existingConversions = unsentData.get(\n KameleoonData.Conversion,\n ) as KameleoonDataType[];\n\n existingConversions.push(dataItem);\n\n unsentData.set(KameleoonData.Conversion, existingConversions);\n } else {\n unsentData.set(KameleoonData.Conversion, [dataItem]);\n }\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n\n if (!dataItem.isSent) {\n this.unsentData[visitorCode]!.set(data.type, dataItem);\n }\n }\n }\n }\n\n return this.dataProcessor.createVisit(visitorCode);\n }\n\n public getTree(segment: SegmentType): Tree {\n if (!this.targetingTrees.has(segment.id)) {\n const targetingTree = new Tree(segment);\n\n this.targetingTrees.set(segment.id, new Tree(segment));\n\n return targetingTree;\n }\n\n return this.targetingTrees.get(segment.id) as Tree;\n }\n\n public clearTrees(): void {\n this.targetingTrees.clear();\n }\n\n public getUnsentData(\n visitorCode: string,\n ): UnsentTargetingDataType[string] | undefined {\n return this.unsentData[visitorCode];\n }\n\n public clearUnsentData(visitorCode: string): void {\n const dataItems = this.unsentData[visitorCode]?.values();\n\n if (dataItems && this.persistentCustomDataIndexes.size) {\n const persistentCustomData: UnsentVisitorTargetingDataType = new Map();\n\n for (const dataItem of dataItems) {\n if (!Array.isArray(dataItem) && this.isPersistentCustomData(dataItem)) {\n persistentCustomData.set(dataItem.data.index, dataItem);\n }\n }\n\n if (persistentCustomData.size) {\n this.unsentData[visitorCode] = persistentCustomData;\n return;\n }\n }\n\n delete this.unsentData[visitorCode];\n }\n\n public clearUnsentDataByKey(visitorCode: string, key: KameleoonData): void {\n const visitorData = this.unsentData[visitorCode];\n\n if (!visitorData) {\n return;\n }\n\n if (\n key === KameleoonData.CustomData &&\n this.persistentCustomDataIndexes.size\n ) {\n for (const [dataKey, dataItem] of visitorData.entries()) {\n if (this.isPersistentCustomData(dataItem as KameleoonDataType)) {\n continue;\n }\n\n if (dataKey === key) {\n visitorData.delete(dataKey);\n }\n }\n } else if (key === KameleoonData.PageView) {\n for (const dataKey of visitorData.keys()) {\n if (typeof dataKey === 'number') {\n visitorData.delete(dataKey);\n }\n }\n } else {\n visitorData.delete(key);\n }\n\n if (!visitorData.size) {\n delete this.unsentData[visitorCode];\n }\n }\n\n public isPersistentCustomData(\n dataItem: KameleoonDataType,\n ): dataItem is CustomData {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n\n return false;\n }\n\n public getVisitorIdentifier(visitorCode: string): string {\n const targetingData = this.storedTargetingData;\n\n if (!targetingData[visitorCode]) {\n return visitorCode;\n }\n\n const customData = targetingData[visitorCode][KameleoonData.CustomData];\n\n if (!customData) {\n return visitorCode;\n }\n\n for (const [index, dataItem] of Object.entries(customData)) {\n if (\n this.mappingIdentifierCustomDataIndexes.has(parseInt(index)) &&\n dataItem\n ) {\n return dataItem.value[0];\n }\n }\n\n return visitorCode;\n }\n\n get trees() {\n return this.targetingTrees;\n }\n\n get unsentDataVisitors(): string[] {\n return Object.keys(this.unsentData);\n }\n\n get storedTargetingData(): TargetingDataType {\n return this.dataProcessor.storedTargetingData.or({});\n }\n\n set customDataIndexes(customData: CustomDataConfigurationType[]) {\n const [\n customDataLocalOnlyIndexes,\n persistentCustomDataIndexes,\n mappingIdentifierCustomDataIndexes,\n ]: Array<number[]> = [[], [], []];\n\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n\n if (customData.isMappingIdentifier) {\n mappingIdentifierCustomDataIndexes.push(customData.index);\n }\n });\n\n if (customDataLocalOnlyIndexes.length) {\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n }\n\n if (persistentCustomDataIndexes.length) {\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n }\n\n if (mappingIdentifierCustomDataIndexes.length) {\n this.mappingIdentifierCustomDataIndexes = new Set(\n mappingIdentifierCustomDataIndexes,\n );\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result } from 'ts-res';
|
|
2
|
-
import {
|
|
2
|
+
import { IStorage } from '../storage';
|
|
3
3
|
import { TargetingDataType } from '../targeting';
|
|
4
4
|
import { KameleoonError } from '../kameleoonError';
|
|
5
5
|
import { KameleoonDataType } from './types';
|
|
@@ -11,7 +11,7 @@ interface IDataProcessor {
|
|
|
11
11
|
}
|
|
12
12
|
export declare class DataProcessor implements IDataProcessor {
|
|
13
13
|
private storage;
|
|
14
|
-
constructor(storage:
|
|
14
|
+
constructor(storage: IStorage<TargetingDataType>);
|
|
15
15
|
updateData(visitorCode: string, dataItem: KameleoonDataType): Result<void, KameleoonError>;
|
|
16
16
|
createVisit(visitorCode: string): Result<void, KameleoonError>;
|
|
17
17
|
cleanupOutdatedTargetingData(targetingCleanupInterval?: number): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataProcessor=void 0;var _tsRes=require("ts-res"),_utilities=require("../utilities"),_types=require("../utilities/types"),_visitsData=require("./visitsData"),_types2=require("../types"),_constants=require("./constants"),_types3=require("./types"),_excluded=["customData","pageView","conversion"];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 _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}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 ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});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 DataProcessor=function(){function a(b){_classCallCheck(this,a),_defineProperty(this,"storage",void 0),this.storage=b}return _createClass(a,[{key:"updateData",value:function updateData(a,b){var c=this.storage.read().or({}),d={visitorCode:a,data:c};switch(b.data.type){case _types3.KameleoonData.CustomData:{var e=b.data,f=c[a]&&_types3.KameleoonData.CustomData in c[a],g=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.CustomData,nestedKey:e.index.toString(),value:e});f?this.updateNestedField(g):this.createNestedField(g);break}case _types3.KameleoonData.PageView:{var h,i=b.data;i.timestamps.length||(i.timestamps=[Date.now()]);var j=c[a]&&_types3.KameleoonData.PageView in c[a]&&(null===(h=c[a][i.type])||void 0===h?void 0:h[i.urlAddress]),k=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.PageView,nestedKey:i.urlAddress,value:i});if(j){i.timestamps.forEach(function(a){_utilities.Utilities.insertInOrderedListMutably({list:j.timestamps,element:a,order:_types.Order.Ascending})});var l=[i.referrers,i.title];j.referrers=l[0],j.title=l[1],this.updateNestedField(_objectSpread(_objectSpread({},k),{},{value:j}))}else this.createNestedField(k);break}case _types3.KameleoonData.Conversion:{var m=b.data,n=c[a]&&_types3.KameleoonData.Conversion in c[a],o=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.Conversion,value:m});n?this.updateArrayField(o):this.createArrayField(o);break}case _types3.KameleoonData.VisitsData:{var p=b.data,q=c[a]&&_types3.KameleoonData.VisitsData in c[a],r=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.VisitsData,value:p});if(q){var s=c[a][p.type];s.previousVisits.forEach(function(a){_utilities.Utilities.insertInOrderedListMutably({list:p.previousVisits,element:a,order:_types.Order.Ascending})});var t=s.currentVisit;(!t&&p.currentVisit||t&&p.currentVisit&&t<p.currentVisit)&&(t=p.currentVisit),this.updateField(_objectSpread(_objectSpread({},r),{},{value:_objectSpread(_objectSpread({},p),{},{previousVisits:p.previousVisits,currentVisit:t})}))}else this.createField(r);break}default:{var u=b.data,v=c[a]&&u.type in c[a],w=_objectSpread(_objectSpread({},d),{},{key:u.type,value:u});v?this.updateField(w):this.createField(w)}}return this.storage.write(c)}},{key:"createVisit",value:function createVisit(a){var b,c=this.storage.read();if(!c.ok)return(0,_tsRes.Err)(c.error);var d=c.data;return null!==(b=d[a])&&void 0!==b&&b[_types3.KameleoonData.VisitsData]||this.updateField({visitorCode:a,key:_types3.KameleoonData.VisitsData,value:new _visitsData.VisitsData(Date.now(),[]).data,data:d}),this.storage.write(d)}},{key:"cleanupOutdatedTargetingData",value:function cleanupOutdatedTargetingData(a){var b=this.storage.read();if(b.ok){var c=b.data,d=a?a*_types2.Milliseconds.Minute:_constants.DEFAULT_CLEANUP_INTERVAL*_types2.Milliseconds.Minute,e=Date.now();if(Object.keys(c).length){for(var f=0,g=Object.entries(c);f<g.length;f++){var h=_slicedToArray(g[f],2),i=h[0],j=h[1],k=j.customData,l=j.pageView,m=j.conversion,n=_objectWithoutProperties(j,_excluded);if(k)for(var o=0,p=Object.entries(k);o<p.length;o++){var q=_slicedToArray(p[o],2),r=q[0],s=q[1];if(s){var t=s.lastActivityTime+d<e,u=j[_types3.KameleoonData.CustomData];t&&u&&delete u[+r],u&&!Object.keys(u).length&&delete j[_types3.KameleoonData.CustomData]}}if(l)for(var v=0,w=Object.entries(l);v<w.length;v++){var x=_slicedToArray(w[v],2),y=x[0],z=x[1],A=z.lastActivityTime+d<e,B=j[_types3.KameleoonData.PageView];A&&B&&delete B[y],B&&!Object.keys(B).length&&delete j[_types3.KameleoonData.PageView]}if(m){var C,D=_createForOfIteratorHelper(m);try{for(D.s();!(C=D.n()).done;){var E=C.value,F=E.lastActivityTime+d<e,G=j[_types3.KameleoonData.Conversion];F&&G&&G.splice(G.indexOf(E),1),G&&!G.length&&delete j[_types3.KameleoonData.Conversion]}}catch(a){D.e(a)}finally{D.f()}}for(var H=0,I=Object.entries(n);H<I.length;H++){var J=_slicedToArray(I[H],2),K=J[0],L=J[1],M=L.lastActivityTime+d<e;M&&delete j[K]}Object.keys(c[i]).length||delete c[i]}this.storage.write(c)}}}},{key:"storedTargetingData",get:function get(){return this.storage.read()}},{key:"updateField",value:function updateField(a){var b=a.visitorCode,c=a.key,d=a.value,e=a.data;e[b][c]=_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()})}},{key:"createField",value:function createField(a){var b=a.visitorCode,c=a.key,d=a.value,e=a.data;e[b]=_objectSpread(_objectSpread({},e[b]),{},_defineProperty({},c,_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()})))}},{key:"updateArrayField",value:function updateArrayField(a){var b=a.visitorCode,c=a.key,d=a.value,e=a.data;e[b][c].push(_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()}))}},{key:"createArrayField",value:function createArrayField(a){var b=a.visitorCode,c=a.key,d=a.value,e=a.data;e[b]=_objectSpread(_objectSpread({},e[b]),{},_defineProperty({},c,[_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()})]))}},{key:"updateNestedField",value:function updateNestedField(a){var b=a.visitorCode,c=a.key,d=a.nestedKey,e=a.value,f=a.data;f[b][c][d]=_objectSpread(_objectSpread({},e),{},{lastActivityTime:Date.now()})}},{key:"createNestedField",value:function createNestedField(a){var b,c=a.visitorCode,d=a.key,e=a.nestedKey,f=a.value,g=a.data;g[c]=null!==(b=g[c])&&void 0!==b&&b[d]?_objectSpread(_objectSpread({},g[c]),{},_defineProperty({},d,_objectSpread(_objectSpread({},g[c][d]),{},_defineProperty({},e,_objectSpread(_objectSpread({},f),{},{lastActivityTime:Date.now()}))))):_objectSpread(_objectSpread({},g[c]),{},_defineProperty({},d,_defineProperty({},e,_objectSpread(_objectSpread({},f),{},{lastActivityTime:Date.now()}))))}}]),a}();exports.DataProcessor=DataProcessor;
|
|
1
|
+
"use strict";const _excluded=["customData","pageView","conversion"];Object.defineProperty(exports,"__esModule",{value:!0}),exports.DataProcessor=void 0;var _tsRes=require("ts-res"),_utilities=require("../utilities"),_types=require("../utilities/types"),_visitsData=require("./visitsData"),_types2=require("../types"),_constants=require("./constants"),_types3=require("./types");function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||Object.prototype.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c,d,e={},f=Object.keys(a);for(d=0;d<f.length;d++)c=f[d],0<=b.indexOf(c)||(e[c]=a[c]);return e}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return 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||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){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)}class DataProcessor{constructor(a){_defineProperty(this,"storage",void 0),this.storage=a}updateData(a,b){const c=this.storage.read().or({}),d={visitorCode:a,data:c};switch(b.data.type){case _types3.KameleoonData.CustomData:{const e=b.data,f=c[a]&&_types3.KameleoonData.CustomData in c[a],g=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.CustomData,nestedKey:e.index.toString(),value:e});f?this.updateNestedField(g):this.createNestedField(g);break}case _types3.KameleoonData.PageView:{var e;const f=b.data;f.timestamps.length||(f.timestamps=[Date.now()]);const g=c[a]&&_types3.KameleoonData.PageView in c[a]&&(null===(e=c[a][f.type])||void 0===e?void 0:e[f.urlAddress]),h=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.PageView,nestedKey:f.urlAddress,value:f});g?(f.timestamps.forEach(a=>{_utilities.Utilities.insertInOrderedListMutably({list:g.timestamps,element:a,order:_types.Order.Ascending})}),[g.referrers,g.title]=[f.referrers,f.title],this.updateNestedField(_objectSpread(_objectSpread({},h),{},{value:g}))):this.createNestedField(h);break}case _types3.KameleoonData.Conversion:{const e=b.data,f=c[a]&&_types3.KameleoonData.Conversion in c[a],g=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.Conversion,value:e});f?this.updateArrayField(g):this.createArrayField(g);break}case _types3.KameleoonData.VisitsData:{const e=b.data,f=c[a]&&_types3.KameleoonData.VisitsData in c[a],g=_objectSpread(_objectSpread({},d),{},{key:_types3.KameleoonData.VisitsData,value:e});if(f){const b=c[a][e.type];b.previousVisits.forEach(a=>{_utilities.Utilities.insertInOrderedListMutably({list:e.previousVisits,element:a,order:_types.Order.Ascending})});let d=b.currentVisit;(!d&&e.currentVisit||d&&e.currentVisit&&d<e.currentVisit)&&(d=e.currentVisit),this.updateField(_objectSpread(_objectSpread({},g),{},{value:_objectSpread(_objectSpread({},e),{},{previousVisits:e.previousVisits,currentVisit:d})}))}else this.createField(g);break}default:{const{data:e}=b,f=c[a]&&e.type in c[a],g=_objectSpread(_objectSpread({},d),{},{key:e.type,value:e});f?this.updateField(g):this.createField(g)}}return this.storage.write(c)}createVisit(a){var b;const c=this.storage.read();if(!c.ok)return(0,_tsRes.Err)(c.error);const d=c.data;return null!==(b=d[a])&&void 0!==b&&b[_types3.KameleoonData.VisitsData]||this.updateField({visitorCode:a,key:_types3.KameleoonData.VisitsData,value:new _visitsData.VisitsData(Date.now(),[]).data,data:d}),this.storage.write(d)}cleanupOutdatedTargetingData(a){const b=this.storage.read();if(!b.ok)return;const c=b.data,d=a?a*_types2.Milliseconds.Minute:_constants.DEFAULT_CLEANUP_INTERVAL*_types2.Milliseconds.Minute,e=Date.now();if(Object.keys(c).length){for(const[a,b]of Object.entries(c)){const{customData:f,pageView:g,conversion:h}=b,i=_objectWithoutProperties(b,_excluded);if(f)for(const[a,c]of Object.entries(f))if(c){const f=c.lastActivityTime+d<e,g=b[_types3.KameleoonData.CustomData];f&&g&&delete g[+a],g&&!Object.keys(g).length&&delete b[_types3.KameleoonData.CustomData]}if(g)for(const[a,c]of Object.entries(g)){const f=c.lastActivityTime+d<e,g=b[_types3.KameleoonData.PageView];f&&g&&delete g[a],g&&!Object.keys(g).length&&delete b[_types3.KameleoonData.PageView]}if(h)for(const a of h){const c=a.lastActivityTime+d<e,f=b[_types3.KameleoonData.Conversion];c&&f&&f.splice(f.indexOf(a),1),f&&!f.length&&delete b[_types3.KameleoonData.Conversion]}for(const[a,c]of Object.entries(i)){const f=c.lastActivityTime+d<e;f&&delete b[a]}Object.keys(c[a]).length||delete c[a]}this.storage.write(c)}}get storedTargetingData(){return this.storage.read()}updateField(a){let{visitorCode:b,key:c,value:d,data:e}=a;e[b][c]=_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()})}createField(a){let{visitorCode:b,key:c,value:d,data:e}=a;e[b]=_objectSpread(_objectSpread({},e[b]),{},{[c]:_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()})})}updateArrayField(a){let{visitorCode:b,key:c,value:d,data:e}=a;e[b][c].push(_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()}))}createArrayField(a){let{visitorCode:b,key:c,value:d,data:e}=a;e[b]=_objectSpread(_objectSpread({},e[b]),{},{[c]:[_objectSpread(_objectSpread({},d),{},{lastActivityTime:Date.now()})]})}updateNestedField(a){let{visitorCode:b,key:c,nestedKey:d,value:e,data:f}=a;f[b][c][d]=_objectSpread(_objectSpread({},e),{},{lastActivityTime:Date.now()})}createNestedField(a){var b;let{visitorCode:c,key:d,nestedKey:e,value:f,data:g}=a;g[c]=null!==(b=g[c])&&void 0!==b&&b[d]?_objectSpread(_objectSpread({},g[c]),{},{[d]:_objectSpread(_objectSpread({},g[c][d]),{},{[e]:_objectSpread(_objectSpread({},f),{},{lastActivityTime:Date.now()})})}):_objectSpread(_objectSpread({},g[c]),{},{[d]:{[e]:_objectSpread(_objectSpread({},f),{},{lastActivityTime:Date.now()})}})}}exports.DataProcessor=DataProcessor;
|
|
2
2
|
//# sourceMappingURL=dataProcessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataProcessor.js","names":["DataProcessor","a","storage","_classCallCheck","_defineProperty","_createClass","key","value","updateData","visitorCode","dataItem","targetingData","read","or","commonParameters","data","type","KameleoonData","CustomData","hasCustomDataKey","parameters","_objectSpread","nestedKey","index","toString","updateNestedField","createNestedField","PageView","h","timestamps","length","Date","now","existingData","urlAddress","forEach","timestamp","Utilities","insertInOrderedListMutably","list","element","order","Order","Ascending","l","referrers","title","Conversion","hasConversionDataKey","updateArrayField","createArrayField","VisitsData","hasVisitsKey","existingVisits","previousVisits","visit","currentVisit","updateField","createField","hasDataKey","write","createVisit","b","storageData","ok","Err","error","cleanupOutdatedTargetingData","targetingCleanupInterval","targetingDataLifetime","Milliseconds","Minute","DEFAULT_CLEANUP_INTERVAL","currentTime","Object","keys","f","g","entries","_slicedToArray","kameleoonVisitorData","customData","pageView","conversion","rest","_objectWithoutProperties","_excluded","o","p","q","isDataExpired","lastActivityTime","v","w","x","url","C","D","_createForOfIteratorHelper","s","n","done","splice","indexOf","e","H","I","J","get","push","exports"],"sources":["../../src/kameleoonData/dataProcessor.ts"],"sourcesContent":["import { Err, Result } from 'ts-res';\nimport { IExternalStorage } from 'src/storage';\nimport { TargetingDataType } from 'src/targeting';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { Order } from 'src/utilities/types';\nimport { VisitsData } from './visitsData';\nimport { Milliseconds } from 'src/types';\nimport { DEFAULT_CLEANUP_INTERVAL } from './constants';\nimport {\n ArrayFieldParametersType,\n ConversionDataType,\n CustomDataType,\n ExistingArrayDataType,\n ExistingDataType,\n ExistingNestedDataType,\n ExistingPageViewDataType,\n ExistingVisitsDataType,\n FieldParametersType,\n KameleoonData,\n KameleoonDataType,\n NestedFieldParametersType,\n PageViewDataType,\n VisitsDataType,\n} from './types';\n\ninterface IDataProcessor {\n updateData(\n visitorCode: string,\n dataItem: KameleoonDataType,\n ): Result<void, KameleoonError>;\n createVisit(visitorCode: string): void;\n cleanupOutdatedTargetingData(targetingCleanupInterval?: number): void;\n readonly storedTargetingData: Result<TargetingDataType, KameleoonError>;\n}\n\nexport class DataProcessor implements IDataProcessor {\n private storage: IExternalStorage<TargetingDataType>;\n\n constructor(storage: IExternalStorage<TargetingDataType>) {\n this.storage = storage;\n }\n\n // --- Note ---\n // Following code is optimized for performance:\n // - We don't want to copy the whole object every time we add new data\n // - So we are manually checking the keys existence and mutating targeting data directly\n // - Numerous type casts are required because we can't narrow down nested `targetingData` types by using assertion functions\n public updateData(\n visitorCode: string,\n dataItem: KameleoonDataType,\n ): Result<void, KameleoonError> {\n const targetingData = this.storage.read().or({});\n const commonParameters: Pick<FieldParametersType, 'visitorCode' | 'data'> =\n {\n visitorCode,\n data: targetingData,\n };\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const data = dataItem.data as CustomDataType;\n const hasCustomDataKey =\n targetingData[visitorCode] &&\n KameleoonData.CustomData in targetingData[visitorCode];\n const parameters: NestedFieldParametersType = {\n ...commonParameters,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n\n if (hasCustomDataKey) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // We assign `timestamps` to `Date.now()` if it's empty\n // Not upon data item creation because it makes no sense in terms\n // of data flow to have some indication of data activity before it was added\n if (!data.timestamps.length) {\n data.timestamps = [Date.now()];\n }\n\n const existingData =\n targetingData[visitorCode] &&\n KameleoonData.PageView in targetingData[visitorCode] &&\n (targetingData[visitorCode][data.type] as ExistingPageViewDataType)?.[\n data.urlAddress\n ];\n\n const parameters: NestedFieldParametersType = {\n ...commonParameters,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n\n if (existingData) {\n // --- Note ---\n // Updating existing `PageView` properties by pushing new timestamps\n // and potentially changing referrers and title\n data.timestamps.forEach((timestamp) => {\n Utilities.insertInOrderedListMutably({\n list: existingData.timestamps,\n element: timestamp,\n order: Order.Ascending,\n });\n });\n\n [existingData.referrers, existingData.title] = [\n data.referrers,\n data.title,\n ];\n\n this.updateNestedField({ ...parameters, value: existingData });\n } else {\n this.createNestedField(parameters);\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const data = dataItem.data as ConversionDataType;\n const hasConversionDataKey =\n targetingData[visitorCode] &&\n KameleoonData.Conversion in targetingData[visitorCode];\n const parameters: ArrayFieldParametersType = {\n ...commonParameters,\n key: KameleoonData.Conversion,\n value: data,\n };\n\n if (hasConversionDataKey) {\n this.updateArrayField(parameters);\n } else {\n this.createArrayField(parameters);\n }\n\n break;\n }\n case KameleoonData.VisitsData: {\n const data = dataItem.data as VisitsDataType;\n const hasVisitsKey =\n targetingData[visitorCode] &&\n KameleoonData.VisitsData in targetingData[visitorCode];\n const parameters: FieldParametersType = {\n ...commonParameters,\n key: KameleoonData.VisitsData,\n value: data,\n };\n\n // -- Change directly if `[key]` exists\n if (hasVisitsKey) {\n const existingVisits = targetingData[visitorCode][\n data.type\n ] as ExistingVisitsDataType;\n\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.previousVisits.forEach((visit) => {\n Utilities.insertInOrderedListMutably({\n list: data.previousVisits,\n element: visit,\n order: Order.Ascending,\n });\n });\n\n let currentVisit = existingVisits.currentVisit;\n\n // --- Note ---\n // We are using new current visit in two cases:\n // 1. If there is no current visit in existing data\n // 2. If existing current visit is older than new current visit\n if (\n (!currentVisit && data.currentVisit) ||\n (currentVisit &&\n data.currentVisit &&\n currentVisit < data.currentVisit)\n ) {\n currentVisit = data.currentVisit;\n }\n\n this.updateField({\n ...parameters,\n value: {\n ...data,\n previousVisits: data.previousVisits,\n currentVisit,\n },\n });\n } else {\n this.createField(parameters);\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n const hasDataKey =\n targetingData[visitorCode] && data.type in targetingData[visitorCode];\n const parameters: FieldParametersType = {\n ...commonParameters,\n key: data.type,\n // --- Note ---\n // At this point TypeScript can not infer that value is subset of only\n // what is left for `default` case\n value: data as FieldParametersType['value'],\n };\n\n if (hasDataKey) {\n this.updateField(parameters);\n } else {\n this.createField(parameters);\n }\n }\n }\n\n return this.storage.write(targetingData);\n }\n\n public createVisit(visitorCode: string): Result<void, KameleoonError> {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return Err(storageData.error);\n }\n\n const targetingData = storageData.data;\n\n // --- Note ---\n // Create new visit only if it doesn't exist\n if (!targetingData[visitorCode]?.[KameleoonData.VisitsData]) {\n this.updateField({\n visitorCode,\n key: KameleoonData.VisitsData,\n value: new VisitsData(Date.now(), []).data,\n data: targetingData,\n });\n }\n\n return this.storage.write(targetingData);\n }\n\n public cleanupOutdatedTargetingData(targetingCleanupInterval?: number): void {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return;\n }\n\n const targetingData = storageData.data;\n const targetingDataLifetime = targetingCleanupInterval\n ? targetingCleanupInterval * Milliseconds.Minute\n : DEFAULT_CLEANUP_INTERVAL * Milliseconds.Minute;\n\n const currentTime = Date.now();\n\n // --- Note (Weird Thing) ---\n // Generally the check is not needed\n // If the `targetingData` is empty the loop will not be executed\n // But here something weird happens and we'are getting `TypeError` here\n // Even logging `Object.keys().length` or `Object.entries().length` solves the issue somehow\n // You can see the issue by commenting the following `if` statement and waiting for a data cleanup\n // TODO: investigate it later (probably related to object copying?)\n if (!Object.keys(targetingData).length) {\n return;\n }\n\n for (const [visitorCode, kameleoonVisitorData] of Object.entries(\n targetingData,\n )) {\n const { customData, pageView, conversion, ...rest } =\n kameleoonVisitorData;\n\n // TODO: This way of cleaning up data is not optimal\n // And will be changed when sessions are introduced\n if (customData) {\n for (const [index, dataItem] of Object.entries(customData)) {\n if (dataItem) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n const existingData = kameleoonVisitorData[KameleoonData.CustomData];\n\n if (isDataExpired && existingData) {\n delete existingData[Number(index)];\n }\n\n if (existingData && !Object.keys(existingData).length) {\n delete kameleoonVisitorData[KameleoonData.CustomData];\n }\n }\n }\n }\n\n if (pageView) {\n for (const [url, dataItem] of Object.entries(pageView)) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n const existingData = kameleoonVisitorData[KameleoonData.PageView];\n\n if (isDataExpired && existingData) {\n delete existingData[url];\n }\n\n if (existingData && !Object.keys(existingData).length) {\n delete kameleoonVisitorData[KameleoonData.PageView];\n }\n }\n }\n\n if (conversion) {\n for (const dataItem of conversion) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n const existingData = kameleoonVisitorData[KameleoonData.Conversion];\n\n if (isDataExpired && existingData) {\n existingData.splice(existingData.indexOf(dataItem), 1);\n }\n\n if (existingData && !existingData.length) {\n delete kameleoonVisitorData[KameleoonData.Conversion];\n }\n }\n }\n\n for (const [key, dataItem] of Object.entries(rest)) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n\n if (isDataExpired) {\n delete kameleoonVisitorData[key as KameleoonData];\n }\n }\n\n if (!Object.keys(targetingData[visitorCode]).length) {\n delete targetingData[visitorCode];\n }\n }\n\n this.storage.write(targetingData);\n }\n\n get storedTargetingData(): Result<TargetingDataType, KameleoonError> {\n return this.storage.read();\n }\n\n private updateField({\n visitorCode,\n key,\n value,\n data,\n }: FieldParametersType): void {\n (data[visitorCode][key] as ExistingDataType<typeof key>) = {\n ...value,\n lastActivityTime: Date.now(),\n };\n }\n\n private createField({\n visitorCode,\n key,\n value,\n data,\n }: FieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: { ...value, lastActivityTime: Date.now() },\n };\n }\n\n private updateArrayField({\n visitorCode,\n key,\n value,\n data,\n }: ArrayFieldParametersType): void {\n (data[visitorCode][key] as ExistingArrayDataType).push({\n ...value,\n lastActivityTime: Date.now(),\n });\n }\n\n private createArrayField({\n visitorCode,\n key,\n value,\n data,\n }: ArrayFieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: [{ ...value, lastActivityTime: Date.now() }],\n };\n }\n\n private updateNestedField({\n visitorCode,\n key,\n nestedKey,\n value,\n data,\n }: NestedFieldParametersType): void {\n (data[visitorCode][key] as ExistingNestedDataType)[nestedKey] = {\n ...value,\n lastActivityTime: Date.now(),\n };\n }\n\n private createNestedField({\n visitorCode,\n key,\n nestedKey,\n value,\n data,\n }: NestedFieldParametersType): void {\n if (!data[visitorCode]?.[key]) {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n [nestedKey]: { ...value, lastActivityTime: Date.now() },\n },\n };\n } else {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n ...data[visitorCode][key],\n [nestedKey]: { ...value, lastActivityTime: Date.now() },\n },\n };\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataProcessor.js","names":["DataProcessor","constructor","storage","_defineProperty","updateData","visitorCode","dataItem","targetingData","read","or","commonParameters","data","type","KameleoonData","CustomData","hasCustomDataKey","parameters","_objectSpread","key","nestedKey","index","toString","value","updateNestedField","createNestedField","PageView","e","timestamps","length","Date","now","existingData","urlAddress","forEach","timestamp","Utilities","insertInOrderedListMutably","list","element","order","Order","Ascending","referrers","title","Conversion","hasConversionDataKey","updateArrayField","createArrayField","VisitsData","hasVisitsKey","existingVisits","previousVisits","visit","currentVisit","updateField","createField","hasDataKey","write","createVisit","b","storageData","ok","Err","error","cleanupOutdatedTargetingData","targetingCleanupInterval","targetingDataLifetime","Milliseconds","Minute","DEFAULT_CLEANUP_INTERVAL","currentTime","Object","keys","kameleoonVisitorData","entries","customData","pageView","conversion","rest","_objectWithoutProperties","_excluded","isDataExpired","lastActivityTime","url","splice","indexOf","storedTargetingData","a","push","exports"],"sources":["../../src/kameleoonData/dataProcessor.ts"],"sourcesContent":["import { Err, Result } from 'ts-res';\nimport { IStorage } from 'src/storage';\nimport { TargetingDataType } from 'src/targeting';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { Order } from 'src/utilities/types';\nimport { VisitsData } from './visitsData';\nimport { Milliseconds } from 'src/types';\nimport { DEFAULT_CLEANUP_INTERVAL } from './constants';\nimport {\n ArrayFieldParametersType,\n ConversionDataType,\n CustomDataType,\n ExistingArrayDataType,\n ExistingDataType,\n ExistingNestedDataType,\n ExistingPageViewDataType,\n ExistingVisitsDataType,\n FieldParametersType,\n KameleoonData,\n KameleoonDataType,\n NestedFieldParametersType,\n PageViewDataType,\n VisitsDataType,\n} from './types';\n\ninterface IDataProcessor {\n updateData(\n visitorCode: string,\n dataItem: KameleoonDataType,\n ): Result<void, KameleoonError>;\n createVisit(visitorCode: string): void;\n cleanupOutdatedTargetingData(targetingCleanupInterval?: number): void;\n readonly storedTargetingData: Result<TargetingDataType, KameleoonError>;\n}\n\nexport class DataProcessor implements IDataProcessor {\n private storage: IStorage<TargetingDataType>;\n\n constructor(storage: IStorage<TargetingDataType>) {\n this.storage = storage;\n }\n\n // --- Note ---\n // Following code is optimized for performance:\n // - We don't want to copy the whole object every time we add new data\n // - So we are manually checking the keys existence and mutating targeting data directly\n // - Numerous type casts are required because we can't narrow down nested `targetingData` types by using assertion functions\n public updateData(\n visitorCode: string,\n dataItem: KameleoonDataType,\n ): Result<void, KameleoonError> {\n const targetingData = this.storage.read().or({});\n const commonParameters: Pick<FieldParametersType, 'visitorCode' | 'data'> =\n {\n visitorCode,\n data: targetingData,\n };\n\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n const data = dataItem.data as CustomDataType;\n const hasCustomDataKey =\n targetingData[visitorCode] &&\n KameleoonData.CustomData in targetingData[visitorCode];\n const parameters: NestedFieldParametersType = {\n ...commonParameters,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n\n if (hasCustomDataKey) {\n this.updateNestedField(parameters);\n } else {\n this.createNestedField(parameters);\n }\n\n break;\n }\n case KameleoonData.PageView: {\n const data = dataItem.data as PageViewDataType;\n\n // --- Note ---\n // We assign `timestamps` to `Date.now()` if it's empty\n // Not upon data item creation because it makes no sense in terms\n // of data flow to have some indication of data activity before it was added\n if (!data.timestamps.length) {\n data.timestamps = [Date.now()];\n }\n\n const existingData =\n targetingData[visitorCode] &&\n KameleoonData.PageView in targetingData[visitorCode] &&\n (targetingData[visitorCode][data.type] as ExistingPageViewDataType)?.[\n data.urlAddress\n ];\n\n const parameters: NestedFieldParametersType = {\n ...commonParameters,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n\n if (existingData) {\n // --- Note ---\n // Updating existing `PageView` properties by pushing new timestamps\n // and potentially changing referrers and title\n data.timestamps.forEach((timestamp) => {\n Utilities.insertInOrderedListMutably({\n list: existingData.timestamps,\n element: timestamp,\n order: Order.Ascending,\n });\n });\n\n [existingData.referrers, existingData.title] = [\n data.referrers,\n data.title,\n ];\n\n this.updateNestedField({ ...parameters, value: existingData });\n } else {\n this.createNestedField(parameters);\n }\n\n break;\n }\n case KameleoonData.Conversion: {\n const data = dataItem.data as ConversionDataType;\n const hasConversionDataKey =\n targetingData[visitorCode] &&\n KameleoonData.Conversion in targetingData[visitorCode];\n const parameters: ArrayFieldParametersType = {\n ...commonParameters,\n key: KameleoonData.Conversion,\n value: data,\n };\n\n if (hasConversionDataKey) {\n this.updateArrayField(parameters);\n } else {\n this.createArrayField(parameters);\n }\n\n break;\n }\n case KameleoonData.VisitsData: {\n const data = dataItem.data as VisitsDataType;\n const hasVisitsKey =\n targetingData[visitorCode] &&\n KameleoonData.VisitsData in targetingData[visitorCode];\n const parameters: FieldParametersType = {\n ...commonParameters,\n key: KameleoonData.VisitsData,\n value: data,\n };\n\n // -- Change directly if `[key]` exists\n if (hasVisitsKey) {\n const existingVisits = targetingData[visitorCode][\n data.type\n ] as ExistingVisitsDataType;\n\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.previousVisits.forEach((visit) => {\n Utilities.insertInOrderedListMutably({\n list: data.previousVisits,\n element: visit,\n order: Order.Ascending,\n });\n });\n\n let currentVisit = existingVisits.currentVisit;\n\n // --- Note ---\n // We are using new current visit in two cases:\n // 1. If there is no current visit in existing data\n // 2. If existing current visit is older than new current visit\n if (\n (!currentVisit && data.currentVisit) ||\n (currentVisit &&\n data.currentVisit &&\n currentVisit < data.currentVisit)\n ) {\n currentVisit = data.currentVisit;\n }\n\n this.updateField({\n ...parameters,\n value: {\n ...data,\n previousVisits: data.previousVisits,\n currentVisit,\n },\n });\n } else {\n this.createField(parameters);\n }\n\n break;\n }\n default: {\n const { data } = dataItem;\n const hasDataKey =\n targetingData[visitorCode] && data.type in targetingData[visitorCode];\n const parameters: FieldParametersType = {\n ...commonParameters,\n key: data.type,\n // --- Note ---\n // At this point TypeScript can not infer that value is subset of only\n // what is left for `default` case\n value: data as FieldParametersType['value'],\n };\n\n if (hasDataKey) {\n this.updateField(parameters);\n } else {\n this.createField(parameters);\n }\n }\n }\n\n return this.storage.write(targetingData);\n }\n\n public createVisit(visitorCode: string): Result<void, KameleoonError> {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return Err(storageData.error);\n }\n\n const targetingData = storageData.data;\n\n // --- Note ---\n // Create new visit only if it doesn't exist\n if (!targetingData[visitorCode]?.[KameleoonData.VisitsData]) {\n this.updateField({\n visitorCode,\n key: KameleoonData.VisitsData,\n value: new VisitsData(Date.now(), []).data,\n data: targetingData,\n });\n }\n\n return this.storage.write(targetingData);\n }\n\n public cleanupOutdatedTargetingData(targetingCleanupInterval?: number): void {\n const storageData = this.storage.read();\n\n if (!storageData.ok) {\n return;\n }\n\n const targetingData = storageData.data;\n const targetingDataLifetime = targetingCleanupInterval\n ? targetingCleanupInterval * Milliseconds.Minute\n : DEFAULT_CLEANUP_INTERVAL * Milliseconds.Minute;\n\n const currentTime = Date.now();\n\n // --- Note (Weird Thing) ---\n // Generally the check is not needed\n // If the `targetingData` is empty the loop will not be executed\n // But here something weird happens and we'are getting `TypeError` here\n // Even logging `Object.keys().length` or `Object.entries().length` solves the issue somehow\n // You can see the issue by commenting the following `if` statement and waiting for a data cleanup\n // TODO: investigate it later (probably related to object copying?)\n if (!Object.keys(targetingData).length) {\n return;\n }\n\n for (const [visitorCode, kameleoonVisitorData] of Object.entries(\n targetingData,\n )) {\n const { customData, pageView, conversion, ...rest } =\n kameleoonVisitorData;\n\n // TODO: This way of cleaning up data is not optimal\n // And will be changed when sessions are introduced\n if (customData) {\n for (const [index, dataItem] of Object.entries(customData)) {\n if (dataItem) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n const existingData = kameleoonVisitorData[KameleoonData.CustomData];\n\n if (isDataExpired && existingData) {\n delete existingData[Number(index)];\n }\n\n if (existingData && !Object.keys(existingData).length) {\n delete kameleoonVisitorData[KameleoonData.CustomData];\n }\n }\n }\n }\n\n if (pageView) {\n for (const [url, dataItem] of Object.entries(pageView)) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n const existingData = kameleoonVisitorData[KameleoonData.PageView];\n\n if (isDataExpired && existingData) {\n delete existingData[url];\n }\n\n if (existingData && !Object.keys(existingData).length) {\n delete kameleoonVisitorData[KameleoonData.PageView];\n }\n }\n }\n\n if (conversion) {\n for (const dataItem of conversion) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n const existingData = kameleoonVisitorData[KameleoonData.Conversion];\n\n if (isDataExpired && existingData) {\n existingData.splice(existingData.indexOf(dataItem), 1);\n }\n\n if (existingData && !existingData.length) {\n delete kameleoonVisitorData[KameleoonData.Conversion];\n }\n }\n }\n\n for (const [key, dataItem] of Object.entries(rest)) {\n const isDataExpired =\n dataItem.lastActivityTime + targetingDataLifetime < currentTime;\n\n if (isDataExpired) {\n delete kameleoonVisitorData[key as KameleoonData];\n }\n }\n\n if (!Object.keys(targetingData[visitorCode]).length) {\n delete targetingData[visitorCode];\n }\n }\n\n this.storage.write(targetingData);\n }\n\n get storedTargetingData(): Result<TargetingDataType, KameleoonError> {\n return this.storage.read();\n }\n\n private updateField({\n visitorCode,\n key,\n value,\n data,\n }: FieldParametersType): void {\n (data[visitorCode][key] as ExistingDataType<typeof key>) = {\n ...value,\n lastActivityTime: Date.now(),\n };\n }\n\n private createField({\n visitorCode,\n key,\n value,\n data,\n }: FieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: { ...value, lastActivityTime: Date.now() },\n };\n }\n\n private updateArrayField({\n visitorCode,\n key,\n value,\n data,\n }: ArrayFieldParametersType): void {\n (data[visitorCode][key] as ExistingArrayDataType).push({\n ...value,\n lastActivityTime: Date.now(),\n });\n }\n\n private createArrayField({\n visitorCode,\n key,\n value,\n data,\n }: ArrayFieldParametersType): void {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: [{ ...value, lastActivityTime: Date.now() }],\n };\n }\n\n private updateNestedField({\n visitorCode,\n key,\n nestedKey,\n value,\n data,\n }: NestedFieldParametersType): void {\n (data[visitorCode][key] as ExistingNestedDataType)[nestedKey] = {\n ...value,\n lastActivityTime: Date.now(),\n };\n }\n\n private createNestedField({\n visitorCode,\n key,\n nestedKey,\n value,\n data,\n }: NestedFieldParametersType): void {\n if (!data[visitorCode]?.[key]) {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n [nestedKey]: { ...value, lastActivityTime: Date.now() },\n },\n };\n } else {\n data[visitorCode] = {\n ...data[visitorCode],\n [key]: {\n ...data[visitorCode][key],\n [nestedKey]: { ...value, lastActivityTime: Date.now() },\n },\n };\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Device=void 0;var _requester=require("../requester"),_types=require("./types");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Device=void 0;var _requester=require("../requester"),_types=require("./types");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||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){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)}class Device{constructor(a){_defineProperty(this,"device",void 0),_defineProperty(this,"sent",void 0),this.device=a,this.sent=!1}get url(){return this.device?_requester.UrlEventType.StaticData+_requester.UrlParameter.DeviceType+this.device:""}get data(){return{device:this.device,type:_types.KameleoonData.Device,sent:this.sent}}get isSent(){return this.sent}set isSent(a){this.sent=a}static _fromVisits(a){let b;for(let c=a.length-1;0<=c;c--){const d=a[c];if(!d.staticDataEvent)continue;const{deviceType:e}=d.staticDataEvent.data;e&&(b=e)}if(b)return new Device(b)}}exports.Device=Device;
|
|
2
2
|
//# sourceMappingURL=device.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","names":["Device","
|
|
1
|
+
{"version":3,"file":"device.js","names":["Device","constructor","device","_defineProperty","sent","url","UrlEventType","StaticData","UrlParameter","DeviceType","data","type","KameleoonData","isSent","value","_fromVisits","visits","i","length","visit","staticDataEvent","deviceType","exports"],"sources":["../../src/kameleoonData/device.ts"],"sourcesContent":["import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n DeviceDataType,\n DeviceType,\n IKameleoonData,\n KameleoonData,\n} from './types';\n\n/**\n * @class\n * Device - a class for creating an instance for device of a certain type\n * */\nexport class Device implements IKameleoonData {\n private device: DeviceType;\n private sent: boolean;\n\n /**\n * @param {DeviceType} device - one of the available device types from `DeviceType` enum\n * */\n constructor(device: DeviceType) {\n this.device = device;\n this.sent = false;\n }\n\n /**\n * @property url - url for the current data type used for events tracking\n * */\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.device) {\n return '';\n }\n\n return UrlEventType.StaticData + UrlParameter.DeviceType + this.device;\n }\n\n /**\n * @property data - data of the current class instance\n * */\n get data(): DeviceDataType {\n return {\n device: this.device,\n type: KameleoonData.Device,\n sent: this.sent,\n };\n }\n\n /**\n * @property isSent - signifying if the data was sent already tracked\n * */\n get isSent(): boolean {\n return this.sent;\n }\n\n set isSent(value: boolean) {\n this.sent = value;\n }\n\n /**\n * @private\n * @method _fromVisits - an internal method for creating an instance of Device class from a list of visits\n * @param {VisitType[]} visits - a list of visits\n * @returns {Device | undefined} an instance of Device class or undefined if browser can not be found among visits\n * */\n public static _fromVisits(visits: VisitType[]): Device | undefined {\n let device: DeviceType | undefined = undefined;\n\n // --- Note ---\n // Going backwards to get the latest visit data\n for (let i = visits.length - 1; i >= 0; i--) {\n const visit = visits[i];\n\n if (!visit.staticDataEvent) {\n continue;\n }\n\n const { deviceType } = visit.staticDataEvent.data;\n\n if (deviceType) {\n device = deviceType;\n }\n }\n\n if (device) {\n return new Device(device);\n }\n }\n}\n"],"mappings":"8pBAYO,KAAM,CAAAA,MAAiC,CAO5CC,WAAWA,CAACC,CAAkB,CAAE,CAAAC,eAAA,uBAAAA,eAAA,qBAC9B,IAAI,CAACD,MAAM,CAAGA,CAAM,CACpB,IAAI,CAACE,IAAI,GACX,CAKA,GAAI,CAAAC,GAAGA,CAAA,CAAW,OAIX,KAAI,CAACH,MAAM,CAITI,uBAAY,CAACC,UAAU,CAAGC,uBAAY,CAACC,UAAU,CAAG,IAAI,CAACP,MAAM,CAH7D,EAIX,CAKA,GAAI,CAAAQ,IAAIA,CAAA,CAAmB,CACzB,MAAO,CACLR,MAAM,CAAE,IAAI,CAACA,MAAM,CACnBS,IAAI,CAAEC,oBAAa,CAACZ,MAAM,CAC1BI,IAAI,CAAE,IAAI,CAACA,IACb,CACF,CAKA,GAAI,CAAAS,MAAMA,CAAA,CAAY,CACpB,MAAO,KAAI,CAACT,IACd,CAEA,GAAI,CAAAS,MAAMA,CAACC,CAAc,CAAE,CACzB,IAAI,CAACV,IAAI,CAAGU,CACd,CAQA,MAAc,CAAAC,WAAWA,CAACC,CAAmB,CAAsB,CACjE,GAAI,CAAAd,CAA0C,CAI9C,IAAK,GAAI,CAAAe,CAAC,CAAGD,CAAM,CAACE,MAAM,CAAG,CAAC,CAAO,CAAC,EAAND,CAAM,CAAEA,CAAC,EAAE,CAAE,CAC3C,KAAM,CAAAE,CAAK,CAAGH,CAAM,CAACC,CAAC,CAAC,CAEvB,GAAI,CAACE,CAAK,CAACC,eAAe,CACxB,SAGF,KAAM,CAAEC,UAAU,CAAVA,CAAW,CAAC,CAAGF,CAAK,CAACC,eAAe,CAACV,IAAI,CAE7CW,CAAU,GACZnB,CAAM,CAAGmB,CAAU,CAEvB,CAEA,GAAInB,CAAM,CACR,MAAO,IAAI,CAAAF,MAAM,CAACE,CAAM,CAE5B,CACF,CAACoB,OAAA,CAAAtB,MAAA,CAAAA,MAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GeolocationData=void 0;var _requester=require("../requester"),_types=require("./types");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GeolocationData=void 0;var _requester=require("../requester"),_types=require("./types");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||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){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)}class GeolocationData{constructor(a){let{country:b,region:c,city:d,postalCode:e,coordinates:f}=a;_defineProperty(this,"country",void 0),_defineProperty(this,"region",void 0),_defineProperty(this,"city",void 0),_defineProperty(this,"postalCode",void 0),_defineProperty(this,"coordinates",void 0),_defineProperty(this,"sent",void 0),this.country=b,this.region=c,this.city=d,this.postalCode=e,this.coordinates=f,this.sent=!1}get url(){const a=this.region?_requester.UrlParameter.Region+encodeURIComponent(this.region):"",b=this.city?_requester.UrlParameter.City+encodeURIComponent(this.city):"",c=this.postalCode?_requester.UrlParameter.PostalCode+encodeURIComponent(this.postalCode):"",d=this.coordinates?_requester.UrlParameter.Latitude+this.coordinates[0]+_requester.UrlParameter.Longitude+this.coordinates[1]:"";return _requester.UrlEventType.Geolocation+_requester.UrlParameter.Country+encodeURIComponent(this.country)+a+b+c+d}get data(){return{type:_types.KameleoonData.GeolocationData,country:this.country,region:this.region,city:this.city,postalCode:this.postalCode,coordinates:this.coordinates,sent:this.sent}}get isSent(){return this.sent}set isSent(a){this.sent=a}static _fromVisits(a){let b;for(let c=a.length-1;0<=c;c--){const d=a[c];if(!d.geolocationEvents)continue;const e=d.geolocationEvents;for(const a of e){const{data:c}=a;c.country&&(b=c)}}const{country:c,region:d,city:e}=b||{};if(c)return d&&e?new GeolocationData({country:c,region:d,city:e}):d?new GeolocationData({country:c,region:d}):new GeolocationData({country:c})}}exports.GeolocationData=GeolocationData;
|
|
2
2
|
//# sourceMappingURL=geolocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geolocation.js","names":["GeolocationData","
|
|
1
|
+
{"version":3,"file":"geolocation.js","names":["GeolocationData","constructor","a","country","region","city","postalCode","coordinates","_defineProperty","sent","url","UrlParameter","Region","encodeURIComponent","City","PostalCode","Latitude","Longitude","UrlEventType","Geolocation","Country","data","type","KameleoonData","isSent","value","_fromVisits","visits","geolocationData","i","length","visit","geolocationEvents","geolocationEvent","exports"],"sources":["../../src/kameleoonData/geolocation.ts"],"sourcesContent":["import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport { GeolocationEventType } from 'src/requester/types';\nimport {\n IKameleoonData,\n KameleoonData,\n GeolocationInfoType,\n GeolocationDataType,\n} from './types';\n\n/**\n * @class\n * Geolocation - a class for creating an instance for geolocation data\n * */\nexport class GeolocationData implements IKameleoonData {\n private country: string;\n private region?: string;\n private city?: string;\n private postalCode?: string;\n private coordinates?: [number, number];\n private sent: boolean;\n\n /**\n * @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor\n * @example\n * ```ts\n * // Visitor is located at Triumph Arch in Paris, France\n * const location: GeolocationDataType = {\n * country: 'France',\n * region: 'Île-de-France',\n * city: 'Paris',\n * postalCode: '75008',\n * coordinates: [48.8738, 2.295]\n * };\n *\n * const geolocation = new GeolocationData(location);\n * ```\n *\n * */\n constructor({\n country,\n region,\n city,\n postalCode,\n coordinates,\n }: GeolocationInfoType) {\n this.country = country;\n this.region = region;\n this.city = city;\n this.postalCode = postalCode;\n this.coordinates = coordinates;\n this.sent = false;\n }\n\n /**\n * @property url - url for the current data type used for events tracking\n * */\n get url(): string {\n const region = this.region\n ? UrlParameter.Region + encodeURIComponent(this.region)\n : '';\n const city = this.city\n ? UrlParameter.City + encodeURIComponent(this.city)\n : '';\n const postalCode = this.postalCode\n ? UrlParameter.PostalCode + encodeURIComponent(this.postalCode)\n : '';\n const coordinates = this.coordinates\n ? UrlParameter.Latitude +\n this.coordinates[0] +\n UrlParameter.Longitude +\n this.coordinates[1]\n : '';\n\n return (\n UrlEventType.Geolocation +\n UrlParameter.Country +\n encodeURIComponent(this.country) +\n region +\n city +\n postalCode +\n coordinates\n );\n }\n\n /**\n * @property data - data of the current class instance\n * */\n get data(): GeolocationDataType {\n return {\n type: KameleoonData.GeolocationData,\n country: this.country,\n region: this.region,\n city: this.city,\n postalCode: this.postalCode,\n coordinates: this.coordinates,\n sent: this.sent,\n };\n }\n\n /**\n * @property isSent - signifying if the data was sent already tracked\n * */\n get isSent(): boolean {\n return this.sent;\n }\n\n set isSent(value: boolean) {\n this.sent = value;\n }\n\n /**\n * @private\n * @method _fromVisits - an internal method for creating an instance of GeolocationData class from a list of visits\n * @param {VisitType[]} visits - a list of visits\n * @returns {GeolocationData | undefined} an instance of GeolocationData class or undefined if geolocation can not be found among visits\n * */\n public static _fromVisits(visits: VisitType[]): GeolocationData | undefined {\n let geolocationData: GeolocationEventType['data'] | undefined = undefined;\n\n // --- Note ---\n // Going backwards to get the latest visit data\n for (let i = visits.length - 1; i >= 0; i--) {\n const visit = visits[i];\n\n if (!visit.geolocationEvents) {\n continue;\n }\n\n const geolocationEvents = visit.geolocationEvents;\n\n for (const geolocationEvent of geolocationEvents) {\n const { data } = geolocationEvent;\n\n if (data.country) {\n geolocationData = data;\n }\n }\n }\n\n // --- Note ---\n // We only take `country`, `region`, and `city` from geolocation event ignoring other fields\n // as they are not participating in targeting, and visits data won't be tracked again\n const { country, region, city } = geolocationData || {};\n\n if (country) {\n if (region && city) {\n return new GeolocationData({ country, region, city });\n } else if (region) {\n return new GeolocationData({ country, region });\n } else {\n return new GeolocationData({ country });\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.constructTypeMap=constructTypeMap;function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.constructTypeMap=constructTypeMap;function constructTypeMap(a){return Object.fromEntries(Object.entries(a).map(a=>{let[b,c]=a;return[c,b]}))}
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["constructTypeMap","indexMap","Object","fromEntries","entries","map","a","
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["constructTypeMap","indexMap","Object","fromEntries","entries","map","a","key","value"],"sources":["../../src/kameleoonData/helpers.ts"],"sourcesContent":["export function constructTypeMap<T extends string>(\n indexMap: Record<T, number>,\n): Record<number, T> {\n return Object.fromEntries(\n Object.entries(indexMap).map(([key, value]) => [value, key]),\n ) as Record<number, T>;\n}\n"],"mappings":"8GAAO,QAAS,CAAAA,gBAAgBA,CAC9BC,CAA2B,CACR,CACnB,MAAO,CAAAC,MAAM,CAACC,WAAW,CACvBD,MAAM,CAACE,OAAO,CAACH,CAAQ,CAAC,CAACI,GAAG,CAACC,CAAA,MAAC,CAACC,CAAG,CAAEC,CAAK,CAAC,CAAAF,CAAA,OAAK,CAACE,CAAK,CAAED,CAAG,CAAC,EAC7D,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ApplicationVersion",{enumerable:!0,get:function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"ApplicationVersion",{enumerable:!0,get:function(){return _applicationVersion.ApplicationVersion}}),Object.defineProperty(exports,"ApplicationVersionDataType",{enumerable:!0,get:function(){return _types.ApplicationVersionDataType}}),Object.defineProperty(exports,"Browser",{enumerable:!0,get:function(){return _browser.Browser}}),Object.defineProperty(exports,"BrowserDataType",{enumerable:!0,get:function(){return _types.BrowserDataType}}),Object.defineProperty(exports,"BrowserIndexMap",{enumerable:!0,get:function(){return _types.BrowserIndexMap}}),Object.defineProperty(exports,"BrowserType",{enumerable:!0,get:function(){return _types.BrowserType}}),Object.defineProperty(exports,"Conversion",{enumerable:!0,get:function(){return _conversion.Conversion}}),Object.defineProperty(exports,"ConversionDataType",{enumerable:!0,get:function(){return _types.ConversionDataType}}),Object.defineProperty(exports,"ConversionParametersType",{enumerable:!0,get:function(){return _types.ConversionParametersType}}),Object.defineProperty(exports,"Cookie",{enumerable:!0,get:function(){return _cookie.Cookie}}),Object.defineProperty(exports,"CookieType",{enumerable:!0,get:function(){return _types.CookieType}}),Object.defineProperty(exports,"CustomData",{enumerable:!0,get:function(){return _customData.CustomData}}),Object.defineProperty(exports,"CustomDataType",{enumerable:!0,get:function(){return _types.CustomDataType}}),Object.defineProperty(exports,"DEFAULT_CLEANUP_INTERVAL",{enumerable:!0,get:function(){return _constants.DEFAULT_CLEANUP_INTERVAL}}),Object.defineProperty(exports,"DataManager",{enumerable:!0,get:function(){return _dataManager.DataManager}}),Object.defineProperty(exports,"Device",{enumerable:!0,get:function(){return _device.Device}}),Object.defineProperty(exports,"DeviceDataType",{enumerable:!0,get:function(){return _types.DeviceDataType}}),Object.defineProperty(exports,"DeviceType",{enumerable:!0,get:function(){return _types.DeviceType}}),Object.defineProperty(exports,"GeolocationData",{enumerable:!0,get:function(){return _geolocation.GeolocationData}}),Object.defineProperty(exports,"GeolocationInfoType",{enumerable:!0,get:function(){return _types.GeolocationInfoType}}),Object.defineProperty(exports,"KameleoonData",{enumerable:!0,get:function(){return _types.KameleoonData}}),Object.defineProperty(exports,"KameleoonDataItemType",{enumerable:!0,get:function(){return _types.KameleoonDataItemType}}),Object.defineProperty(exports,"KameleoonDataType",{enumerable:!0,get:function(){return _types.KameleoonDataType}}),Object.defineProperty(exports,"OperatingSystem",{enumerable:!0,get:function(){return _operatingSystem.OperatingSystem}}),Object.defineProperty(exports,"OperatingSystemType",{enumerable:!0,get:function(){return _types.OperatingSystemType}}),Object.defineProperty(exports,"PageView",{enumerable:!0,get:function(){return _pageView.PageView}}),Object.defineProperty(exports,"PageViewDataType",{enumerable:!0,get:function(){return _types.PageViewDataType}}),Object.defineProperty(exports,"PageViewParametersType",{enumerable:!0,get:function(){return _types.PageViewParametersType}}),Object.defineProperty(exports,"UserAgent",{enumerable:!0,get:function(){return _userAgent.UserAgent}}),Object.defineProperty(exports,"UserAgentDataType",{enumerable:!0,get:function(){return _types.UserAgentDataType}}),Object.defineProperty(exports,"VisitsData",{enumerable:!0,get:function(){return _visitsData.VisitsData}}),Object.defineProperty(exports,"VisitsDataType",{enumerable:!0,get:function(){return _types.VisitsDataType}});var _device=require("./device"),_cookie=require("./cookie"),_browser=require("./browser"),_pageView=require("./pageView"),_userAgent=require("./userAgent"),_customData=require("./customData"),_conversion=require("./conversion"),_geolocation=require("./geolocation"),_operatingSystem=require("./operatingSystem"),_applicationVersion=require("./applicationVersion"),_visitsData=require("./visitsData"),_constants=require("./constants"),_types=require("./types"),_dataManager=require("./dataManager");
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OperatingSystem=void 0;var _requester=require("../requester"),_types=require("./types");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OperatingSystem=void 0;var _requester=require("../requester"),_types=require("./types");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||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){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)}class OperatingSystem{constructor(a){_defineProperty(this,"operatingSystem",void 0),_defineProperty(this,"sent",void 0),this.operatingSystem=a,this.sent=!1}get url(){return this.operatingSystem?_requester.UrlEventType.StaticData+_requester.UrlParameter.Os+this.operatingSystem+_requester.UrlParameter.OsIndex+_types.OperatingSystemIndexMap[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:_types.KameleoonData.OperatingSystem,sent:this.sent}}get isSent(){return this.sent}set isSent(a){this.sent=a}static _fromVisits(a){let b={};for(let c=a.length-1;0<=c;c--){const d=a[c];if(!d.staticDataEvent)continue;const{os:e,osIndex:f}=d.staticDataEvent.data;(e||null!==f)&&(b={operatingSystemType:e,osIndex:f})}const{operatingSystemType:c,osIndex:d}=b;if(c||"number"==typeof d){const a=c||_types.OperatingSystemTypeMap[d];return new OperatingSystem(a)}}}exports.OperatingSystem=OperatingSystem;
|
|
2
2
|
//# sourceMappingURL=operatingSystem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operatingSystem.js","names":["OperatingSystem","
|
|
1
|
+
{"version":3,"file":"operatingSystem.js","names":["OperatingSystem","constructor","operatingSystem","_defineProperty","sent","url","UrlEventType","StaticData","UrlParameter","Os","OsIndex","OperatingSystemIndexMap","data","type","KameleoonData","isSent","value","_fromVisits","visits","operatingSystemData","i","length","visit","staticDataEvent","os","operatingSystemType","osIndex","OperatingSystemTypeMap","exports"],"sources":["../../src/kameleoonData/operatingSystem.ts"],"sourcesContent":["import { UrlEventType, UrlParameter, VisitType } from 'src/requester';\nimport {\n IKameleoonData,\n KameleoonData,\n OperatingSystemDataType,\n OperatingSystemIndexMap,\n OperatingSystemType,\n OperatingSystemTypeMap,\n} from './types';\n\n/**\n * @class\n * OperatingSystem - a class for creating an instance for Operating System of a certain type\n * */\nexport class OperatingSystem implements IKameleoonData {\n private operatingSystem: OperatingSystemType;\n private sent: boolean;\n\n /**\n * @param {OperatingSystemType} operatingSystem - one of the available operating system types from `OperatingSystemType` enum\n * */\n constructor(operatingSystem: OperatingSystemType) {\n this.operatingSystem = operatingSystem;\n this.sent = false;\n }\n\n /**\n * @property url - url for the current data type used for events tracking\n * */\n get url(): string {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.operatingSystem) {\n return '';\n }\n\n return (\n UrlEventType.StaticData +\n UrlParameter.Os +\n this.operatingSystem +\n UrlParameter.OsIndex +\n OperatingSystemIndexMap[this.operatingSystem]\n );\n }\n\n /**\n * @property data - data of the current class instance\n * */\n get data(): OperatingSystemDataType {\n return {\n operatingSystem: this.operatingSystem,\n type: KameleoonData.OperatingSystem,\n sent: this.sent,\n };\n }\n\n /**\n * @property isSent - signifying if the data was sent already tracked\n * */\n get isSent(): boolean {\n return this.sent;\n }\n\n set isSent(value: boolean) {\n this.sent = value;\n }\n\n /**\n * @private\n * @method _fromVisits - a static method for creating an instance of OperatingSystem class from a list of visits\n * @param {VisitType[]} visits - a list of visits\n * @returns {OperatingSystem | undefined} an instance of OperatingSystem class or undefined\n * */\n public static _fromVisits(visits: VisitType[]): OperatingSystem | undefined {\n let operatingSystemData: {\n operatingSystemType?: OperatingSystemType | null;\n osIndex?: number | null;\n } = {};\n\n // --- Note ---\n // Going backwards to get the latest visit data\n for (let i = visits.length - 1; i >= 0; i--) {\n const visit = visits[i];\n\n if (!visit.staticDataEvent) {\n continue;\n }\n\n const { os: operatingSystemType, osIndex } = visit.staticDataEvent.data;\n\n if (operatingSystemType || osIndex !== null) {\n operatingSystemData = { operatingSystemType, osIndex };\n }\n }\n\n const { operatingSystemType, osIndex } = operatingSystemData;\n\n if (operatingSystemType || typeof osIndex === 'number') {\n const operatingSystem =\n operatingSystemType || OperatingSystemTypeMap[osIndex as number];\n\n return new OperatingSystem(operatingSystem);\n }\n }\n}\n"],"mappings":"uqBAcO,KAAM,CAAAA,eAA0C,CAOrDC,WAAWA,CAACC,CAAoC,CAAE,CAAAC,eAAA,gCAAAA,eAAA,qBAChD,IAAI,CAACD,eAAe,CAAGA,CAAe,CACtC,IAAI,CAACE,IAAI,GACX,CAKA,GAAI,CAAAC,GAAGA,CAAA,CAAW,OAIX,KAAI,CAACH,eAAe,CAKvBI,uBAAY,CAACC,UAAU,CACvBC,uBAAY,CAACC,EAAE,CACf,IAAI,CAACP,eAAe,CACpBM,uBAAY,CAACE,OAAO,CACpBC,8BAAuB,CAAC,IAAI,CAACT,eAAe,CAAC,CARtC,EAUX,CAKA,GAAI,CAAAU,IAAIA,CAAA,CAA4B,CAClC,MAAO,CACLV,eAAe,CAAE,IAAI,CAACA,eAAe,CACrCW,IAAI,CAAEC,oBAAa,CAACd,eAAe,CACnCI,IAAI,CAAE,IAAI,CAACA,IACb,CACF,CAKA,GAAI,CAAAW,MAAMA,CAAA,CAAY,CACpB,MAAO,KAAI,CAACX,IACd,CAEA,GAAI,CAAAW,MAAMA,CAACC,CAAc,CAAE,CACzB,IAAI,CAACZ,IAAI,CAAGY,CACd,CAQA,MAAc,CAAAC,WAAWA,CAACC,CAAmB,CAA+B,CAC1E,GAAI,CAAAC,CAGH,CAAG,CAAC,CAAC,CAIN,IAAK,GAAI,CAAAC,CAAC,CAAGF,CAAM,CAACG,MAAM,CAAG,CAAC,CAAO,CAAC,EAAND,CAAM,CAAEA,CAAC,EAAE,CAAE,CAC3C,KAAM,CAAAE,CAAK,CAAGJ,CAAM,CAACE,CAAC,CAAC,CAEvB,GAAI,CAACE,CAAK,CAACC,eAAe,CACxB,SAGF,KAAM,CAAEC,EAAE,CAAEC,CAAmB,CAAEC,OAAO,CAAPA,CAAQ,CAAC,CAAGJ,CAAK,CAACC,eAAe,CAACX,IAAI,CAAC,CAEpEa,CAAmB,EAAgB,IAAI,GAAhBC,CAAgB,IACzCP,CAAmB,CAAG,CAAEM,mBAAmB,CAAnBA,CAAmB,CAAEC,OAAO,CAAPA,CAAQ,CAAC,CAE1D,CAEA,KAAM,CAAED,mBAAmB,CAAnBA,CAAmB,CAAEC,OAAO,CAAPA,CAAQ,CAAC,CAAGP,CAAmB,CAE5D,GAAIM,CAAmB,EAAuB,QAAQ,EAA3B,MAAO,CAAAC,CAAoB,CAAE,CACtD,KAAM,CAAAxB,CAAe,CACnBuB,CAAmB,EAAIE,6BAAsB,CAACD,CAAO,CAAW,CAElE,MAAO,IAAI,CAAA1B,eAAe,CAACE,CAAe,CAC5C,CACF,CACF,CAAC0B,OAAA,CAAA5B,eAAA,CAAAA,eAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PageView=void 0;var _requester=require("../requester"),_utilities=require("../utilities"),_types=require("../utilities/types"),_types2=require("./types");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PageView=void 0;var _requester=require("../requester"),_utilities=require("../utilities"),_types=require("../utilities/types"),_types2=require("./types");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||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){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)}class PageView{constructor(a){let{urlAddress:b,title:c,referrers:d}=a;_defineProperty(this,"urlAddress",void 0),_defineProperty(this,"title",void 0),_defineProperty(this,"referrers",void 0),_defineProperty(this,"sent",void 0),_defineProperty(this,"timestampList",[]),this.urlAddress=b,this.title=c,this.referrers=d,this.sent=!1}get url(){var a;if(!this.urlAddress)return"";const b=this.title?_requester.UrlParameter.Title+encodeURIComponent(this.title):"",c=null!==(a=this.referrers)&&void 0!==a&&a.length?_requester.UrlParameter.ReferrersIndices+JSON.stringify(this.referrers):"";return _requester.UrlEventType.Page+_requester.UrlParameter.Href+encodeURIComponent(this.urlAddress)+b+c}get data(){return{urlAddress:this.urlAddress,title:this.title,referrers:this.referrers,type:_types2.KameleoonData.PageView,sent:this.sent,timestamps:this.timestampList}}get isSent(){return this.sent}set isSent(a){this.sent=a}get timestamps(){return this.timestampList}set timestamps(a){const b=new Set(a);this.timestampList.length?b.forEach(a=>{_utilities.Utilities.insertInOrderedListMutably({list:this.timestampList,element:a,order:_types.Order.Ascending})}):this.timestampList=[...b]}static _listFromVisits(a){const b=[],c=new Map;for(let b=a.length-1;0<=b;b--){const d=a[b];if(!d.pageEvents)continue;const e=d.pageEvents;for(const a of e){let b=[];const{time:d}=a,{href:e,title:f,referrersIndices:g}=a.data;"number"==typeof g[0]&&(b=g);let h;if(c.has(e)){const a=c.get(e).timestamps;h=new PageView({urlAddress:e,title:f,referrers:b}),h.timestamps=[...a,d]}else h=new PageView({urlAddress:e,title:f,referrers:b}),h.timestamps=[d];c.set(e,h)}}return c.forEach(a=>{a.isSent=!0,b.push(a)}),b}}exports.PageView=PageView;
|
|
2
2
|
//# sourceMappingURL=pageView.js.map
|