{"version":3,"sources":["jsdelivr-header.js","/npm/@widgetsburritos/gtm-flow@1.0.4/src/gtmFlow.js"],"names":[],"mappings":"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","file":"/npm/@widgetsburritos/gtm-flow@1.0.4/src/gtmFlow.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@widgetsburritos/gtm-flow@1.0.4/src/gtmFlow.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fs = require('fs');\n\n/**\n * A list of global triggers.\n */\nconst globalTriggers = {\n  2147479553: {\n    name: 'All Pages',\n    type: 'global',\n  },\n};\n\n/**\n * Retrieves the trigger hash map.\n */\nconst getTriggerHashMap = (gtmContainer) => {\n  // Build trigger hash map.\n  const triggers = globalTriggers;\n  gtmContainer.containerVersion.trigger.forEach((trigger) => {\n    triggers[trigger.triggerId] = trigger;\n  });\n  return triggers;\n};\n\n/**\n * Get Tag Hash Map.\n */\nconst getTagHashMap = (gtmContainer) => {\n  const tags = {};\n  gtmContainer.containerVersion.tag.forEach((tag) => {\n    tags[tag.tagId] = tag;\n  });\n  return tags;\n};\n\n/**\n * Get Trigger Tags Hash Map.\n */\nconst getTagHashMapByTrigger = (gtmContainer) => {\n  const triggerTags = { };\n  gtmContainer.containerVersion.tag.forEach((tag) => {\n    if (tag.firingTriggerId) {\n      tag.firingTriggerId.forEach((triggerId) => {\n        if (typeof triggerTags[triggerId] === 'undefined') {\n          triggerTags[triggerId] = {};\n        }\n        triggerTags[triggerId][tag.tagId] = tag;\n      });\n    }\n  });\n  return triggerTags;\n};\n\n/**\n * Generates the mermaid syntax for creating the respective flowcharts.\n */\nconst generateTriggerReportFlowCharts = (gtmContainer) => {\n  const flowCharts = [];\n  const triggers = getTriggerHashMap(gtmContainer);\n  const triggerTags = getTagHashMapByTrigger(gtmContainer);\n  Object.keys(triggerTags).forEach((triggerId) => {\n    const trigger = triggers[triggerId];\n    const tags = triggerTags[triggerId];\n    const template = ['stateDiagram-v2'];\n    Object.values(tags).forEach((tag) => {\n      const blockingTriggers = (tag.blockingTriggerId && tag.blockingTriggerId.sort()) || [];\n      let leftId = `trigger${triggerId}`;\n      const farRightId = `tag${tag.tagId}`;\n      let rightId = farRightId;\n      const id = `trigger${triggerId}`;\n      template.push(`\\ttag${tag.tagId}: ${tag.name}`);\n      template.push(`\\t[*] --> ${id}`);\n      template.push(`\\t${id}: ${trigger.name}`);\n      template.push(`\\t${id} --> [*]: Not Triggered`);\n\n      let first = true;\n      blockingTriggers.forEach((blockingTriggerId) => {\n        const blockingTrigger = triggers[blockingTriggerId];\n        rightId = `bTrigger_${triggerId}_${blockingTriggerId}`;\n        template.push(`\\t${rightId}: ${blockingTrigger.name}`);\n        template.push(`\\t${rightId} --> [*]: Triggered`);\n        const label = first ? 'Triggered' : 'Not Triggered';\n        template.push(`\\t${leftId} --> ${rightId}: ${label}`);\n        leftId = rightId;\n        first = false;\n      });\n\n      template.push(`\\t${leftId} --> ${farRightId}`);\n    });\n    flowCharts.push(template);\n  });\n  return flowCharts;\n};\n\n/**\n * Retrieves an operation based on specified type.\n */\nconst getOperation = (type) => {\n  switch (type) {\n    case 'CONTAINS':\n    case 'MATCH_REGEX':\n      return '=~';\n    case 'STARTS_WITH':\n      return '=~^';\n    case 'EQUALS':\n    default:\n      return '=';\n  }\n};\n\n/**\n * Generates notes for filters.\n */\nconst generateFilterNote = (template, filters) => {\n  if (filters && filters[0]) {\n    filters.forEach((filter) => {\n      const { type, parameter } = filter;\n      if (parameter[0].type === 'TEMPLATE') {\n        const operation = getOperation(type);\n        template.push(`\\t\\t${parameter[0].value} ${operation} ${parameter[1].value}`);\n      }\n    });\n  }\n};\n\n/**\n * Generates notes for triggers.\n */\nconst generateTriggerNote = (template, trigger, id) => {\n  template.push(`\\tnote right of ${id}`);\n  template.push(`\\t\\tType = ${trigger.type}`);\n\n  [trigger.autoEventFilter, trigger.customEventFilter].forEach((filter) => {\n    generateFilterNote(template, filter);\n  });\n\n  if (trigger.filter) {\n    trigger.filter.forEach((filter) => {\n      const { type, parameter } = filter;\n      console.log(filter);\n      const operation = getOperation(type);\n      const left = parameter[0].value;\n      const right = parameter[1].value;\n      const negate = parameter[2] && parameter[2].key === 'negate' && parameter[2].value === 'true' ? '!' : '';\n      template.push(`\\t\\t${left} ${negate}${operation} ${right}`);\n    });\n  }\n\n  template.push('\\tend note');\n};\n\n/**\n * Generates the mermaid syntax for creating the respective flowcharts.\n */\nconst generateTagReportFlowCharts = (gtmContainer) => {\n  const flowCharts = [];\n  const triggers = getTriggerHashMap(gtmContainer);\n  const tags = getTagHashMap(gtmContainer);\n\n  Object.values(tags).forEach((tag) => {\n    const template = ['stateDiagram-v2'];\n    const firingTriggers = (tag.firingTriggerId && tag.firingTriggerId.sort()) || [];\n    const blockingTriggers = (tag.blockingTriggerId && tag.blockingTriggerId.sort()) || [];\n    const triggerIds = [];\n    firingTriggers.forEach((firingTriggerId) => {\n      const trigger = triggers[firingTriggerId];\n      const id = `trigger${firingTriggerId}`;\n      template.push(`\\t[*] --> ${id}`);\n      template.push(`\\t${id}: ${trigger.name}`);\n      generateTriggerNote(template, trigger, id);\n      triggerIds.push(id);\n    });\n    let first = true;\n    let leftId = '[*]';\n    let rightId = `tag${tag.tagId}`;\n    if (blockingTriggers.length) {\n      blockingTriggers.forEach((blockingTriggerId) => {\n        const trigger = triggers[blockingTriggerId];\n        rightId = `bTrigger${blockingTriggerId}`;\n        // TODO: Why does this condition happen? (trigger.triggerId: 2147479553 -- MAXINT)\n        if (!trigger) {\n          return;\n        }\n        template.push(`\\t${rightId} : ${trigger.name}`);\n        generateTriggerNote(template, trigger, rightId);\n        // Our first time through the loop, link the regular triggers to the first\n        // blocking trigger.\n        if (first) {\n          triggerIds.forEach((triggerId) => {\n            template.push(`\\t${triggerId} --> ${rightId} : Triggered`);\n            template.push(`\\t${triggerId} --> [*]: Not Triggered`);\n          });\n          first = false;\n        } else {\n          template.push(`\\t${leftId} --> ${rightId}: Not Triggered`);\n          template.push(`\\t${leftId} --> [*]: Triggered`);\n        }\n        leftId = rightId;\n      });\n      rightId = `tag${tag.tagId}`;\n      template.push(`\\t${rightId}: ${tag.name}`);\n      template.push(`\\t${leftId} --> ${rightId}: Not Triggered`);\n      template.push(`\\t${leftId} --> [*]: Triggered`);\n    } else {\n      triggerIds.forEach((triggerId) => {\n        template.push(`${triggerId} --> ${rightId} : Triggered`);\n        template.push(`${triggerId} --> [*] : Not Triggered`);\n      });\n    }\n    flowCharts.push(template);\n  });\n\n  return flowCharts;\n};\n\n/**\n * Retrieves the HTML page content.\n */\nconst getHtmlPage = (content) => `<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <title>Google Tag Manager Flow Charts</title>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.5.1/mermaid.min.js\"></script>\n  <style type=\"text/css\">\n  .mermaid {\n    border-bottom: 5px dotted #999999;\n    color: #ffffff;\n    font-size: 12px;\n    margin-bottom: 100px;\n    padding: 50px 25px;\n  }\n\n  /** Conceals weird mermaid.js bug */\n  .statediagram-state .label text:not(:first-child) {\n    display: none;\n  }\n\n\n  .statediagram-state line {\n    display: none;\n  }\n\n  .statediagram-state[id^=\"trigger\"] rect {\n    fill: #29b6f6 !important;\n    stroke: #29b6f6 !important;\n  }\n\n  .statediagram-state[id^=\"trigger\"] text {\n    fill: #ffffff !important;\n  }\n\n  .statediagram-state[id^=\"bTrigger\"] rect {\n    fill: #e8710a !important;\n    stroke: #e8710a !important;\n  }\n\n  .statediagram-state[id^=\"bTrigger\"] text {\n    fill: #ffffff !important;\n  }\n\n  .statediagram-state[id^=\"tag\"] rect {\n    fill: #1a73e8 !important;\n    stroke: #1a73e8 !important;\n  }\n\n  .statediagram-state[id^=\"tag\"] text {\n    fill: #ffffff !important;\n  }\n\n  </style>\n</head>\n<body>\n  ${content}\n  <script>\n    mermaid.initialize({startOnLoad: true, theme: 'neutral'});\n  </script>\n</body>\n</html>`;\n\n/**\n * Parses a JSON file.\n */\nconst parseJsonFile = (inFile) => {\n  try {\n    const json = fs.readFileSync(inFile);\n    const gtmContainer = JSON.parse(json);\n    if (typeof gtmContainer.containerVersion === 'undefined' || typeof gtmContainer.containerVersion.tag === 'undefined' || typeof gtmContainer.containerVersion.trigger === 'undefined') {\n      throw Error();\n    }\n    return gtmContainer;\n  } catch (err) {\n    throw Error('Not a valid GTM container export file');\n  }\n};\n\n/**\n * Generates the HTML for a specified flow chart.\n */\nconst generateFlowChartHtml = (inFile, callback, verbose) => {\n  const gtmContainer = parseJsonFile(inFile);\n  const flowCharts = callback(gtmContainer);\n\n  let html = '';\n  flowCharts.forEach((flowChart) => {\n    const flowChartDetails = flowChart.join('\\n');\n    if (verbose) {\n      console.log(`${flowChartDetails}\\n`);\n    }\n    html += `<div class=\"mermaid\">\\n${flowChartDetails}\\n</div>\\n\\n`;\n  });\n  return getHtmlPage(html);\n};\n\n/**\n * Handles errors saving report files.\n */\nconst outFileErrorHandler = (err) => {\n  if (err) {\n    console.error(err);\n    throw err;\n  }\n};\n\n/**\n * Generates an HTML flow chart based on passed in file.\n */\nconst generateTriggerReport = (inFile, outFile, verbose = false) => {\n  const html = generateFlowChartHtml(inFile, generateTriggerReportFlowCharts, verbose);\n  fs.writeFile(outFile, html, outFileErrorHandler);\n};\n\n/**\n * Generates an HTML flow chart based on passed in file.\n */\nconst generateTagReport = (inFile, outFile, verbose = false) => {\n  const html = generateFlowChartHtml(inFile, generateTagReportFlowCharts, verbose);\n  fs.writeFile(outFile, html, outFileErrorHandler);\n};\n\nmodule.exports = {\n  generateFilterNote,\n  generateFlowChartHtml,\n  generateTagReport,\n  generateTagReportFlowCharts,\n  generateTriggerNote,\n  generateTriggerReport,\n  generateTriggerReportFlowCharts,\n  getHtmlPage,\n  getOperation,\n  getTagHashMap,\n  getTagHashMapByTrigger,\n  getTriggerHashMap,\n  globalTriggers,\n  outFileErrorHandler,\n  parseJsonFile,\n};\n"]}