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