/**
* Cdh Configuration Beautifier class. Simplifies the CDH configuration object.
*
* @static
*/
class CdhConfigurationBeautifier {
static cache = null;
/**
* Filters the main data from the CDH configuration object to a simplified object with:
*
* "Visitor Attributes"
* "Event Attributes"
* "Audiences by Id to Name"
* "Audiences by Name to Id"
* "Event Specs"
* @static
* @method
* @param {Object} cdhConfigurationData A composite representation of the CDH configuration
* @returns {Object} A simplified object with a structural definition between ID and Name for the various CDH configuration
*/
static beautify = (rawCdhConfigData) => {
if (CdhConfigurationBeautifier.cache) return CdhConfigurationBeautifier.cache;
CdhConfigurationBeautifier.cache = {
visitorAttributes: CdhConfigurationBeautifier.beautifyVisitorAttributes(rawCdhConfigData),
eventAttributes: CdhConfigurationBeautifier.beautifyEventAttributes(rawCdhConfigData),
audiences: CdhConfigurationBeautifier.beautifyAudiencesById(rawCdhConfigData),
reverseAudiences: CdhConfigurationBeautifier.beautifyAudiencesByName(rawCdhConfigData),
eventSpecs: CdhConfigurationBeautifier.beautifyEventSpecs(rawCdhConfigData)
};
return CdhConfigurationBeautifier.cache;
};
/**
* Filters the main data from the CDH configuration object to a simplified object with:
*
* "Visitor Attributes"
* @static
* @method
* @param {Object} cdhConfigurationData A composite representation of the CDH configuration
* @returns {Object} A simplified object with a structural definition between ID and Name for CDH visitor attributes
*/
static beautifyVisitorAttributes = (cdhConfigData) => {
const payload = {};
cdhConfigData.quantifiers.forEach((attr) => {
if (attr.context === 'Visitor' || attr.context === 'Current Visit') {
const key = String(attr.id);
payload[key] = attr;
}
});
return payload;
};
/**
* Filters the main data from the CDH configuration object to a simplified object with:
*
* "Event Attributes"
* @static
* @method
* @param {Object} cdhConfigurationData A composite representation of the CDH configuration
* @returns {Object} A simplified object with a structural definition between ID and Name for CDH event attributes
*/
static beautifyEventAttributes = (cdhConfigData) => {
const payload = {};
cdhConfigData.quantifiers.forEach((attr) => {
if (attr.context === 'Event' && attr.dataSourceType !== 'tag') {
payload[attr.id] = { name: attr.name };
}
});
return payload;
};
/**
* Filters the main data from the CDH configuration object to a simplified object with:
*
* "Audiences by Id to Name"
* @static
* @method
* @param {Object} cdhConfigurationData A composite representation of the CDH configuration
* @returns {Object} A simplified object with a structural definition between ID and Name for CDH audiences
*/
static beautifyAudiencesById = (cdhConfigData) => {
const payload = {};
const audienceObject = cdhConfigData.audiences || {};
const audienceKeys = Object.keys(audienceObject);
audienceKeys.forEach((audienceId) => {
const audienceInfo = cdhConfigData.audiences[audienceId];
payload[audienceId] = { name: audienceInfo.name };
});
return payload;
};
/**
* Filters the main data from the CDH configuration object to a simplified object with:
*
* "Audiences by Name to Id"
* @static
* @method
* @param {Object} cdhConfigurationData A composite representation of the CDH configuration
* @returns {Object} A simplified object with a structural definition between Name and ID for CDH audiences
*/
static beautifyAudiencesByName = (cdhConfigData) => {
const payload = {};
const audienceObject = cdhConfigData.audiences || {};
const audienceKeys = Object.keys(audienceObject);
audienceKeys.forEach((audienceId) => {
const audienceInfo = cdhConfigData.audiences[audienceId];
payload[audienceInfo.name] = { id: audienceId };
});
return payload;
};
/**
* Filters the main data from the CDH configuration object to a simplified object with:
*
* "Event Specs"
* @static
* @method
* @param {Object} cdhConfigurationData A composite representation of the CDH configuration
* @returns {Object} A simplified object with a structural definition between ID and Name for CDH event specifications
*/
static beautifyEventSpecs = (cdhConfigData) => {
const payload = {};
cdhConfigData.eventDefinitions.forEach((spec) => {
const key = spec.tealiumEvent;
payload[key] = spec;
});
return payload;
};
}
module.exports = CdhConfigurationBeautifier;