@betterlytics/tracker
Version:
Privacy-focused, cookieless analytics for your website
1 lines • 3.7 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export interface BetterlyticsConfig {\n /** Custom tracking server URL (defaults to https://betterlytics.io/track) */\n serverUrl?: string;\n /** Custom analytics script URL (defaults to https://betterlytics.io/analytics.js) */\n scriptUrl?: string;\n /** Array of URL patterns to normalize (e.g., ['/users/*', '/products/*']) */\n dynamicUrls?: string[];\n /** Debug */\n debug?: boolean;\n}\n\ntype InitFunction = (siteId: string, options?: BetterlyticsConfig) => void;\ntype TrackingFunction = (eventName: string, eventProps?: object) => void;\n\nexport type Betterlytics = {\n init: InitFunction;\n event: TrackingFunction;\n};\n\ndeclare global {\n interface Window {\n betterlytics?: {\n event: TrackingFunction;\n\n // Preinitalized events\n q?: IArguments[];\n };\n }\n}\n\nfunction isInitialized() {\n return Boolean(document.querySelector('script[src*=\"analytics.js\"]'));\n}\n\nfunction setupPreinitalizedQueue() {\n if (!window.betterlytics || !window.betterlytics.q) {\n window.betterlytics = {\n q: window.betterlytics?.q || [],\n event: function () {\n window.betterlytics!.q!.push(arguments);\n },\n };\n }\n}\n\nfunction init(siteId: string, options: BetterlyticsConfig = {}) {\n if (!siteId) {\n throw new Error(\"Betterlytics: siteId is required\");\n }\n\n // Check if script is already loaded\n if (isInitialized()) {\n if (options.debug) {\n console.warn(\"Betterlytics: Already initialized\");\n }\n return;\n }\n\n const config = {\n siteId: siteId,\n serverUrl: options.serverUrl || \"https://betterlytics.io/track\",\n scriptUrl: options.scriptUrl || \"https://betterlytics.io/analytics.js\",\n dynamicUrls: options.dynamicUrls || [],\n };\n\n // Preload event tracking\n setupPreinitalizedQueue();\n\n // Create and inject the analytics.js script\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = config.scriptUrl;\n script.setAttribute(\"data-site-id\", config.siteId);\n script.setAttribute(\"data-server-url\", config.serverUrl);\n script.setAttribute(\"data-dynamic-urls\", config.dynamicUrls.join(\",\"));\n document.head.appendChild(script);\n}\n\nfunction event(eventName: string, eventProps?: object) {\n if (!isInitialized()) {\n setupPreinitalizedQueue();\n }\n window.betterlytics?.event(eventName, eventProps);\n}\n\nexport default {\n init,\n event,\n} as Betterlytics;\n"],"mappings":"4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA8BA,SAASI,GAAgB,CACvB,MAAO,EAAQ,SAAS,cAAc,6BAA6B,CACrE,CAEA,SAASC,GAA0B,CAlCnC,IAAAC,GAmCM,CAAC,OAAO,cAAgB,CAAC,OAAO,aAAa,KAC/C,OAAO,aAAe,CACpB,IAAGA,EAAA,OAAO,eAAP,YAAAA,EAAqB,IAAK,CAAC,EAC9B,MAAO,UAAY,CACjB,OAAO,aAAc,EAAG,KAAK,SAAS,CACxC,CACF,EAEJ,CAEA,SAASC,EAAKC,EAAgBC,EAA8B,CAAC,EAAG,CAC9D,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,kCAAkC,EAIpD,GAAIJ,EAAc,EAAG,CACfK,EAAQ,OACV,QAAQ,KAAK,mCAAmC,EAElD,MACF,CAEA,IAAMC,EAAS,CACb,OAAQF,EACR,UAAWC,EAAQ,WAAa,gCAChC,UAAWA,EAAQ,WAAa,uCAChC,YAAaA,EAAQ,aAAe,CAAC,CACvC,EAGAJ,EAAwB,EAGxB,IAAMM,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQ,GACfA,EAAO,IAAMD,EAAO,UACpBC,EAAO,aAAa,eAAgBD,EAAO,MAAM,EACjDC,EAAO,aAAa,kBAAmBD,EAAO,SAAS,EACvDC,EAAO,aAAa,oBAAqBD,EAAO,YAAY,KAAK,GAAG,CAAC,EACrE,SAAS,KAAK,YAAYC,CAAM,CAClC,CAEA,SAASC,EAAMC,EAAmBC,EAAqB,CA9EvD,IAAAR,EA+EOF,EAAc,GACjBC,EAAwB,GAE1BC,EAAA,OAAO,eAAP,MAAAA,EAAqB,MAAMO,EAAWC,EACxC,CAEA,IAAOZ,EAAQ,CACb,KAAAK,EACA,MAAAK,CACF","names":["index_exports","__export","index_default","__toCommonJS","isInitialized","setupPreinitalizedQueue","_a","init","siteId","options","config","script","event","eventName","eventProps"]}