UNPKG

@analytics/original-source-plugin

Version:

Save original referral source of visitor plugin for 'analytics' pkg

3 lines (2 loc) 1.91 kB
import{decodeUri as r,parseReferrer as n}from"analytics-utils";import{getItem as t,COOKIE as e,setItem as i,LOCAL_STORAGE as o}from"@analytics/storage-utils";import{isObject as c,isBrowser as a}from"@analytics/type-utils";function s(){return s=Object.assign?Object.assign.bind():function(r){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var e in t)({}).hasOwnProperty.call(t,e)&&(r[e]=t[e])}return r},s.apply(null,arguments)}function u(n){const t={utmcsr:"source",utmcmd:"medium",utmccn:"campaign",utmcct:"content",utmctr:"term",utmgclid:"gclid",utmdclid:"dclid"},e=n?n.split("|"):[];return e.reduce((n,i,o)=>{const c=e[o].split("="),a=c[0].split(".").pop();return t[a]?n[`${t[a]}`]=r(c[1]):void 0===i[a]&&(n[a]=r(c[1])),n},{})}const g={SET_ORIGINAL_SOURCE:"setOriginalSource"},l={storage:o,originalSourceKey:"__user_original_source",originalLandingPageKey:"__user_original_landing_page"};function m(r={}){return{name:"original-source",EVENTS:g,config:s({},l,r),bootstrap:({instance:r,config:n})=>{r.dispatch({type:g.SET_ORIGINAL_SOURCE,originalSource:f(n),originalLandingPage:p(n)})},reset:({instance:r})=>{r.storage.removeItem(l.originalSourceKey),r.storage.removeItem(l.originalLandingPageKey)}}}function f(r={}){const i=Object.assign({},l,r),{referrer:o,originalSourceKey:c}=i,s=t(c,i.storage);if(s)return u(s);const g=t("__utmz",e);if(g){const r=u(g);if(r)return d(r,i),r}const m=a?o||document.referrer:"",f=n(m);return d(f,i),f}function d(r,n){i(n.originalSourceKey,function(r){if(c(r))return Object.keys(r).reduce((n,t,e)=>`${n}${e?"|":""}${t}=${r[t]}`,"")}(r),n.storage)}function p(r={}){const n=Object.assign({},l,r),e=n.originalLandingPageKey,o={storage:n.storage},c=t(e,o);if(c)return c;const s=a?window.location.href:"";return i(e,s,o),s}export{p as getOriginalLandingPage,f as getOriginalSource,m as originalSourcePlugin}; //# sourceMappingURL=analytics-original-source.modern.js.map