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