platform-helpers/cdh-configuration-beautifier.js

/**
 * 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;