vue3-analytics
Version:
Google Analytics plugin for Vue3
1 lines • 16.8 kB
JavaScript
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.r(t),n.d(t,"default",(function(){return te})),n.d(t,"analyticsMiddleware",(function(){return ne})),n.d(t,"onAnalyticsReady",(function(){return re})),n.d(t,"event",(function(){return oe})),n.d(t,"ecommerce",(function(){return ie})),n.d(t,"set",(function(){return ae})),n.d(t,"page",(function(){return ce})),n.d(t,"query",(function(){return ue})),n.d(t,"screenview",(function(){return fe})),n.d(t,"time",(function(){return le})),n.d(t,"require",(function(){return se})),n.d(t,"exception",(function(){return de})),n.d(t,"social",(function(){return pe}));var a={$vue:null,id:null,router:null,fields:{},customIdFields:{},ignoreRoutes:[],linkers:[],commands:{},disabled:!1,customResourceURL:null,set:[],require:[],ecommerce:{enabled:!1,options:null,enhanced:!1},autoTracking:{screenview:!1,shouldRouterUpdate:null,skipSamePath:!1,exception:!1,exceptionLogs:!0,page:!0,transformQueryString:!0,pageviewOnLoad:!0,pageviewTemplate:null,untracked:!0,prependBase:!0},debug:{enabled:!1,trace:!1,sendHitTask:!0},batch:{enabled:!1,delay:500,amount:2},checkDuplicatedScript:!1,disableScriptLoader:!1,beforeFirstHit:s,ready:s,untracked:[]},c=o({},a);function u(e){!function e(t,n){return Object.keys(n).forEach((function(r){var o=t[r]&&Object.prototype.toString.call(t[r]);"[object Object]"!==o&&"[object Array]"!==o?t[r]=n[r]:e(t[r],n[r])})),t}(c,e)}function f(){return c.id?[].concat(c.id):[]}var l=c;function s(){}var d=function(e){console.warn("[vue-analytics] ".concat(e))};function p(e,t){return new Promise((function(n,r){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("script");if(i.async=!0,i.src=e,i.charset="utf-8",t){var a=document.createElement("link");a.href=t,a.rel="preconnect",o.appendChild(a)}o.appendChild(i),i.onload=n,i.onerror=r}))}function y(e){return e.name||e.replace(/-/gi,"")}function b(e,t){if(f().length>1){var n=y(t);return"".concat(n,".").concat(e)}return e}function m(e){return e.query&&e.params}function v(e){return e.currentRoute}var g,h=function(e){if(e.then)return e;if("function"==typeof e){var t=e();return t.then?t:Promise.resolve(t)}return Promise.resolve(e)};function w(e){return function(e){if(Array.isArray(e))return O(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return O(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return O(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var j=[];function S(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];"undefined"!=typeof window&&f().forEach((function(t){var r,o={m:b(e,t),a:n};window.ga?l.batch.enabled?(j.push(o),g||(g=setInterval((function(){j.length?j.splice(0,l.batch.amount).forEach((function(e){var t;(t=window).ga.apply(t,[e.m].concat(w(e.a)))})):(clearInterval(g),g=null)}),l.batch.delay))):(r=window).ga.apply(r,[b(e,t)].concat(n)):l.untracked.push(o)}))}function P(e){return(P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function A(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"object"!==P(t[0])||t[0].constructor!==Object?S("set",t[0],t[1]):S("set",t[0])}function k(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?k(Object(n),!0).forEach((function(t){x(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function x(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var T=function(){2!=arguments.length?S("require",arguments.length<=0?void 0:arguments[0]):S("require",arguments.length<=0?void 0:arguments[0],arguments.length<=1?void 0:arguments[1])};function D(e){return(D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var I=function(){var e;l.set.forEach((function(e){var t=e.field,n=e.value;if(void 0===t||void 0===n)throw new Error('[vue-analytics] Wrong configuration in the plugin options.\nThe "set" array requires each item to have a "field" and a "value" property.');A(t,n)})),e=["ec","ecommerce"],l.require.forEach((function(t){if(-1!==e.indexOf(t)||-1!==e.indexOf(t.name))throw new Error("[vue-analytics] The ecommerce features are built-in in the plugin. \nFollow the ecommerce instructions available in the documentation.");if("string"!=typeof t&&"object"!==D(t))throw new Error('[vue-analytics] Wrong configuration in the plugin options. \nThe "require" array requires each item to be a string or to have a "name" and an "options" property.');var n=t.name||t;t.options?T(n,t.options):T(n)}))};function q(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0];if(1===t.length&&"string"==typeof r)return S("send","screenview",{screenName:r});S.apply(void 0,["send","screenview"].concat(t))}function R(e){return(R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function L(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r;if(!t.length||t[0])if(t.length&&v(t[0])&&(r=t[0].currentRoute),t.length&&m(t[0])&&(r=t[0]),r)M(r);else{var o="object"===R(t[0])?t[0].page:t[0];A("page",o),S.apply(void 0,["send","pageview"].concat(t))}}function M(e){if(![(t=e).name,t.path].filter(Boolean).find((function(e){return-1!==l.ignoreRoutes.indexOf(e)}))){var t,n=l.autoTracking,r=e.meta.analytics,o=(void 0===r?{}:r).pageviewTemplate||n.pageviewTemplate;if(n.screenview&&!e.name)throw new Error("[vue-analytics] Route name is mandatory when using screenview.");if(n.screenview)q(e.name);else if(o)L(o(e));else{var i=l.router,a=l.autoTracking,c=a.transformQueryString,u=a.prependBase,f=function(e){var t=Object.keys(e).reduce((function(t,n,r,o){var i=r===o.length-1,a=e[n];return null==a?t:t+="".concat(n,"=").concat(a).concat(i?"":"&")}),"");return""!==t?"?".concat(t):""}(e.query),s=i&&i.options.base,d=u&&s,p=e.path+(c?f:"");L(p=d?function(e,t){var n=t.split("/"),r=e.split("/");return""===n[0]&&"/"===e[e.length-1]&&n.shift(),r.join("/")+n.join("/")}(s,p):p)}}}function U(e){return function(e){if(Array.isArray(e))return _(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return _(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var B=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];"undefined"!=typeof window&&f().forEach((function(t){window["ga-disable-".concat(t)]=e}))},$=function(){if("undefined"!=typeof document&&"undefined"!=typeof window){if(l.id){var e,t,n=[h(l.id),h(l.disabled)];if(e=l.checkDuplicatedScript,t=l.disableScriptLoader,[Boolean(window&&window.ga),e&&!(Array.prototype.slice.call(document.getElementsByTagName("script")).filter((function(e){return-1!==e.src.indexOf("analytics")||-1!==e.src.indexOf("gtag")})).length>0),!t].some(Boolean)){var r="https://www.google-analytics.com",o=l.debug.enabled?"analytics_debug":"analytics",i=l.customResourceURL?p(l.customResourceURL):p("".concat(r,"/").concat(o,".js"),r);n.push(i.catch((function(){d("An error occured! Please check your connection or disable your AD blocker")})))}return Promise.all(n).then((function(e){var t,n,r;u({id:e[0],disabled:e[1]}),B(l.disabled),function(){if(window.ga||!l.debug.enabled){if(window.ga){var e=f();l.debug.enabled&&(window.ga_debug={trace:l.debug.trace}),e.forEach((function(t){var n=y(t),r=l.customIdFields[t]||{},o=e.length>1?E(E(E({},l.fields),r),{},{name:n}):l.fields;window.ga("create",t.id||t,"auto",o)})),l.beforeFirstHit();var t=l.ecommerce;if(t.enabled){var n=t.enhanced?"ec":"ecommerce";t.options?S("require",n,t.options):S("require",n)}l.linkers.length>0&&(S("require","linker"),S("linker:autoLink",l.linkers)),l.debug.sendHitTask||A("sendHitTask",null)}}else d("Google Analytics has probably been blocked.")}(),I(),l.untracked.forEach((function(e){S.apply(void 0,[e.m].concat(U(e.a)))})),t=l.router,n=l.autoTracking,r=l.$vue,n.page&&t&&t.onReady((function(){n.pageviewOnLoad&&t.history.ready&&M(t.currentRoute),t.afterEach((function(e,o){var i=n.skipSamePath,a=n.shouldRouterUpdate;i&&e.path===o.path||("function"!=typeof a||a(e,o))&&r.nextTick().then((function(){M(t.currentRoute)}))}))})),l.ready()})).catch((function(e){l.debug.enabled&&d(e.message)}))}d('Missing the "id" parameter. Add at least one tracking domain ID')}};var C=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];S("send","exception",{exDescription:e,exFatal:t})},F=C;function H(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?H(Object(n),!0).forEach((function(t){Q(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):H(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var W=function(e){return"".concat(l.ecommerce.enhanced?"ec":"ecommerce",":").concat(e)},G=["addItem","addTransaction","addProduct","addImpression","setAction","addPromo","send"].reduce((function(e,t){return N(N({},e),{},Q({},t,(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];S.apply(void 0,[W(t)].concat(n))})))}),{}),z={event:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];S.apply(void 0,["send","event"].concat(t))},exception:F,page:L,query:S,require:T,set:A,social:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];S.apply(void 0,["send","social"].concat(t))},time:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];S.apply(void 0,["send","timing"].concat(t))},screenview:q,ecommerce:G,disable:function(){return B(!0)},enable:function(){return B(!1)},commands:l.commands};function J(e){return function(e){if(Array.isArray(e))return X(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||V(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function K(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||V(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(e,t){if(e){if("string"==typeof e)return X(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?X(e,t):void 0}}function X(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Z(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(n),!0).forEach((function(t){ee(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ee(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function te(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u(Z(Z({},t),{},{$vue:e})),e.config.globalProperties.$ga=z,$()}var ne=function(e){e.subscribe((function(e){var t=e.payload;if(t&&t.meta&&t.meta.analytics){var n=t.meta.analytics;if(!Array.isArray(n))throw new Error('The "analytics" property needs to be an array');n.forEach((function(e){var t,n,r=e.shift(),o=e;if(r.includes(":")){var i=K(r.split(":"),2);r=i[0],t=i[1]}if(!(r in z))throw new Error('[vue-analytics:vuex] The type "'.concat(r,"\" doesn't exist."));if(t&&!(t in z[r]))throw new Error('[vue-analytics:vuex] The type "'.concat(r,'" has not method "').concat(t,'".'));if("ecommerce"===r&&!t)throw new Error('[vue-analytics:vuex] The type "'.concat(r,'" needs to call a method. Check documentation.'));t?(n=z[r])[t].apply(n,J(o)):z[r].apply(z,J(o))}))}}))},re=function(){return new Promise((function(e,t){var n=setInterval((function(){"undefined"!=typeof window&&window.ga&&(e(),clearInterval(n))}),10)}))},oe=z.event,ie=z.ecommerce,ae=z.set,ce=z.page,ue=z.query,fe=z.screenview,le=z.time,se=z.require,de=z.exception,pe=z.social}])}));