UNPKG

@wener/console

Version:
139 lines (138 loc) 5.32 kB
function _array_like_to_array(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _array_without_holes(arr) { if (Array.isArray(arr)) return _array_like_to_array(arr); } function _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _non_iterable_spread() { 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 _to_consumable_array(arr) { return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread(); } function _unsupported_iterable_to_array(o, minLen) { if (!o) return; if (typeof o === "string") return _array_like_to_array(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); } import { getGlobalThis } from '@wener/utils'; import { createStore } from 'zustand'; import { mutative } from 'zustand-mutative'; function setupMatomo() { var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref_global = _ref.global, global = _ref_global === void 0 ? getGlobalThis() : _ref_global, url = _ref.url, siteId = _ref.siteId, _ref_queue = _ref.queue, queue = _ref_queue === void 0 ? [] : _ref_queue; var _G_Matomo; if (!url || !siteId) { return; } var G = global; if (typeof G === 'undefined' || ((_G_Matomo = G['Matomo']) === null || _G_Matomo === void 0 ? void 0 : _G_Matomo.initialized)) { return; } var _paq = G._paq = G._paq || queue; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push([ 'trackPageView' ]); _paq.push([ 'enableLinkTracking' ]); var u = url; _paq.push([ 'setTrackerUrl', u + 'matomo.php' ]); _paq.push([ 'setSiteId', siteId ]); return new Promise(function(resolve, reject) { var _parent$_parentNode; var doc = document; var ele$ = doc.createElement('script'); var parent$ = doc.getElementsByTagName('script')[0]; ele$.onload = function() { resolve(window.Matomo); }; ele$.onerror = reject; ele$.type = 'text/javascript'; ele$.async = true; ele$.defer = true; ele$.src = u + 'matomo.js'; (_parent$_parentNode = parent$.parentNode) === null || _parent$_parentNode === void 0 ? void 0 : _parent$_parentNode.insertBefore(ele$, parent$); }); } export var TrackerStore = createStore()(mutative(function(setState, getState, store) { var g = getGlobalThis(); var queue = []; var pending; return { init: function(param) { var baseUrl = param.baseUrl, siteId = param.siteId; pending || (pending = setupMatomo({ url: baseUrl, siteId: siteId })); }, tracker: createProxyTracker({ queue: queue, invoke: function(param) { var method = param.method, args = param.args; } }) }; })); function createProxyTracker(param) { var _param_queue = param.queue, queue = _param_queue === void 0 ? [] : _param_queue, invoke = param.invoke; return new Proxy({ _paq: queue }, { get: function get(target, prop) { switch(prop){ case '_paq': return target._paq; } return function() { for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){ args[_key] = arguments[_key]; } switch(prop){ case 'push': var _queue; (_queue = queue).push.apply(_queue, _to_consumable_array(args)); return; default: if (typeof prop !== 'string') { throw new Error("Invalid tracker method ".concat(String(prop))); } } var skip = false; if (invoke) { skip = (invoke === null || invoke === void 0 ? void 0 : invoke({ method: prop, args: args, queue: queue })) === true; } if (!skip) { queue.push([ prop ].concat(_to_consumable_array(args))); } // Limit queue size if (queue.length > 1000) { queue.splice(0, 1000 - queue.length); } }; } }); } export function getTracker() { return TrackerStore.getState().tracker; }