{"version":3,"file":"bundle.869.beac3219766587ccd61758a602cf4898.js","mappings":"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","sources":["webpack://ws-tagging/./src/utils/handlePayloadMutators.js","webpack://ws-tagging/./src/utils/formatSlugs.js","webpack://ws-tagging/./src/utils/getDotNotationFromString.js","webpack://ws-tagging/./src/utils/findDealerCode.js","webpack://ws-tagging/./src/utils/handleLookups.js","webpack://ws-tagging/./src/utils/getCookie.js","webpack://ws-tagging/./src/utils/getReplacement.js","webpack://ws-tagging/./src/utils/mutateItem.js","webpack://ws-tagging/./src/utils/workItem.js","webpack://ws-tagging/./src/utils/replaceSlugs.js","webpack://ws-tagging/./src/utils/slugMap.js"],"sourcesContent":["import mutateItem from './mutateItem';\n/**\n *\n * @param {String} workItem The key you would like to apply a mutator to.\n * @param {String} replacement Current replacement value at time of function call\n * @returns string\n * @description Allows you to mutate the value of a given key for a given client's formatting need.\n * Ex: A client wants strings to be all lowercase.\n */\nconst handlePayloadMutators = (workItem, replacement, payloadMutator = {}) => {\n\tconst mutators = payloadMutator?.[workItem];\n\treturn mutators ? mutateItem(mutators, replacement) : replacement;\n};\n\nexport default handlePayloadMutators;\n","import handlePayloadMutators from './handlePayloadMutators';\nimport isObject from './isObject';\nimport replaceSlugs from './replaceSlugs';\n\n/**\n *\n * @param {string|Object} input - String or object that should have slugs replaced.\n * @param {Object} eventData - The data from the current event\n * @param {Object} configuration - A tracking project configuration.\n * @param {Object} utils The current project/grouping utils.\n * @param {Object} mapping This is the whole mapping object for the current mapping configuration name\n * @param {Object} flags A feature flags object\n * \tex. window.DDC.WidgetData['ws-tagging'].mapping['critial_mass']\n * @returns {string|Object} String or object with slugs replaced. It can handle slugs in the property names (keys) or values of an object.\n */\nconst formatSlugs = ({\n\tinput,\n\teventData,\n\tconfiguration = {},\n\tutils,\n\tmapping,\n\tflags,\n\tpayload\n}) => {\n\tconst { lookups, payloadMutator } = configuration;\n\tlet formattedInput;\n\n\tif (isObject(input)) {\n\t\tformattedInput = {};\n\t\tObject.entries(input).forEach(([payloadKey, payloadValue]) => {\n\t\t\tconst formattedSlug = formatSlugs({\n\t\t\t\tinput: payloadValue,\n\t\t\t\teventData,\n\t\t\t\tconfiguration,\n\t\t\t\tutils,\n\t\t\t\tmapping,\n\t\t\t\tflags,\n\t\t\t\tpayload\n\t\t\t});\n\n\t\t\t// this gets the renamedKey\n\t\t\t// if renamedKey is undefined that means the slug was not found\n\t\t\t// if renamedKey is defined then it may be a resolved slug\n\t\t\tconst renamedKey = replaceSlugs({\n\t\t\t\tinput: payloadKey,\n\t\t\t\teventData,\n\t\t\t\tmapping,\n\t\t\t\tutils,\n\t\t\t\tlookups,\n\t\t\t\tflags,\n\t\t\t\tpayload\n\t\t\t});\n\n\t\t\tlet key = payloadKey;\n\n\t\t\t// if the key was renamed (it was a slug) or no slug was found\n\t\t\t// set the key that will be set to formattedPayload to the renamedKey\n\t\t\tif (payloadKey !== renamedKey) {\n\t\t\t\tkey = renamedKey;\n\t\t\t}\n\n\t\t\tif (key) {\n\t\t\t\tformattedInput[key] = handlePayloadMutators(\n\t\t\t\t\tkey,\n\t\t\t\t\tformattedSlug,\n\t\t\t\t\tpayloadMutator\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t} else if (typeof input === 'string') {\n\t\tformattedInput = replaceSlugs({\n\t\t\tinput,\n\t\t\teventData,\n\t\t\tmapping,\n\t\t\tutils,\n\t\t\tlookups,\n\t\t\tflags,\n\t\t\tpayload\n\t\t});\n\t\t// Check if there is a hierarchy of returnables in the string\n\t\tif (input.includes(' >> ')) {\n\t\t\tconst hierarchicalValues = input.split(' >> ');\n\t\t\tconst tempValues = hierarchicalValues.map((el) =>\n\t\t\t\tformatSlugs({\n\t\t\t\t\tinput: el,\n\t\t\t\t\teventData,\n\t\t\t\t\tconfiguration,\n\t\t\t\t\tutils,\n\t\t\t\t\tmapping,\n\t\t\t\t\tflags,\n\t\t\t\t\tpayload\n\t\t\t\t})\n\t\t\t);\n\t\t\tformattedInput = tempValues.find((el) => {\n\t\t\t\treturn el !== null && el !== undefined && el !== '';\n\t\t\t});\n\t\t}\n\t\t// this line allows shared payloads to support slugs\n\t\tif (isObject(formattedInput)) {\n\t\t\tformattedInput = formatSlugs({\n\t\t\t\tinput: formattedInput,\n\t\t\t\teventData,\n\t\t\t\tconfiguration,\n\t\t\t\tutils,\n\t\t\t\tmapping,\n\t\t\t\tflags,\n\t\t\t\tpayload\n\t\t\t});\n\t\t}\n\t} else if (Array.isArray(input)) {\n\t\tformattedInput = input.map((el) =>\n\t\t\tformatSlugs({\n\t\t\t\tinput: el,\n\t\t\t\teventData,\n\t\t\t\tconfiguration,\n\t\t\t\tutils,\n\t\t\t\tmapping,\n\t\t\t\tflags,\n\t\t\t\tpayload\n\t\t\t})\n\t\t);\n\t} else {\n\t\t// extra safety in case something unexpected comes through\n\t\t// most data is parseable, however there are exceptionally rare cases where input gets passed as a function or undefined\n\t\t// function and undefined will throw an error when we attempt to use JSON.parse\n\t\tformattedInput =\n\t\t\ttypeof input !== 'function' && typeof input !== 'undefined'\n\t\t\t\t? JSON.parse(JSON.stringify(input))\n\t\t\t\t: undefined;\n\t}\n\n\treturn formattedInput;\n};\n\nexport default formatSlugs;\n","/* \n Convert a string to dot notation.\n\tReturns empty string if not found.\n*/\n/**\n *\n * @param {Object} scope - The base object that the nested objects are part of\n * @param {string} str - A 'dot notation' string like 'aaa.bbb.ccc' that is expected to exist on the 'scope'\n * @returns The value of the object looked up from scope.str\n * @example\n * // scope is window\n * // str is 'aaa.bbb'\n * // window.aaa.bbb is:\n * window: {\n * aaa: {\n * bbb: 'ccc'\n * }\n * }\n * // the function will return 'ccc'\n */\nconst getDotNotationFromString = (scope, str) =>\n\tstr\n\t\t.split('.')\n\t\t.reduce((o, x) => (typeof o !== 'undefined' ? o[x] : undefined), scope);\n\nexport default getDotNotationFromString;\n","/**\n *\n * @param {Object[]} dealerCodes - an array of possible dealer id objects\n * @param {string} targetId - the key of the desired dealer code\n * @returns value of targetId or '' if not found\n */\nconst findDealerCode = (dealerCodes, targetId) => {\n\tconst storedObject = Object.values(dealerCodes).find((val) =>\n\t\tObject.prototype.hasOwnProperty.call(val, targetId)\n\t);\n\treturn typeof storedObject === 'undefined'\n\t\t? ''\n\t\t: storedObject[targetId].toString();\n};\n\nexport default findDealerCode;\n","/**\n\t * \n\t * @param {string} workItem - The key to find the correct lookup.\n\t * @param {string} lookup - The value the client needs an alternative to.\n\t * @returns {*} The value the client wants from the lookups in their configuration file.\n\t * \n\t * If the slug is 'layoutType' and the value is 'desktop' then return 'client-desktop'\n\t\tlookups: {\n\t\t\tlayoutType: {\n\t\t\t\tdesktop: 'client-desktop',\n\t\t\t\tmobile: 'client-mobile'\n\t\t\t}\n\t\t}\n\t */\nconst handleLookups = (workItem, lookup, lookups) => {\n\treturn lookups[workItem][lookup];\n};\n\nexport default handleLookups;\n","export const getCookie = (name) => {\n\tconst cookies = document.cookie.split(';');\n\tlet cookieValue = null;\n\n\tcookies.forEach((cookie) => {\n\t\tconst [cookieName, value] = cookie.split('=');\n\t\tif (cookieName.trim() === name) {\n\t\t\tcookieValue = value;\n\t\t}\n\t});\n\n\treturn cookieValue;\n};\n","import findDealerCode from './findDealerCode';\nimport handleLookups from './handleLookups';\nimport getDotNotationFromString from './getDotNotationFromString';\nimport getEnv from './getEnv';\nimport slugMap from './slugMap';\nimport { getCookie } from './getCookie';\n\n/**\n *\n * Check a number of places for the replacement value:\n * 1) slugMap\n * 2) window.DDC.WidgetData['ws-tagging'].mapping[mappingConfigurationName]\n * 3) eventData\n * 4) additional slugs\n *\n * The vehicle property must exist (DDC.dataLayer.vehicle) or there will be a js error.\n *\n * @param {String} str The string to replace the slugs in.\n * @param {Object} [eventData] The eventData from the current event.\n * @param {Object} mapping The mapping object (pagealias, form, etc.)\n * @param {Object} utils The current project/grouping utils.\n * @param {Object} lookups The lookups object for the current configuration\n * @param {Object} flags A feature flags object\n * @returns {String} The str with the slugs replaced.\n */\nconst getReplacement = ({\n\tstr,\n\teventData = {},\n\tmapping,\n\tutils,\n\tlookups,\n\tflags = {},\n\tpayload\n}) => {\n\tlet workItem = str;\n\tlet replacement;\n\n\tif (str.includes('lookup.')) {\n\t\tworkItem = workItem.replace('lookup.', '');\n\t}\n\n\t// special handling for single vehicle lookups\n\tif (slugMap[workItem] && slugMap[workItem].startsWith('vehicle.')) {\n\t\tconst vehicle =\n\t\t\t// single vehicle lookups should only happen on pages with 1 vehicle\n\t\t\t(window.DDC.dataLayer?.vehicles?.length === 1 &&\n\t\t\t\twindow.DDC.dataLayer.vehicles[0]) ||\n\t\t\t// form confirmation pages\n\t\t\twindow.DDC.dataLayer?.confirmation?.vehicle ||\n\t\t\t// allows [[vin]] to work to get vehicle data from eventData\n\t\t\teventData?.vehicle;\n\n\t\treplacement =\n\t\t\tvehicle && Object.keys(vehicle).length\n\t\t\t\t? vehicle[slugMap[workItem].replace('vehicle.', '')]\n\t\t\t\t: '';\n\t} else if (workItem === 'eventData') {\n\t\treplacement = eventData;\n\t} else if (workItem === 'env') {\n\t\t// special handling for env lookups\n\t\treplacement = getEnv();\n\t} else if (workItem.startsWith('dealerCode.')) {\n\t\tconst dealerCodes = window?.DDC?.dataLayer?.dealership?.dealerCode;\n\t\tif (dealerCodes) {\n\t\t\tconst targetId = workItem.replace('dealerCode.', '');\n\t\t\treplacement = findDealerCode(dealerCodes, targetId);\n\t\t}\n\t} else if (workItem.startsWith('fn.')) {\n\t\tconst vehicles = window.DDC.dataLayer?.confirmation?.vehicle\n\t\t\t? [window.DDC.dataLayer.confirmation.vehicle]\n\t\t\t: window.DDC.dataLayer.vehicles;\n\n\t\tworkItem = workItem.replace('fn.', '');\n\t\tconst argsStr = workItem.substring(\n\t\t\tworkItem.indexOf('(') + 1,\n\t\t\tworkItem.lastIndexOf(')')\n\t\t);\n\t\tworkItem = workItem.replace(`(${argsStr})`, '');\n\n\t\tif (utils[workItem]) {\n\t\t\treplacement = utils[workItem]({\n\t\t\t\teventData,\n\t\t\t\tmapping,\n\t\t\t\tpayload,\n\t\t\t\tvehicles,\n\t\t\t\twindow\n\t\t\t});\n\t\t} else {\n\t\t\treplacement = undefined;\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(\n\t\t\t\t`The ${workItem} function in utils was not exported or does not exist.`\n\t\t\t);\n\t\t}\n\t} else if (workItem.startsWith('flags.')) {\n\t\tworkItem = workItem.replace('flags.', '');\n\n\t\treplacement = flags[workItem];\n\t} else if (workItem === '_dl' || workItem === 'window._dl') {\n\t\t// TODO: How can we now have this here? This is client specific.\n\t\treplacement = window._dl;\n\t} else if (workItem.startsWith('cookie.')) {\n\t\tworkItem = workItem.replace('cookie.', '');\n\t\tconst cookie = getCookie(workItem, undefined);\n\t\t// getCookie returns null when not found but undefined is standard for\n\t\t// getReplacement when something not found\n\t\treplacement = cookie === null ? undefined : cookie;\n\t} else if (workItem === 'userSessionId') {\n\t\treplacement = sessionStorage.getItem('userSessionId');\n\t} else {\n\t\t// The below section is to find values from dot notation.\n\t\tlet scope;\n\t\tif (slugMap[workItem]) {\n\t\t\tscope = window;\n\t\t\treplacement = `DDC.${slugMap[workItem]}`;\n\t\t} else if (workItem.startsWith('mapping.')) {\n\t\t\tscope = mapping;\n\t\t\treplacement = workItem.replace('mapping.', '');\n\t\t} else if (workItem.startsWith('eventData.')) {\n\t\t\tscope = eventData;\n\t\t\treplacement = workItem.replace('eventData.', '');\n\t\t} else if (workItem.startsWith('payload.')) {\n\t\t\t// for internal use allowing clientEventName to be a slug\n\t\t\tscope = payload;\n\t\t\treplacement = workItem.replace('payload.', '');\n\t\t} else if (workItem.startsWith('DDC.')) {\n\t\t\tscope = window;\n\t\t\treplacement = workItem;\n\t\t} else if (workItem.startsWith('document.')) {\n\t\t\tscope = document;\n\t\t\treplacement = workItem.replace('document.', '');\n\t\t} else if (workItem.startsWith('localstorage.')) {\n\t\t\tworkItem = workItem.replace('localstorage.', '');\n\t\t\tconst localStorageKey = workItem.split('.')[0];\n\t\t\tscope =\n\t\t\t\tJSON.parse(localStorage.getItem(localStorageKey)) || undefined;\n\t\t\treplacement = workItem.replace(`${localStorageKey}.`, '');\n\t\t} else if (workItem.startsWith('previousEvent.')) {\n\t\t\tworkItem = workItem.replace('previousEvent.', '');\n\t\t\tconst event = workItem.split('.')[0];\n\t\t\tscope = mapping?.prevEventData?.[event];\n\t\t\treplacement = workItem.replace(`${event}.`, '');\n\t\t} else if (workItem.startsWith('window.')) {\n\t\t\tworkItem = workItem.replace('window.', '');\n\t\t\tscope = window;\n\t\t\treplacement = workItem;\n\t\t}\n\n\t\treplacement =\n\t\t\tscope &&\n\t\t\treplacement &&\n\t\t\tgetDotNotationFromString(scope, replacement);\n\t}\n\n\treturn str.includes('lookup.')\n\t\t? handleLookups(workItem, replacement, lookups)\n\t\t: replacement;\n};\n\nexport default getReplacement;\n","// How many of these mutators are still used?\nexport const STRIP_RETURN_CHARS = 'STRIP_RETURN_CHARS';\nexport const TO_UPPER_CASE = 'TO_UPPER_CASE';\nexport const TO_LOWER_CASE = 'TO_LOWER_CASE';\nexport const GLOBAL_ALL_VALUES = 'GLOBAL_ALL_VALUES';\nexport const STRIP_Q_STRING = 'STRIP_Q_STRING';\nexport const CAST_TO_NUMBER = 'CAST_TO_NUMBER';\nexport const ONLY_NUMBERS = 'ONLY_NUMBERS';\nexport const PIX_ARRAY_FIND_MIN = 'PIX_ARRAY_FIND_MIN';\nexport const PIX_ARRAY_FIND_MAX = 'PIX_ARRAY_FIND_MAX';\nexport const TRILOGY_FORMAT_CLICKED_FACET_NAME =\n\t'TRILOGY_FORMAT_CLICKED_FACET_NAME';\n\nconst mutateItem = (mutators, replacement) => {\n\tlet mutatedValue = replacement;\n\tif (typeof mutatedValue === 'string' && !mutatedValue?.startsWith?.('{{') && !mutatedValue?.endsWith?.('}}')) {\n\t\tmutators.forEach((mutator) => {\n\t\t\tswitch (mutator) {\n\t\t\t\tcase TO_LOWER_CASE:\n\t\t\t\t\tif (!mutatedValue.includes('.htm')) {\n\t\t\t\t\t\tmutatedValue = mutatedValue.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase TO_UPPER_CASE:\n\t\t\t\t\tif (!mutatedValue.includes('.htm')) {\n\t\t\t\t\t\tmutatedValue = mutatedValue.toUpperCase();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase STRIP_RETURN_CHARS:\n\t\t\t\t\tmutatedValue = mutatedValue.replace(/[\\r\\n ]+/gm, ' ');\n\t\t\t\t\tbreak;\n\t\t\t\tcase STRIP_Q_STRING:\n\t\t\t\t\tmutatedValue = mutatedValue\n\t\t\t\t\t\t.split('?')\n\t\t\t\t\t\t.shift()\n\t\t\t\t\t\t.split('com/')\n\t\t\t\t\t\t.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase ONLY_NUMBERS:\n\t\t\t\t\tmutatedValue = mutatedValue.replace(/\\D/g, '');\n\t\t\t\t\tbreak;\n\t\t\t\tcase CAST_TO_NUMBER:\n\t\t\t\t\tmutatedValue = +mutatedValue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase PIX_ARRAY_FIND_MIN:\n\t\t\t\t\tmutatedValue = mutatedValue\n\t\t\t\t\t\t.replace(/(-)/g, ',')\n\t\t\t\t\t\t.replace(/( )/g, '')\n\t\t\t\t\t\t.split(',');\n\t\t\t\t\tmutatedValue = mutatedValue.reduce((a, b) => {\n\t\t\t\t\t\treturn Math.min(a, b);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase PIX_ARRAY_FIND_MAX:\n\t\t\t\t\tmutatedValue = mutatedValue\n\t\t\t\t\t\t.replace(/(-)/g, ',')\n\t\t\t\t\t\t.replace(/( )/g, '')\n\t\t\t\t\t\t.split(',');\n\t\t\t\t\tmutatedValue = mutatedValue.reduce((a, b) => {\n\t\t\t\t\t\treturn Math.max(a, b);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase TRILOGY_FORMAT_CLICKED_FACET_NAME:\n\t\t\t\t\tmutatedValue = mutatedValue?.replace('normal', '');\n\t\t\t\t\tmutatedValue =\n\t\t\t\t\t\tmutatedValue?.charAt(0)?.toLowerCase() +\n\t\t\t\t\t\tmutatedValue.slice(1);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\treturn mutatedValue;\n};\n\nexport default mutateItem;\n","export const getWorkItem = (str) => {\n\t// get from the last '[[' to the end of the string\n\tconst slice = str.slice(str.lastIndexOf('[[') + 2);\n\n\t// get up to the first ']]'\n\treturn slice.substring(0, slice.indexOf(']]'));\n};\n\nexport const containsSingleWorkItem = (str) =>\n\tstr.indexOf('[[') !== -1 && str.indexOf('[[') === str.lastIndexOf('[[');\n\nexport const containsOnlyASingleWorkItem = (str) =>\n\tcontainsSingleWorkItem(str) &&\n\tstr.indexOf('[[') === 0 &&\n\tstr.indexOf(']]') === str.length - 2;\n\nexport const containsWorkItem = (str) =>\n\tstr.includes('[[') && str.includes(']]');\n","import getReplacement from './getReplacement';\nimport isObject from './isObject';\nimport {\n\tcontainsOnlyASingleWorkItem,\n\tcontainsWorkItem,\n\tgetWorkItem\n} from './workItem';\n\n/**\n *\n * @param {String} input String like \"[[address1]] where we are to replace the slug with the content\"\n * @param {Object} eventData The data from the current event\n * @param {Object} mapping This is the whole mapping object for the current mapping configuration name\n * \tex. window.DDC.WidgetData['ws-tagging'].mapping['critial_mass']\n * @param {Object} utils The current project/grouping utils.\n * @param {Object} lookups The current configuration lookups.\n * @param {Object} flags A feature flags object\n * @returns {String|Object|undefined} A string or object with the slugs replaced. undefined is returned for situations\n * where no slugs were resolved and no other text was in the input.\n * @example\n * '[[eventData.workItem]]' // if eventData.workItem doesn't exist this function will return undefined\n * '[[eventData.[[eventData.cool]]]]' // if eventData.cool exists but eventData.[eventData.cool's value] does not exist undefined is returned\n * '[[eventData.[[eventData.cool]]]]' // if eventData.cool does not exist I think it will return undefined as well\n */\nconst replaceSlugs = ({\n\tinput,\n\teventData,\n\tmapping,\n\tutils,\n\tlookups,\n\tflags,\n\tpayload\n}) => {\n\tlet slugless = input;\n\n\t// The below is going through the string replacing slugs as it finds them\n\t// supports:\n\t// [[address1]] [[address2]]\n\t// [[form.confirm.[[eventData.trackingId]]]] : use eventData.trackingId as the property to find in form.confirm\n\twhile (\n\t\tslugless &&\n\t\ttypeof slugless === 'string' &&\n\t\tcontainsWorkItem(slugless)\n\t) {\n\t\tconst workItem = getWorkItem(slugless);\n\n\t\tconst replacement = getReplacement({\n\t\t\tstr: workItem,\n\t\t\teventData,\n\t\t\tmapping,\n\t\t\tutils,\n\t\t\tlookups,\n\t\t\tflags,\n\t\t\tpayload\n\t\t});\n\n\t\t// this line is necessary as replaceSlugs can be used as a check for a logic rule\n\t\t// we want to return undefined so that we know nothing was found when trying to resolve a slug\n\t\tif (\n\t\t\tcontainsOnlyASingleWorkItem(slugless) &&\n\t\t\ttypeof replacement === 'undefined'\n\t\t) {\n\t\t\tslugless = undefined;\n\t\t} else if (\n\t\t\tisObject(replacement) ||\n\t\t\tArray.isArray(replacement) ||\n\t\t\ttypeof replacement === 'boolean'\n\t\t) {\n\t\t\tslugless = replacement;\n\t\t} else {\n\t\t\tslugless = slugless.replace(`[[${workItem}]]`, replacement || '');\n\n\t\t\t// This avoids converting numbers to strings.\n\t\t\t// ex. slugless: '24' then it should just be 24\n\t\t\tslugless =\n\t\t\t\tparseInt(slugless, 10) === replacement &&\n\t\t\t\t!/[^\\d]/.test(slugless)\n\t\t\t\t\t? replacement\n\t\t\t\t\t: slugless;\n\t\t}\n\t}\n\n\t// we want to return undefined in situations where nothing was resolved from a slug lookup\n\treturn typeof slugless === 'undefined' || typeof slugless !== 'string'\n\t\t? slugless\n\t\t: slugless.trim();\n};\n\nexport default replaceSlugs;\n","/**\n * The slugmap is designed a way to shorten window.DDC lookups.\n * Instead of having to type [[dataLayer.dealership.address1]] you can do [[address1]]\n * Note: currently vehicles have a special statment to handle them, thus their lookup is local to the vehicle.\n */\nexport default {\n\taddress1: 'dataLayer.dealership.address1',\n\taddress2: 'dataLayer.dealership.address2',\n\tbodyStyle: 'vehicle.bodyStyle',\n\tcertified: 'vehicle.certified',\n\tcity: 'dataLayer.dealership.city',\n\tcityFuelEfficiency: 'vehicle.cityFuelEfficiency',\n\tcountry: 'dataLayer.dealership.country',\n\tchromeId: 'vehicle.chromeId',\n\tdealerId: 'dataLayer.site.siteInfo.dealerId',\n\tdealershipName: 'dataLayer.dealership.dealershipName',\n\tdriveLine: 'vehicle.driveLine',\n\tengine: 'vehicle.engine',\n\texteriorColor: 'vehicle.exteriorColor',\n\tfuelType: 'vehicle.fuelType',\n\thighwayFuelEfficiency: 'vehicle.highwayFuelEfficiency',\n\tinteriorColor: 'vehicle.interiorColor',\n\tinternetPrice: 'vehicle.internetPrice',\n\tinventoryDate: 'vehicle.inventoryDate',\n\tinventoryType: 'vehicle.inventoryType',\n\tlayoutType: 'dataLayer.page.attributes.layoutType',\n\tlocale: 'dataLayer.page.attributes.locale',\n\tmake: 'vehicle.make',\n\tmodel: 'vehicle.model',\n\tmsrp: 'vehicle.msrp',\n\tnewOrUsed: 'vehicle.newOrUsed',\n\tnormalBodyStyle: 'vehicle.normalBodyStyle',\n\tnormalFuelType: 'vehicle.normalFuelType',\n\todometer: 'vehicle.odometer',\n\tpageAlias: 'dataLayer.page.pageInfo.pageName',\n\tpageId: 'dataLayer.page.pageInfo.pageId',\n\tpageTrackMake: 'dataLayer.page.trackingTags.make',\n\tpageTrackModel: 'dataLayer.page.trackingTags.model',\n\tpageTrackYear: 'dataLayer.page.trackingTags.year',\n\tpostalCode: 'dataLayer.dealership.postalCode',\n\tprevVehicleResultCount: 'dataLayer.prev.page.attributes.vehicleResultCount',\n\tqueryFacets: 'dataLayer.page.queryFacets',\n\treturnNull: null,\n\tstateProvince: 'dataLayer.dealership.stateProvince',\n\tstockNumber: 'vehicle.stockNumber',\n\ttier: 'dataLayer.site.siteInfo.tier',\n\ttransmission: 'vehicle.transmission',\n\ttrim: 'vehicle.trim',\n\tuserId: 'userProfile.universalUserId',\n\tuuid: 'vehicle.uuid',\n\tvariationId: 'dataLayer.site.design.variationId',\n\tvehicleAccountId: 'vehicle.accountId',\n\tvehicleResultCount: 'dataLayer.page.attributes.vehicleResultCount',\n\tvin: 'vehicle.vin',\n\twebsite: 'dataLayer.dealership.website',\n\tyear: 'vehicle.modelYear',\n\tzip: 'dataLayer.confirmation.zip'\n};\n"],"names":["workItem","replacement","payloadMutator","mutators","mutateItem","formatSlugs","input","eventData","configuration","utils","mapping","flags","payload","lookups","formattedInput","isObject","Object","entries","forEach","payloadKey","payloadValue","formattedSlug","renamedKey","replaceSlugs","key","handlePayloadMutators","includes","tempValues","split","map","el","find","Array","isArray","JSON","parse","stringify","undefined","scope","str","reduce","o","x","dealerCodes","targetId","storedObject","values","val","prototype","hasOwnProperty","call","toString","lookup","replace","slugMap","startsWith","vehicle","window","DDC","dataLayer","vehicles","length","confirmation","keys","getEnv","dealership","dealerCode","findDealerCode","argsStr","substring","indexOf","lastIndexOf","console","error","_dl","cookie","name","cookies","document","cookieValue","cookieName","value","trim","getCookie","sessionStorage","getItem","localStorageKey","localStorage","event","prevEventData","getDotNotationFromString","handleLookups","mutatedValue","endsWith","mutator","toLowerCase","toUpperCase","shift","pop","a","b","Math","min","max","charAt","slice","getWorkItem","containsOnlyASingleWorkItem","containsSingleWorkItem","slugless","getReplacement","parseInt","test","address1","address2","bodyStyle","certified","city","cityFuelEfficiency","country","chromeId","dealerId","dealershipName","driveLine","engine","exteriorColor","fuelType","highwayFuelEfficiency","interiorColor","internetPrice","inventoryDate","inventoryType","layoutType","locale","make","model","msrp","newOrUsed","normalBodyStyle","normalFuelType","odometer","pageAlias","pageId","pageTrackMake","pageTrackModel","pageTrackYear","postalCode","prevVehicleResultCount","queryFacets","returnNull","stateProvince","stockNumber","tier","transmission","userId","uuid","variationId","vehicleAccountId","vehicleResultCount","vin","website","year","zip"],"sourceRoot":""}