{"version":3,"file":"vue-gtag.umd.min.js","sources":["../node_modules/@vue/shared/dist/shared.esm-bundler.js","../src/utils.js","../src/options.js","../src/router.js","../src/api/query.js","../src/api/config.js","../src/api/disable.js","../src/api/opt-out.js","../src/api/opt-in.js","../src/api/event.js","../src/api/pageview.js","../src/api/screenview.js","../src/api/exception.js","../src/api/linker.js","../src/api/time.js","../src/api/set.js","../src/api/refund.js","../src/api/purchase.js","../src/api/custom-map.js","../src/attach-api.js","../src/add-configuration.js","../src/track.js","../src/add-routes-tracker.js","../src/bootstrap.js","../src/register-globals.js","../src/index.js"],"sourcesContent":["/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n const map = Object.create(null);\r\n const list = str.split(',');\r\n for (let i = 0; i < list.length; i++) {\r\n map[list[i]] = true;\r\n }\r\n return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\r\n}\n\n/**\r\n * dev only flag -> name mapping\r\n */\r\nconst PatchFlagNames = {\r\n [1 /* TEXT */]: `TEXT`,\r\n [2 /* CLASS */]: `CLASS`,\r\n [4 /* STYLE */]: `STYLE`,\r\n [8 /* PROPS */]: `PROPS`,\r\n [16 /* FULL_PROPS */]: `FULL_PROPS`,\r\n [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\r\n [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\r\n [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\r\n [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\r\n [512 /* NEED_PATCH */]: `NEED_PATCH`,\r\n [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\r\n [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\r\n [-1 /* HOISTED */]: `HOISTED`,\r\n [-2 /* BAIL */]: `BAIL`\r\n};\n\n/**\r\n * Dev only\r\n */\r\nconst slotFlagsText = {\r\n [1 /* STABLE */]: 'STABLE',\r\n [2 /* DYNAMIC */]: 'DYNAMIC',\r\n [3 /* FORWARDED */]: 'FORWARDED'\r\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\r\n 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\r\n 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\r\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n const lines = source.split(/\\r?\\n/);\r\n let count = 0;\r\n const res = [];\r\n for (let i = 0; i < lines.length; i++) {\r\n count += lines[i].length + 1;\r\n if (count >= start) {\r\n for (let j = i - range; j <= i + range || end > count; j++) {\r\n if (j < 0 || j >= lines.length)\r\n continue;\r\n const line = j + 1;\r\n res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);\r\n const lineLength = lines[j].length;\r\n if (j === i) {\r\n // push underline\r\n const pad = start - (count - lineLength) + 1;\r\n const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length));\r\n }\r\n else if (j > i) {\r\n if (end > count) {\r\n const length = Math.max(Math.min(end - count, lineLength), 1);\r\n res.push(` | ` + '^'.repeat(length));\r\n }\r\n count += lineLength + 1;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return res.join('\\n');\r\n}\n\n/**\r\n * On the client we only need to offer special cases for boolean attributes that\r\n * have different names from their corresponding dom properties:\r\n * - itemscope -> N/A\r\n * - allowfullscreen -> allowFullscreen\r\n * - formnovalidate -> formNoValidate\r\n * - ismap -> isMap\r\n * - nomodule -> noModule\r\n * - novalidate -> noValidate\r\n * - readonly -> readOnly\r\n */\r\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\r\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\r\n `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\r\n `loop,open,required,reversed,scoped,seamless,` +\r\n `checked,muted,multiple,selected`);\r\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\r\nconst attrValidationCache = {};\r\nfunction isSSRSafeAttrName(name) {\r\n if (attrValidationCache.hasOwnProperty(name)) {\r\n return attrValidationCache[name];\r\n }\r\n const isUnsafe = unsafeAttrCharRE.test(name);\r\n if (isUnsafe) {\r\n console.error(`unsafe attribute name: ${name}`);\r\n }\r\n return (attrValidationCache[name] = !isUnsafe);\r\n}\r\nconst propsToAttrMap = {\r\n acceptCharset: 'accept-charset',\r\n className: 'class',\r\n htmlFor: 'for',\r\n httpEquiv: 'http-equiv'\r\n};\r\n/**\r\n * CSS properties that accept plain numbers\r\n */\r\nconst isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +\r\n `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +\r\n `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +\r\n `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +\r\n `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +\r\n `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +\r\n // SVG\r\n `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +\r\n `stroke-miterlimit,stroke-opacity,stroke-width`);\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nconst isKnownAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\r\n `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\r\n `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\r\n `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\r\n `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\r\n `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\r\n `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\r\n `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\r\n `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\r\n `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\r\n `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\r\n `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\r\n `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\r\n `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\r\n `value,width,wrap`);\n\nfunction normalizeStyle(value) {\r\n if (isArray(value)) {\r\n const res = {};\r\n for (let i = 0; i < value.length; i++) {\r\n const item = value[i];\r\n const normalized = normalizeStyle(isString(item) ? parseStringStyle(item) : item);\r\n if (normalized) {\r\n for (const key in normalized) {\r\n res[key] = normalized[key];\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n else if (isObject(value)) {\r\n return value;\r\n }\r\n}\r\nconst listDelimiterRE = /;(?![^(]*\\))/g;\r\nconst propertyDelimiterRE = /:(.+)/;\r\nfunction parseStringStyle(cssText) {\r\n const ret = {};\r\n cssText.split(listDelimiterRE).forEach(item => {\r\n if (item) {\r\n const tmp = item.split(propertyDelimiterRE);\r\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\r\n }\r\n });\r\n return ret;\r\n}\r\nfunction stringifyStyle(styles) {\r\n let ret = '';\r\n if (!styles) {\r\n return ret;\r\n }\r\n for (const key in styles) {\r\n const value = styles[key];\r\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\r\n if (isString(value) ||\r\n (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {\r\n // only render valid values\r\n ret += `${normalizedKey}:${value};`;\r\n }\r\n }\r\n return ret;\r\n}\r\nfunction normalizeClass(value) {\r\n let res = '';\r\n if (isString(value)) {\r\n res = value;\r\n }\r\n else if (isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n const normalized = normalizeClass(value[i]);\r\n if (normalized) {\r\n res += normalized + ' ';\r\n }\r\n }\r\n }\r\n else if (isObject(value)) {\r\n for (const name in value) {\r\n if (value[name]) {\r\n res += name + ' ';\r\n }\r\n }\r\n }\r\n return res.trim();\r\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\r\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\r\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\r\n 'header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,' +\r\n 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\r\n 'data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,' +\r\n 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\r\n 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\r\n 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\r\n 'option,output,progress,select,textarea,details,dialog,menu,' +\r\n 'summary,template,blockquote,iframe,tfoot';\r\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\r\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\r\n 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\r\n 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\r\n 'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\r\n 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\r\n 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\r\n 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\r\n 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\r\n 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\r\n 'text,textPath,title,tspan,unknown,use,view';\r\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\r\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\r\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\r\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst escapeRE = /[\"'&<>]/;\r\nfunction escapeHtml(string) {\r\n const str = '' + string;\r\n const match = escapeRE.exec(str);\r\n if (!match) {\r\n return str;\r\n }\r\n let html = '';\r\n let escaped;\r\n let index;\r\n let lastIndex = 0;\r\n for (index = match.index; index < str.length; index++) {\r\n switch (str.charCodeAt(index)) {\r\n case 34: // \"\r\n escaped = '"';\r\n break;\r\n case 38: // &\r\n escaped = '&';\r\n break;\r\n case 39: // '\r\n escaped = ''';\r\n break;\r\n case 60: // <\r\n escaped = '<';\r\n break;\r\n case 62: // >\r\n escaped = '>';\r\n break;\r\n default:\r\n continue;\r\n }\r\n if (lastIndex !== index) {\r\n html += str.substring(lastIndex, index);\r\n }\r\n lastIndex = index + 1;\r\n html += escaped;\r\n }\r\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\r\n}\r\n// https://www.w3.org/TR/html52/syntax.html#comments\r\nconst commentStripRE = /^-?>||--!>| looseEqual(item, val));\r\n}\n\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nconst toDisplayString = (val) => {\r\n return val == null\r\n ? ''\r\n : isObject(val)\r\n ? JSON.stringify(val, replacer, 2)\r\n : String(val);\r\n};\r\nconst replacer = (_key, val) => {\r\n if (isMap(val)) {\r\n return {\r\n [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\r\n entries[`${key} =>`] = val;\r\n return entries;\r\n }, {})\r\n };\r\n }\r\n else if (isSet(val)) {\r\n return {\r\n [`Set(${val.size})`]: [...val.values()]\r\n };\r\n }\r\n else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\r\n return String(val);\r\n }\r\n return val;\r\n};\n\n/**\r\n * List of @babel/parser plugins that are used for template expression\r\n * transforms and SFC script transforms. By default we enable proposals slated\r\n * for ES2020. This will need to be updated as the spec moves forward.\r\n * Full list at https://babeljs.io/docs/en/next/babel-parser#plugins\r\n */\r\nconst babelParserDefaultPlugins = [\r\n 'bigInt',\r\n 'optionalChaining',\r\n 'nullishCoalescingOperator'\r\n];\r\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n ? Object.freeze({})\r\n : {};\r\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst NOOP = () => { };\r\n/**\r\n * Always return false.\r\n */\r\nconst NO = () => false;\r\nconst onRE = /^on[^a-z]/;\r\nconst isOn = (key) => onRE.test(key);\r\nconst isModelListener = (key) => key.startsWith('onUpdate:');\r\nconst extend = Object.assign;\r\nconst remove = (arr, el) => {\r\n const i = arr.indexOf(el);\r\n if (i > -1) {\r\n arr.splice(i, 1);\r\n }\r\n};\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\r\nconst isArray = Array.isArray;\r\nconst isMap = (val) => toTypeString(val) === '[object Map]';\r\nconst isSet = (val) => toTypeString(val) === '[object Set]';\r\nconst isDate = (val) => val instanceof Date;\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst toRawType = (value) => {\r\n // extract \"RawType\" from strings like \"[object RawType]\"\r\n return toTypeString(value).slice(8, -1);\r\n};\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\nconst isIntegerKey = (key) => isString(key) &&\r\n key !== 'NaN' &&\r\n key[0] !== '-' &&\r\n '' + parseInt(key, 10) === key;\r\nconst isReservedProp = /*#__PURE__*/ makeMap(\r\n// the leading comma is intentional so empty string \"\" is also included\r\n',key,ref,' +\r\n 'onVnodeBeforeMount,onVnodeMounted,' +\r\n 'onVnodeBeforeUpdate,onVnodeUpdated,' +\r\n 'onVnodeBeforeUnmount,onVnodeUnmounted');\r\nconst cacheStringFunction = (fn) => {\r\n const cache = Object.create(null);\r\n return ((str) => {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\n/**\r\n * @private\r\n */\r\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\r\n/**\r\n * @private\r\n */\r\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\r\n/**\r\n * @private\r\n */\r\nconst toHandlerKey = cacheStringFunction((str) => (str ? `on${capitalize(str)}` : ``));\r\n// compare whether a value has changed, accounting for NaN.\r\nconst hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue);\r\nconst invokeArrayFns = (fns, arg) => {\r\n for (let i = 0; i < fns.length; i++) {\r\n fns[i](arg);\r\n }\r\n};\r\nconst def = (obj, key, value) => {\r\n Object.defineProperty(obj, key, {\r\n configurable: true,\r\n enumerable: false,\r\n value\r\n });\r\n};\r\nconst toNumber = (val) => {\r\n const n = parseFloat(val);\r\n return isNaN(n) ? val : n;\r\n};\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n return (_globalThis ||\r\n (_globalThis =\r\n typeof globalThis !== 'undefined'\r\n ? globalThis\r\n : typeof self !== 'undefined'\r\n ? self\r\n : typeof window !== 'undefined'\r\n ? window\r\n : typeof global !== 'undefined'\r\n ? global\r\n : {}));\r\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, babelParserDefaultPlugins, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, invokeArrayFns, isArray, isBooleanAttr, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import { isPlainObject } from \"@vue/shared\";\n\nexport const load = (url, options = {}) => {\n return new Promise((resolve, reject) => {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const head = document.head || document.getElementsByTagName(\"head\")[0];\n const script = document.createElement(\"script\");\n\n script.async = true;\n script.src = url;\n script.defer = options.defer;\n\n if (options.preconnectOrigin) {\n const link = document.createElement(\"link\");\n\n link.href = options.preconnectOrigin;\n link.rel = \"preconnect\";\n\n head.appendChild(link);\n }\n\n head.appendChild(script);\n\n script.onload = resolve;\n script.onerror = reject;\n });\n};\n\nexport const mergeDeep = (target, ...sources) => {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!isPlainObject(target) || !isPlainObject(source)) {\n return;\n }\n\n for (const key in source) {\n if (isPlainObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n\n mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n\n return mergeDeep(target, ...sources);\n};\n\nexport const isBrowser = () => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return false;\n }\n\n return true;\n};\n\nexport const warn = (text, shouldLog = true) => {\n if (!isBrowser() || process.env.NODE_ENV === \"production\") {\n return;\n }\n\n if (!shouldLog) {\n return;\n }\n\n console.warn(`[vue-gtag] ${text}`);\n};\n\nexport const validateScreenviewShape = (obj = {}) => {\n warn(\n `Missing \"appName\" property inside the plugin options.`,\n obj.app_name == null\n );\n\n warn(`Missing \"name\" property in the route.`, obj.screen_name == null);\n\n return obj;\n};\n\nexport function getPathWithBase(path = \"\", base = \"\") {\n const pathAsArray = path.split(\"/\");\n const baseAsArray = base.split(\"/\");\n\n if (pathAsArray[0] === \"\" && base[base.length - 1] === \"/\") {\n pathAsArray.shift();\n }\n\n return baseAsArray.join(\"/\") + pathAsArray.join(\"/\");\n}\n","import { mergeDeep } from \"@/utils\";\n\nexport const getDefaultParams = () => ({\n bootstrap: true,\n onReady: null,\n onError: null,\n onBeforeTrack: null,\n onAfterTrack: null,\n pageTrackerTemplate: null,\n customResourceURL: \"https://www.googletagmanager.com/gtag/js\",\n customPreconnectOrigin: \"https://www.googletagmanager.com\",\n deferScriptLoad: false,\n pageTrackerExcludedRoutes: [],\n pageTrackerEnabled: true,\n enabled: true,\n disableScriptLoad: false,\n pageTrackerScreenviewEnabled: false,\n appName: null,\n pageTrackerUseFullPath: false,\n pageTrackerPrependBase: true,\n pageTrackerSkipSamePath: true,\n globalDataLayerName: \"dataLayer\",\n globalObjectName: \"gtag\",\n defaultGroupName: \"default\",\n includes: null,\n config: {\n id: null,\n params: {\n send_page_view: false,\n },\n },\n});\n\nlet params = {};\n\nexport const setOptions = (options = {}) => {\n const defaultParams = getDefaultParams();\n params = mergeDeep(defaultParams, options);\n};\n\nexport const getOptions = () => {\n return params;\n};\n","let router;\n\nexport const setRouter = (instance) => {\n router = instance;\n};\n\nexport const getRouter = () => router;\n\nexport default router;\n","import { getOptions } from \"@/options\";\nimport { isBrowser } from \"@/utils\";\n\nexport default (...args) => {\n const { globalObjectName } = getOptions();\n\n if (!isBrowser() || typeof window[globalObjectName] === \"undefined\") {\n return;\n }\n\n window[globalObjectName](...args);\n};\n","import query from \"@/api/query\";\nimport { getOptions } from \"@/options\";\n\nexport default (...args) => {\n const { config, includes } = getOptions();\n\n query(\"config\", config.id, ...args);\n\n if (Array.isArray(includes)) {\n includes.forEach((domain) => {\n query(\"config\", domain.id, ...args);\n });\n }\n};\n","import { isBrowser } from \"@/utils\";\nimport { getOptions } from \"@/options\";\n\nconst assignGlobalProperty = (id, value) => {\n if (!isBrowser()) {\n return;\n }\n\n window[`ga-disable-${id}`] = value;\n};\n\nexport default (value = true) => {\n const { config, includes } = getOptions();\n\n assignGlobalProperty(config.id, value);\n\n if (Array.isArray(includes)) {\n includes.forEach((domain) => assignGlobalProperty(domain.id, value));\n }\n};\n","import disable from \"@/api/disable\";\n\nexport default () => {\n disable(true);\n};\n","import disable from \"@/api/disable\";\n\nexport default () => {\n disable(false);\n};\n","import { getOptions } from \"@/options\";\nimport query from \"@/api/query\";\n\nexport default (name, params = {}) => {\n const { includes, defaultGroupName } = getOptions();\n\n if (params.send_to == null && Array.isArray(includes) && includes.length) {\n params.send_to = includes\n .map((domain) => domain.id)\n .concat(defaultGroupName);\n }\n\n query(\"event\", name, params);\n};\n","import { getOptions } from \"@/options\";\nimport { getRouter } from \"@/router\";\nimport { getPathWithBase, isBrowser } from \"@/utils\";\nimport event from \"@/api/event\";\n\nexport default (param) => {\n if (!isBrowser()) {\n return;\n }\n\n let template;\n\n if (typeof param === \"string\") {\n template = {\n page_path: param,\n };\n } else if (param.path || param.fullPath) {\n const {\n pageTrackerUseFullPath: useFullPath,\n pageTrackerPrependBase: useBase,\n } = getOptions();\n const router = getRouter();\n const base = router && router.options.base;\n const path = useFullPath ? param.fullPath : param.path;\n\n template = {\n ...(param.name && { page_title: param.name }),\n page_path: useBase ? getPathWithBase(path, base) : path,\n };\n } else {\n template = param;\n }\n\n if (template.page_location == null) {\n template.page_location = window.location.href;\n }\n\n event(\"page_view\", template);\n};\n","import { getOptions } from \"@/options\";\nimport event from \"@/api/event\";\n\nexport default (param) => {\n const { appName } = getOptions();\n\n if (!param) {\n return;\n }\n\n let template;\n\n if (typeof param === \"string\") {\n template = {\n screen_name: param,\n };\n } else {\n template = param;\n }\n\n template.app_name = template.app_name || appName;\n\n event(\"screen_view\", template);\n};\n","import event from \"@/api/event\";\n\nexport default (...args) => {\n event(\"exception\", ...args);\n};\n","import config from \"./config\";\n\nexport default (params) => {\n config(\"linker\", params);\n};\n","import event from \"@/api/event\";\n\nexport default (params) => {\n event(\"timing_complete\", params);\n};\n","import query from \"@/api/query\";\n\nexport default (...args) => {\n query(\"set\", ...args);\n};\n","import event from \"@/api/event\";\n\nexport default (...args) => {\n event(\"refund\", ...args);\n};\n","import event from \"@/api/event\";\n\nexport default (params) => {\n event(\"purchase\", params);\n};\n","import config from \"@/api/config\";\n\nexport default (map) => {\n config({\n custom_map: map,\n });\n};\n","import * as api from \"@/api\";\n\nconst attachApi = (app) => {\n app.config.globalProperties.$gtag = api;\n};\n\nexport default attachApi;\n","import * as api from \"@/api\";\nimport { getOptions } from \"@/options\";\n\nconst mergeDefaultParams = (params) => ({\n send_page_view: false,\n ...params,\n});\n\nexport default () => {\n const { config, includes } = getOptions();\n\n api.query(\"config\", config.id, mergeDefaultParams(config.params));\n\n if (Array.isArray(includes)) {\n includes.forEach((domain) => {\n api.query(\"config\", domain.id, mergeDefaultParams(domain.params));\n });\n }\n};\n","import { isFunction } from \"@vue/shared\";\nimport { getOptions } from \"@/options\";\nimport { validateScreenviewShape } from \"@/utils\";\nimport * as api from \"@/api\";\n\nexport default (to = {}, from = {}) => {\n const {\n appName,\n pageTrackerTemplate: proxy,\n pageTrackerScreenviewEnabled: useScreenview,\n pageTrackerSkipSamePath: skipSamePath,\n } = getOptions();\n\n if (skipSamePath && to.path === from.path) {\n return;\n }\n\n let template = to;\n\n if (isFunction(proxy)) {\n template = proxy(to, from);\n } else if (useScreenview) {\n template = validateScreenviewShape({\n app_name: appName,\n screen_name: to.name,\n });\n }\n\n if (useScreenview) {\n api.screenview(template);\n return;\n }\n\n api.pageview(template);\n};\n","import { nextTick } from \"vue\";\nimport { isFunction } from \"@vue/shared\";\nimport { getRouter } from \"@/router\";\nimport { getOptions } from \"@/options\";\nimport addConfiguration from \"@/add-configuration\";\nimport track from \"@/track\";\n\nconst isRouteExcluded = (route) => {\n const { pageTrackerExcludedRoutes: routes } = getOptions();\n return routes.includes(route.path) || routes.includes(route.name);\n};\n\nexport default () => {\n const { onBeforeTrack, onAfterTrack } = getOptions();\n const router = getRouter();\n\n router.isReady().then(() => {\n nextTick().then(() => {\n const { currentRoute } = router;\n\n addConfiguration();\n\n if (isRouteExcluded(currentRoute.value)) {\n return;\n }\n\n track(currentRoute.value);\n });\n\n router.afterEach((to, from) => {\n nextTick().then(() => {\n if (isRouteExcluded(to)) {\n return;\n }\n\n if (isFunction(onBeforeTrack)) {\n onBeforeTrack(to, from);\n }\n\n track(to, from);\n\n if (isFunction(onAfterTrack)) {\n onAfterTrack(to, from);\n }\n });\n });\n });\n};\n","import { load } from \"@/utils\";\nimport registerGlobals from \"@/register-globals\";\nimport addRoutesTracker from \"@/add-routes-tracker\";\nimport { getOptions } from \"@/options\";\nimport { getRouter } from \"@/router\";\nimport addConfiguration from \"@/add-configuration\";\n\nexport default () => {\n const {\n onReady,\n onError,\n globalObjectName,\n globalDataLayerName,\n config,\n customResourceURL,\n customPreconnectOrigin,\n deferScriptLoad,\n pageTrackerEnabled,\n disableScriptLoad,\n } = getOptions();\n\n const isPageTrackerEnabled = Boolean(pageTrackerEnabled && getRouter());\n\n registerGlobals();\n\n if (isPageTrackerEnabled) {\n addRoutesTracker();\n } else {\n addConfiguration();\n }\n\n if (disableScriptLoad) {\n return;\n }\n\n return load(`${customResourceURL}?id=${config.id}&l=${globalDataLayerName}`, {\n preconnectOrigin: customPreconnectOrigin,\n defer: deferScriptLoad,\n })\n .then(() => {\n if (onReady) {\n onReady(window[globalObjectName]);\n }\n })\n .catch((error) => {\n if (onError) {\n onError(error);\n }\n\n return error;\n });\n};\n","import { isBrowser } from \"@/utils\";\nimport { getOptions } from \"@/options\";\nimport * as api from \"@/api\";\n\nexport default () => {\n if (!isBrowser()) {\n return;\n }\n\n const { enabled, globalObjectName, globalDataLayerName } = getOptions();\n\n if (window[globalObjectName] == null) {\n window[globalDataLayerName] = window[globalDataLayerName] || [];\n window[globalObjectName] = function () {\n window[globalDataLayerName].push(arguments);\n };\n }\n\n window[globalObjectName](\"js\", new Date());\n\n if (!enabled) {\n api.optOut();\n }\n\n return window[globalObjectName];\n};\n","import attachApi from \"@/attach-api\";\nimport { setOptions, getOptions } from \"@/options\";\nimport bootstrap from \"@/bootstrap\";\nimport { setRouter } from \"@/router\";\n\nconst install = (app, options = {}, router) => {\n attachApi(app);\n setOptions(options);\n setRouter(router);\n\n if (getOptions().bootstrap) {\n bootstrap();\n }\n};\n\nexport { default as query } from \"@/api/query\";\nexport { default as config } from \"@/api/config\";\nexport { default as optOut } from \"@/api/opt-out\";\nexport { default as optIn } from \"@/api/opt-in\";\nexport { default as pageview } from \"@/api/pageview\";\nexport { default as screenview } from \"@/api/screenview\";\nexport { default as exception } from \"@/api/exception\";\nexport { default as linker } from \"@/api/linker\";\nexport { default as time } from \"@/api/time\";\nexport { default as set } from \"@/api/set\";\nexport { default as refund } from \"@/api/refund\";\nexport { default as purchase } from \"@/api/purchase\";\nexport { default as customMap } from \"@/api/custom-map\";\nexport { default as event } from \"@/api/event\";\n\nexport { default as bootstrap } from \"@/bootstrap\";\nexport { default as addRoutesTracker } from \"@/add-routes-tracker\";\n\nexport { setOptions } from \"@/options\";\nexport { setRouter } from \"@/router\";\n\nexport { install };\n\nexport default install;\n"],"names":["isFunction","val","objectToString","Object","prototype","toString","isPlainObject","toTypeString","value","call","mergeDeep","target","sources","length","source","shift","key","assign","isBrowser","window","document","warn","text","validateScreenviewShape","obj","app_name","screen_name","getPathWithBase","path","base","pathAsArray","split","baseAsArray","join","router","params","setOptions","options","defaultParams","bootstrap","onReady","onError","onBeforeTrack","onAfterTrack","pageTrackerTemplate","customResourceURL","customPreconnectOrigin","deferScriptLoad","pageTrackerExcludedRoutes","pageTrackerEnabled","enabled","disableScriptLoad","pageTrackerScreenviewEnabled","appName","pageTrackerUseFullPath","pageTrackerPrependBase","pageTrackerSkipSamePath","globalDataLayerName","globalObjectName","defaultGroupName","includes","config","id","send_page_view","getOptions","args","query","Array","isArray","forEach","domain","assignGlobalProperty","disable","setRouter","instance","getRouter","name","send_to","map","concat","param","template","page_path","fullPath","useFullPath","useBase","page_title","page_location","location","href","event","custom_map","attachApi","app","globalProperties","$gtag","api","mergeDefaultParams","to","from","proxy","useScreenview","skipSamePath","isRouteExcluded","route","routes","isReady","then","nextTick","currentRoute","addConfiguration","track","afterEach","isPageTrackerEnabled","Boolean","push","arguments","Date","registerGlobals","addRoutesTracker","url","Promise","resolve","reject","head","getElementsByTagName","script","createElement","async","src","defer","preconnectOrigin","link","rel","appendChild","onload","onerror","load","error","install"],"mappings":"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"}