@analytics/core
Version:
Lightweight analytics library for tracking events, page views, & identifying users. Works with any third party analytics provider via an extendable plugin system.
3 lines (2 loc) • 25.9 kB
JavaScript
var e=require("analytics-utils"),t=require("@analytics/global-storage-utils"),n=require("@analytics/type-utils");function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}var i="function",a="undefined",o="@@redux/"+Math.random().toString(36),u=/* #__PURE__ */function(){return typeof Symbol===i&&Symbol.observable||"@@observable"}(),c=" != "+i;function s(e,t,r){var o;if(typeof t===i&&typeof r===a&&(r=t,t=void 0),typeof r!==a){if(typeof r!==i)throw new Error("enhancer"+c);return r(s)(e,t)}if(typeof e!==i)throw new Error("reducer"+c);var l=e,f=t,d=[],p=d,m=!1;function g(){p===d&&(p=d.slice())}function h(){return f}function v(e){if(typeof e!==i)throw new Error("Listener"+c);var t=!0;return g(),p.push(e),function(){if(t){t=!1,g();var n=p.indexOf(e);p.splice(n,1)}}}function y(e){if(!n.isObject(e))throw new Error("Act != obj");if(typeof e.type===a)throw new Error("ActType "+a);if(m)throw new Error("Dispatch in reducer");try{m=!0,f=l(f,e)}finally{m=!1}for(var t=d=p,r=0;r<t.length;r++)(0,t[r])();return e}return y({type:"@@redux/INIT"}),(o={dispatch:y,subscribe:v,getState:h,replaceReducer:function(e){if(typeof e!==i)throw new Error("next reducer"+c);l=e,y({type:"@@redux/INIT"})}})[u]=function(){var e,t=v;return(e={subscribe:function(e){if("object"!=typeof e)throw new TypeError("Observer != obj");function n(){e.next&&e.next(h())}return n(),{unsubscribe:t(n)}}})[u]=function(){return this},e},o}function l(e,t){var n=t&&t.type;return"action "+(n&&n.toString()||"?")+"reducer "+e+" returns "+a}function f(){var e=[].slice.call(arguments);return 0===e.length?function(e){return e}:1===e.length?e[0]:e.reduce(function(e,t){return function(){return e(t.apply(void 0,[].slice.call(arguments)))}})}function d(){var e=arguments;return function(t){return function(n,i,a){var o,u=t(n,i,a),c=u.dispatch,s={getState:u.getState,dispatch:function(e){return c(e)}};return o=[].slice.call(e).map(function(e){return e(s)}),r({},u,{dispatch:c=f.apply(void 0,o)(u.dispatch)})}}}var p=n.PREFIX+"anon_id",m=n.PREFIX+"user_id",g=n.PREFIX+"user_traits",h={__proto__:null,ANON_ID:p,USER_ID:m,USER_TRAITS:g},v="userId",y="anonymousId",b=["bootstrap","params","campaign","initializeStart","initialize","initializeEnd","ready","resetStart","reset","resetEnd","pageStart","page","pageEnd","pageAborted","trackStart","track","trackEnd","trackAborted","identifyStart","identify","identifyEnd","identifyAborted","userIdChanged","registerPlugins","enablePlugin","disablePlugin","online","offline","setItemStart","setItem","setItemEnd","setItemAborted","removeItemStart","removeItem","removeItemEnd","removeItemAborted"],I=["name","EVENTS","config","loaded"],w=b.reduce(function(e,t){return e[t]=t,e},{registerPluginType:function(e){return"registerPlugin:"+e},pluginReadyType:function(e){return"ready:"+e}}),E=/^utm_/,P=/^an_prop_/,S=/^an_trait_/;function O(e){var t=e.storage.setItem;return function(n){return function(i){return function(a){if(a.type===w.bootstrap){var o=a.params,u=a.user,c=a.persistedUser,s=a.initialUser,l=c.userId===u.userId;c.anonymousId!==u.anonymousId&&t(p,u.anonymousId),l||t(m,u.userId),s.traits&&t(g,r({},l&&c.traits?c.traits:{},s.traits));var f=Object.keys(a.params);if(f.length){var d=o.an_uid,h=o.an_event,v=f.reduce(function(e,t){if(t.match(E)||t.match(/^(d|g)clid/)){var n=t.replace(E,"");e.campaign["campaign"===n?"name":n]=o[t]}return t.match(P)&&(e.props[t.replace(P,"")]=o[t]),t.match(S)&&(e.traits[t.replace(S,"")]=o[t]),e},{campaign:{},props:{},traits:{}});n.dispatch(r({type:w.params,raw:o},v,d?{userId:d}:{})),d&&setTimeout(function(){return e.identify(d,v.traits)},0),h&&setTimeout(function(){return e.track(h,v.props)},0),Object.keys(v.campaign).length&&n.dispatch({type:w.campaign,campaign:v.campaign})}}return i(a)}}}}function j(e){return function(t,n){if(void 0===t&&(t={}),void 0===n&&(n={}),n.type===w.setItemEnd){if(n.key===p)return r({},t,{anonymousId:n.value});if(n.key===m)return r({},t,{userId:n.value})}switch(n.type){case w.identify:return Object.assign({},t,{userId:n.userId,traits:r({},t.traits,n.traits)});case w.reset:return[m,p,g].forEach(function(t){e.removeItem(t)}),Object.assign({},t,{userId:null,anonymousId:null,traits:{}});default:return t}}}function N(e){return{userId:e.getItem(m),anonymousId:e.getItem(p),traits:e.getItem(g)}}var x=function(e){return n.PREFIX+"TEMP"+n.PREFIX+e};function A(n){var i=n.storage,a=i.setItem,o=i.removeItem,u=i.getItem;return function(n){return function(i){return function(c){var s=c.userId,l=c.traits,f=c.options;if(c.type===w.reset&&([m,g,p].forEach(function(e){o(e)}),[v,y,"traits"].forEach(function(e){t.remove(x(e))})),c.type===w.identify){u(p)||a(p,e.uuid());var d=u(m),h=u(g)||{};d&&d!==s&&n.dispatch({type:w.userIdChanged,old:{userId:d,traits:h},new:{userId:s,traits:l},options:f}),s&&a(m,s),l&&a(g,r({},h,l))}return i(c)}}}}var _={};function k(e,t){_[e]&&n.isFunction(_[e])&&(_[e](t),delete _[e])}function T(e,t,n){return new Promise(function(i,a){return t()?i(e):n<1?a(r({},e,{queue:!0})):new Promise(function(e){return setTimeout(e,10)}).then(function(r){return T(e,t,n-10).then(i,a)})})}function z(e){return{abort:e}}function M(e,t,i){var a={},o=t(),u=e.getState(),c=u.plugins,s=u.queue,l=u.user;if(!u.context.offline&&s&&s.actions&&s.actions.length){var f=s.actions.reduce(function(e,t,n){return c[t.plugin].loaded?(e.process.push(t),e.processIndex.push(n)):(e.requeue.push(t),e.requeueIndex.push(n)),e},{processIndex:[],process:[],requeue:[],requeueIndex:[]});if(f.processIndex&&f.processIndex.length){f.processIndex.forEach(function(t){var u=s.actions[t],f=u.plugin,d=u.payload.type,p=o[f][d];if(p&&n.isFunction(p)){var m,g=function(e,t){return void 0===e&&(e={}),void 0===t&&(t={}),[v,y].reduce(function(n,r){return e.hasOwnProperty(r)&&t[r]&&t[r]!==e[r]&&(n[r]=t[r]),n},e)}(u.payload,l),h=a[g.meta.rid];if(!h&&(m=p({payload:g,config:c[f].config,instance:i,abort:z}))&&n.isObject(m)&&m.abort)return void(a[g.meta.rid]=!0);if(!h){var b=d+":"+f;e.dispatch(r({},g,{type:b,_:{called:b,from:"queueDrain"}}))}}});var d=s.actions.filter(function(e,t){return!~f.processIndex.indexOf(t)});s.actions=d}}}var q=function(e){var t=e.data,i=e.action,a=e.instance,o=e.state,u=e.allPlugins,c=e.allMatches,s=e.store,l=e.EVENTS;try{var f=o.plugins,d=o.context,p=i.type,m=p.match(B),g=t.exact.map(function(e){return e.pluginName});m&&(g=c.during.map(function(e){return e.pluginName}));var h=function(e,t){return function(n,i,a){var o=i.config,u=i.name,c=u+"."+n.type;a&&(c=a.event);var s=n.type.match(B)?function(e,t,n,i,a){return function(o,u){var c=i?i.name:e,s=u&&D(u)?u:n;if(i&&(!(s=u&&D(u)?u:[e]).includes(e)||1!==s.length))throw new Error("Method "+t+" can only abort "+e+" plugin. "+JSON.stringify(s)+" input valid");return r({},a,{abort:{reason:o,plugins:s,caller:t,_:c}})}}(u,c,t,a,n):function(e,t){return function(){throw new Error(e.type+" action not cancellable. Remove abort in "+t)}}(n,c);return{payload:H(n),instance:e,config:o||{},abort:s}}}(a,g),v=t.exact.reduce(function(e,t){var n=t.pluginName,r=t.methodName,i=!1;return r.match(/^initialize/)||r.match(/^reset/)||(i=!f[n].loaded),d.offline&&r.match(/^(page|track|identify)/)&&(i=!0),e[""+n]=i,e},{});return Promise.resolve(t.exact.reduce(function(e,o,c){try{var s=o.pluginName;return Promise.resolve(e).then(function(e){function o(){return Promise.resolve(e)}var c=function(){if(t.namespaced&&t.namespaced[s])return Promise.resolve(t.namespaced[s].reduce(function(e,t,i){try{return Promise.resolve(e).then(function(e){return t.method&&n.isFunction(t.method)?(function(e,t){var n=W(e);if(n&&n.name===t){var r=W(n.method);throw new Error([t+" plugin is calling method "+e,"Plugins cant call self","Use "+n.method+" "+(r?"or "+r.method:"")+" in "+t+" plugin insteadof "+e].join("\n"))}}(t.methodName,t.pluginName),Promise.resolve(t.method({payload:e,instance:a,abort:(i=e,o=s,c=t.pluginName,function(e,t){return r({},i,{abort:{reason:e,plugins:t||[o],caller:p,from:c||o}})}),config:U(t.pluginName,f,u),plugins:f})).then(function(t){var i=n.isObject(t)?t:{};return Promise.resolve(r({},e,i))})):e;var i,o,c})}catch(e){return Promise.reject(e)}},Promise.resolve(i))).then(function(t){e[s]=t});e[s]=i}();return c&&c.then?c.then(o):o()})}catch(e){return Promise.reject(e)}},Promise.resolve({}))).then(function(e){return Promise.resolve(t.exact.reduce(function(i,o,c){try{var l=t.exact.length===c+1,d=o.pluginName,g=u[d];return Promise.resolve(i).then(function(t){var i=e[d]?e[d]:{};if(m&&(i=t),X(i,d))return L({data:i,method:p,instance:a,pluginName:d,store:s}),Promise.resolve(t);if(X(t,d))return l&&L({data:t,method:p,instance:a,store:s}),Promise.resolve(t);if(v.hasOwnProperty(d)&&!0===v[d])return s.dispatch({type:"queue",plugin:d,payload:i,_:{called:"queue",from:"queueMechanism"}}),Promise.resolve(t);var o=h(e[d],u[d]);return Promise.resolve(g[p]({abort:o.abort,payload:i,instance:a,config:U(d,f,u),plugins:f})).then(function(o){var u=n.isObject(o)?o:{},c=r({},t,u),l=e[d];if(X(l,d))L({data:l,method:p,instance:a,pluginName:d,store:s});else{var f=p+":"+d;(f.match(/:/g)||[]).length<2&&!p.match(F)&&!p.match(R)&&a.dispatch(r({},m?c:i,{type:f,_:{called:f,from:"submethod"}}))}return Promise.resolve(c)})})}catch(e){return Promise.reject(e)}},Promise.resolve(i))).then(function(e){if(!(p.match(B)||p.match(/^registerPlugin/)||p.match(R)||p.match(F)||p.match(/^params/)||p.match(/^userIdChanged/))){if(l.plugins.includes(p),e._&&e._.originalAction===p)return e;var n=r({},e,{_:{originalAction:e.type,called:e.type,from:"engineEnd"}});$(e,t.exact.length)&&!p.match(/End$/)&&(n=r({},n,{type:e.type+"Aborted"})),s.dispatch(n)}return e})})}catch(e){return Promise.reject(e)}},B=/Start$/,F=/^bootstrap/,R=/^ready/;function L(e){var t=e.pluginName,n=e.method+"Aborted"+(t?":"+t:"");e.store.dispatch(r({},e.data,{type:n,_:{called:n,from:"abort"}}))}function U(e,t,n){var r=t[e]||n[e];return r&&r.config?r.config:{}}function V(e,t){return t.reduce(function(t,n){return n[e]?t.concat({methodName:e,pluginName:n.name,method:n[e]}):t},[])}function C(e,t){var n=e.replace(B,""),r=t?":"+t:"";return[""+e+r,""+n+r,n+"End"+r]}function X(e,t){var n=e.abort;return!!n&&(!0===n||J(n,t)||n&&J(n.plugins,t))}function $(e,t){var r=e.abort;if(!r)return!1;if(!0===r||n.isString(r))return!0;var i=r.plugins;return D(r)&&r.length===t||D(i)&&i.length===t}function D(e){return Array.isArray(e)}function J(e,t){return!(!e||!D(e))&&e.includes(t)}function W(e){var t=e.match(/(.*):(.*)/);return!!t&&{method:t[1],name:t[2]}}function H(e){return Object.keys(e).reduce(function(t,r){return"type"===r||(t[r]=n.isObject(e[r])?Object.assign({},e[r]):e[r]),t},{})}function K(e,t,i){var a={};return function(o){return function(u){return function(c){try{var s,l=function(e){return s?e:u(p)},f=c.type,d=c.plugins,p=c;if(c.abort)return Promise.resolve(u(c));if(f===w.enablePlugin&&o.dispatch({type:w.initializeStart,plugins:d,disabled:[],fromEnable:!0,meta:c.meta}),f===w.disablePlugin&&setTimeout(function(){return k(c.meta.rid,{payload:c})},0),f===w.initializeEnd){var m=t(),g=Object.keys(m),h=g.filter(function(e){return d.includes(e)}).map(function(e){return m[e]}),v=[],y=[],b=c.disabled,E=h.map(function(e){var t=e.loaded,n=e.name,r=e.config;return T(e,function(){return t({config:r})},1e4).then(function(t){return a[n]||(o.dispatch({type:w.pluginReadyType(n),name:n,events:Object.keys(e).filter(function(e){return!I.includes(e)})}),a[n]=!0),v=v.concat(n),e}).catch(function(e){if(e instanceof Error)throw new Error(e);return y=y.concat(e.name),e})});Promise.all(E).then(function(e){var t={plugins:v,failed:y,disabled:b};setTimeout(function(){g.length===E.length+b.length&&o.dispatch(r({},{type:w.ready},t))},0)})}var P=function(){if(f!==w.bootstrap)return/^ready:([^:]*)$/.test(f)&&setTimeout(function(){return M(o,t,e)},0),Promise.resolve(function(e,t,i,a,o){try{var u=n.isFunction(t)?t():t,c=e.type,s=c.replace(B,"");if(e._&&e._.called)return Promise.resolve(e);var l=i.getState(),f=(m=u,void 0===(g=l.plugins)&&(g={}),void 0===(h=e.options)&&(h={}),Object.keys(m).filter(function(e){var t=h.plugins||{};return n.isBoolean(t[e])?t[e]:!1!==t.all&&(!g[e]||!1!==g[e].enabled)}).map(function(e){return m[e]}));c===w.initializeStart&&e.fromEnable&&(f=Object.keys(l.plugins).filter(function(t){var n=l.plugins[t];return e.plugins.includes(t)&&!n.initialized}).map(function(e){return u[e]}));var d=f.map(function(e){return e.name}),p=function(e,t,n){var r=C(e).map(function(e){return V(e,t)});return t.reduce(function(n,r){var i=r.name,a=C(e,i).map(function(e){return V(e,t)}),o=a[0],u=a[1],c=a[2];return o.length&&(n.beforeNS[i]=o),u.length&&(n.duringNS[i]=u),c.length&&(n.afterNS[i]=c),n},{before:r[0],beforeNS:{},during:r[1],duringNS:{},after:r[2],afterNS:{}})}(c,f);return Promise.resolve(q({action:e,data:{exact:p.before,namespaced:p.beforeNS},state:l,allPlugins:u,allMatches:p,instance:i,store:a,EVENTS:o})).then(function(e){function t(){var t=function(){if(c.match(B))return Promise.resolve(q({action:r({},n,{type:s+"End"}),data:{exact:p.after,namespaced:p.afterNS},state:l,allPlugins:u,allMatches:p,instance:i,store:a,EVENTS:o})).then(function(e){e.meta&&e.meta.hasCallback&&k(e.meta.rid,{payload:e})})}();return t&&t.then?t.then(function(){return e}):e}if($(e,d.length))return e;var n,f=function(){if(c!==s)return Promise.resolve(q({action:r({},e,{type:s}),data:{exact:p.during,namespaced:p.duringNS},state:l,allPlugins:u,allMatches:p,instance:i,store:a,EVENTS:o})).then(function(e){n=e});n=e}();return f&&f.then?f.then(t):t()})}catch(e){return Promise.reject(e)}var m,g,h}(c,t,e,o,i)).then(function(e){return s=1,u(e)})}();return Promise.resolve(P&&P.then?P.then(l):l(P))}catch(e){return Promise.reject(e)}}}}}function Y(e){return function(t){return function(t){return function(n){var r=n.type,i=n.key,a=n.value,o=n.options;if(r===w.setItem||r===w.removeItem){if(n.abort)return t(n);r===w.setItem?e.setItem(i,a,o):e.removeItem(i,o)}return t(n)}}}}var Z=function(){var e=this;this.before=[],this.after=[],this.addMiddleware=function(t,n){e[n]=e[n].concat(t)},this.removeMiddleware=function(t,n){var r=e[n].findIndex(function(e){return e===t});-1!==r&&(e[n]=[].concat(e[n].slice(0,r),e[n].slice(r+1)))},this.dynamicMiddlewares=function(t){return function(n){return function(r){return function(i){var a={getState:n.getState,dispatch:function(e){return n.dispatch(e)}},o=e[t].map(function(e){return e(a)});return f.apply(void 0,o)(r)(i)}}}}};function G(e){return function(t,n){void 0===t&&(t={});var i={};if("initialize:aborted"===n.type)return t;if(/^registerPlugin:([^:]*)$/.test(n.type)){var a=Q(n.type,"registerPlugin"),o=e()[a];if(!o||!a)return t;var u=n.enabled,c=o.config;return i[a]={enabled:u,initialized:!!u&&Boolean(!o.initialize),loaded:!!u&&Boolean(o.loaded({config:c})),config:c},r({},t,i)}if(/^initialize:([^:]*)$/.test(n.type)){var s=Q(n.type,w.initialize),l=e()[s];return l&&s?(i[s]=r({},t[s],{initialized:!0,loaded:Boolean(l.loaded({config:l.config}))}),r({},t,i)):t}if(/^ready:([^:]*)$/.test(n.type))return i[n.name]=r({},t[n.name],{loaded:!0}),r({},t,i);switch(n.type){case w.disablePlugin:return r({},t,ee(n.plugins,!1,t));case w.enablePlugin:return r({},t,ee(n.plugins,!0,t));default:return t}}}function Q(e,t){return e.substring(t.length+1,e.length)}function ee(e,t,n){return e.reduce(function(e,i){return e[i]=r({},n[i],{enabled:t}),e},n)}function te(e){try{return JSON.parse(JSON.stringify(e))}catch(e){}return e}var ne={last:{},history:[]};function re(e,t){void 0===e&&(e=ne);var n=t.options,i=t.meta;if(t.type===w.track){var a=te(r({event:t.event,properties:t.properties},Object.keys(n).length&&{options:n},{meta:i}));return r({},e,{last:a,history:e.history.concat(a)})}return e}var ie={actions:[]};function ae(e,t){void 0===e&&(e=ie);var n=t.payload;switch(t.type){case"queue":var i;return i=n&&n.type&&n.type===w.identify?[t].concat(e.actions):e.actions.concat(t),r({},e,{actions:i});case"dequeue":return[];default:return e}}var oe=/#.*$/;function ue(e){var t=/(http[s]?:\/\/)?([^\/\s]+\/)(.*)/g.exec(e);return"/"+(t&&t[3]?t[3].split("?")[0].replace(oe,""):"")}var ce,se,le,fe,de=function(e){if(void 0===e&&(e={}),!n.isBrowser)return e;var t=document,i=t.title,a=t.referrer,o=window,u=o.location,c=o.innerWidth,s=o.innerHeight,l=u.hash,f=u.search,d=function(e){var t=function(){if(n.isBrowser)for(var e,t=document.getElementsByTagName("link"),r=0;e=t[r];r++)if("canonical"===e.getAttribute("rel"))return e.getAttribute("href")}();return t?t.match(/\?/)?t:t+e:window.location.href.replace(oe,"")}(f),p={title:i,url:d,path:ue(d),hash:l,search:f,width:c,height:s};return a&&""!==a&&(p.referrer=a),r({},p,e)},pe={last:{},history:[]};function me(e,t){void 0===e&&(e=pe);var n=t.options;if(t.type===w.page){var i=te(r({properties:t.properties,meta:t.meta},Object.keys(n).length&&{options:n}));return r({},e,{last:i,history:e.history.concat(i)})}return e}ce=function(){if(!n.isBrowser)return!1;var e=navigator.appVersion;return~e.indexOf("Win")?"Windows":~e.indexOf("Mac")?"MacOS":~e.indexOf("X11")?"UNIX":~e.indexOf("Linux")?"Linux":"Unknown OS"}(),se=n.isBrowser?document.referrer:null,le=e.getBrowserLocale(),fe=e.getTimeZone();var ge={initialized:!1,sessionId:e.uuid(),app:null,version:null,debug:!1,offline:!!n.isBrowser&&!navigator.onLine,os:{name:ce},userAgent:n.isBrowser?navigator.userAgent:"node",library:{name:"analytics",version:"0.12.16"},timezone:fe,locale:le,campaign:{},referrer:se};function he(e,t){void 0===e&&(e=ge);var n=e.initialized,i=t.campaign;switch(t.type){case w.campaign:return r({},e,{campaign:i});case w.offline:return r({},e,{offline:!0});case w.online:return r({},e,{offline:!1});default:return n?e:r({},ge,e,{initialized:!0})}}var ve=["plugins","reducers","storage"];function ye(e,t,r){if(n.isBrowser){var i=window[(r?"add":"remove")+"EventListener"];e.split(" ").forEach(function(e){i(e,t)})}}function be(e){var t=ye.bind(null,"online offline",function(t){return Promise.resolve(!navigator.onLine).then(e)});return t(!0),function(e){return t(!1)}}function Ie(){return t.set("analytics",[]),function(e){return function(n,r,i){var a=e(n,r,i),o=a.dispatch;return Object.assign(a,{dispatch:function(e){return t.globalContext[t.KEY].analytics.push(e.action||e),o(e)}})}}}function we(e){return function(){return f(f.apply(null,arguments),Ie())}}function Ee(e){return e?n.isArray(e)?e:[e]:[]}function Pe(t,i,a){void 0===t&&(t={});var o,u,c=e.uuid();return i&&(_[c]=(o=i,u=function(e){for(var t,r=e||Array.prototype.slice.call(arguments),i=0;i<r.length;i++)if(n.isFunction(r[i])){t=r[i];break}return t}(a),function(e){u&&u(e),o(e)})),r({},t,{rid:c,ts:(new Date).getTime()},i?{hasCallback:!0}:{})}function Se(u){void 0===u&&(u={});var c=u.reducers||{},m=u.initialUser||{},g=(u.plugins||[]).reduce(function(e,t){if(n.isFunction(t))return e.middlewares=e.middlewares.concat(t),e;if(t.NAMESPACE&&(t.name=t.NAMESPACE),!t.name)throw new Error("https://lytics.dev/errors/1");t.config||(t.config={});var r=t.EVENTS?Object.keys(t.EVENTS).map(function(e){return t.EVENTS[e]}):[];e.pluginEnabled[t.name]=!(!1===t.enabled||!1===t.config.enabled),delete t.enabled,t.methods&&(e.methods[t.name]=Object.keys(t.methods).reduce(function(e,n){var r;return e[n]=(r=t.methods[n],function(){for(var e=Array.prototype.slice.call(arguments),t=new Array(r.length),n=0;n<e.length;n++)t[n]=e[n];return t[t.length]=$,r.apply({instance:$},t)}),e},{}),delete t.methods);var i=Object.keys(t).concat(r),a=new Set(e.events.concat(i));if(e.events=Array.from(a),e.pluginsArray=e.pluginsArray.concat(t),e.plugins[t.name])throw new Error(t.name+"AlreadyLoaded");return e.plugins[t.name]=t,e.plugins[t.name].loaded||(e.plugins[t.name].loaded=function(){return!0}),e},{plugins:{},pluginEnabled:{},methods:{},pluginsArray:[],middlewares:[],events:[]}),h=u.storage?u.storage:{getItem:t.get,setItem:t.set,removeItem:t.remove},E=function(e){return function(r,i,a){return i.getState("user")[r]||(a&&n.isObject(a)&&a[r]?a[r]:N(e)[r]||t.get(x(r))||null)}}(h),P=g.plugins,S=g.events.filter(function(e){return!I.includes(e)}).sort(),_=new Set(S.concat(b).filter(function(e){return!I.includes(e)})),k=Array.from(_).sort(),T=function(){return P},z=new Z,q=z.addMiddleware,B=z.removeMiddleware,F=z.dynamicMiddlewares,R=function(){throw new Error("Abort disabled inListener")},L=e.paramsParse(),U=N(h),V=r({},U,m,L.an_uid?{userId:L.an_uid}:{},L.an_aid?{anonymousId:L.an_aid}:{});V.anonymousId||(V.anonymousId=e.uuid());var C=r({enable:function(e,t){return new Promise(function(n){oe.dispatch({type:w.enablePlugin,plugins:Ee(e),_:{originalAction:w.enablePlugin}},n,[t])})},disable:function(e,t){return new Promise(function(n){oe.dispatch({type:w.disablePlugin,plugins:Ee(e),_:{originalAction:w.disablePlugin}},n,[t])})}},g.methods),X=!1,$={identify:function(e,i,a,o){try{var u=n.isString(e)?e:null,c=n.isObject(e)?e:i,s=a||{},l=$.user();t.set(x(v),u);var f=u||c.userId||E(v,$,c);return Promise.resolve(new Promise(function(e){oe.dispatch(r({type:w.identifyStart,userId:f,traits:c||{},options:s,anonymousId:l.anonymousId},l.id&&l.id!==u&&{previousId:l.id}),e,[i,a,o])}))}catch(e){return Promise.reject(e)}},track:function(e,t,r,i){try{var a=n.isObject(e)?e.event:e;if(!a||!n.isString(a))throw new Error("EventMissing");var o=n.isObject(e)?e:t||{},u=n.isObject(r)?r:{};return Promise.resolve(new Promise(function(e){oe.dispatch({type:w.trackStart,event:a,properties:o,options:u,userId:E(v,$,t),anonymousId:E(y,$,t)},e,[t,r,i])}))}catch(e){return Promise.reject(e)}},page:function(e,t,r){try{var i=n.isObject(e)?e:{},a=n.isObject(t)?t:{};return Promise.resolve(new Promise(function(n){oe.dispatch({type:w.pageStart,properties:de(i),options:a,userId:E(v,$,i),anonymousId:E(y,$,i)},n,[e,t,r])}))}catch(e){return Promise.reject(e)}},user:function(t){if(t===v||"id"===t)return E(v,$);if(t===y||"anonId"===t)return E(y,$);var n=$.getState("user");return t?e.dotProp(n,t):n},reset:function(e){return new Promise(function(t){oe.dispatch({type:w.resetStart},t,e)})},ready:function(e){return X&&e({plugins:C,instance:$}),$.on(w.ready,function(t){e(t),X=!0})},on:function(e,t){if(!e||!n.isFunction(t))return!1;if(e===w.bootstrap)throw new Error(".on disabled for "+e);var r=/Start$|Start:/;if("*"===e){var i=function(e){return function(e){return function(n){return n.type.match(r)&&t({payload:n,instance:$,plugins:P}),e(n)}}},a=function(e){return function(e){return function(n){return n.type.match(r)||t({payload:n,instance:$,plugins:P}),e(n)}}};return q(i,Oe),q(a,je),function(){B(i,Oe),B(a,je)}}var o=e.match(r)?Oe:je,u=function(n){return function(n){return function(r){return r.type===e&&t({payload:r,instance:$,plugins:P,abort:R}),n(r)}}};return q(u,o),function(){return B(u,o)}},once:function(e,t){if(!e||!n.isFunction(t))return!1;if(e===w.bootstrap)throw new Error(".once disabled for "+e);var r=$.on(e,function(e){t({payload:e.payload,instance:$,plugins:P,abort:R}),r()});return r},getState:function(t){var n=oe.getState();return t?e.dotProp(n,t):Object.assign({},n)},dispatch:function(e){var t=n.isString(e)?{type:e}:e;if(b.includes(t.type))throw new Error("reserved action "+t.type);var i=r({},t,{_:r({originalAction:t.type},e._||{})});oe.dispatch(i)},enablePlugin:C.enable,disablePlugin:C.disable,plugins:C,storage:{getItem:h.getItem,setItem:function(e,t,n){oe.dispatch({type:w.setItemStart,key:e,value:t,options:n})},removeItem:function(e,t){oe.dispatch({type:w.removeItemStart,key:e,options:t})}},setAnonymousId:function(e,t){$.storage.setItem(p,e,t)},events:{core:b,plugins:S}},D=g.middlewares.concat([function(e){return function(e){return function(t){return t.meta||(t.meta=Pe()),e(t)}}},F(Oe),K($,T,{all:k,plugins:S}),Y(h),O($),A($),F(je)]),J={context:he,user:j(h),page:me,track:re,plugins:G(T),queue:ae},W=f,H=f;if(n.isBrowser&&u.debug){var Q=window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;Q&&(W=Q({trace:!0,traceLimit:25})),H=function(){return 0===arguments.length?Ie():n.isObject(typeof arguments[0])?we():we().apply(null,arguments)}}var ee,te=function(e){return Object.keys(e).reduce(function(t,n){return ve.includes(n)||(t[n]=e[n]),t},{})}(u),ne=g.pluginsArray.reduce(function(e,t){var n=t.name,r=t.config,i=t.loaded,a=g.pluginEnabled[n];return e[n]={enabled:a,initialized:!!a&&Boolean(!t.initialize),loaded:Boolean(i({config:r})),config:r},e},{}),ie={context:te,user:V,plugins:ne},oe=s(function(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var u=t[r];typeof e[u]===i&&(n[u]=e[u])}var c,s=Object.keys(n);try{!function(e){Object.keys(e).forEach(function(t){var n=e[t];if(typeof n(void 0,{type:"@@redux/INIT"})===a||typeof n(void 0,{type:o})===a)throw new Error("reducer "+t+" "+a)})}(n)}catch(e){c=e}return function(e,t){if(void 0===e&&(e={}),c)throw c;for(var r=!1,i={},o=0;o<s.length;o++){var u=s[o],f=e[u],d=(0,n[u])(f,t);if(typeof d===a){var p=l(u,t);throw new Error(p)}i[u]=d,r=r||d!==f}return r?i:e}}(r({},J,c)),ie,H(W(d.apply(void 0,D))));oe.dispatch=(ee=oe.dispatch,function(e,t,n){var i=r({},e,{meta:Pe(e.meta,t,Ee(n))});return ee.apply(null,[i])});var ue=Object.keys(P);oe.dispatch({type:w.bootstrap,plugins:ue,config:te,params:L,user:V,initialUser:m,persistedUser:U});var ce=ue.filter(function(e){return g.pluginEnabled[e]}),se=ue.filter(function(e){return!g.pluginEnabled[e]});return oe.dispatch({type:w.registerPlugins,plugins:ue,enabled:g.pluginEnabled}),g.pluginsArray.map(function(e,t){var r=e.bootstrap,i=e.config,a=e.name;r&&n.isFunction(r)&&r({instance:$,config:i,payload:e}),oe.dispatch({type:w.registerPluginType(a),name:a,enabled:g.pluginEnabled[a],plugin:e}),g.pluginsArray.length===t+1&&oe.dispatch({type:w.initializeStart,plugins:ce,disabled:se})}),be(function(e){oe.dispatch({type:e?w.offline:w.online})}),function(e,t,n){setInterval(function(){return M(e,t,n)},3e3)}(oe,T,$),$}var Oe="before",je="after";exports.Analytics=Se,exports.CONSTANTS=h,exports.EVENTS=w,exports.default=Se,exports.init=Se;
//# sourceMappingURL=analytics-core.js.map