{"version":3,"file":"dill-pixel-plugin-google-analytics.mjs","sources":["../src/version.ts","../src/GoogleAnalyticsPlugin.ts"],"sourcesContent":["export const version = '6.2.3';","import type { IApplication, IPlugin } from 'dill-pixel';\nimport { isDev, Logger, omitKeys, Plugin } from 'dill-pixel';\nimport { version } from './version';\n\ntype ConfigParams = Gtag.ConfigParams & Gtag.ControlParams & Gtag.EventParams & Gtag.ConfigParams & Gtag.CustomParams;\n\nexport type GoogleAnalyticsPluginOptions = ConfigParams & {\n  trackingId?: string | string[];\n  dataLayerName?: string;\n  debug?: boolean;\n};\n\nexport type GAEvents = Record<string, unknown>;\n\nexport interface IGoogleAnalyticsPlugin<E extends GAEvents = GAEvents> extends IPlugin<GoogleAnalyticsPluginOptions> {\n  initialize(options: Partial<GoogleAnalyticsPluginOptions>, app: IApplication): void;\n  gtag(...args: any[]): void;\n  trackEvent<K extends keyof E>(eventName: K, eventData?: E[K]): void;\n}\n\nexport class GoogleAnalyticsPlugin<E extends GAEvents = GAEvents>\n  extends Plugin<GoogleAnalyticsPluginOptions>\n  implements IGoogleAnalyticsPlugin<E>\n{\n  private _options: GoogleAnalyticsPluginOptions;\n  private _dataLayer: { push: (args: any) => void };\n  private _queue: any[] = [];\n\n  async initialize(options: Partial<GoogleAnalyticsPluginOptions>, _app: IApplication) {\n    this._options = {\n      debug: isDev,\n      trackingId: _app.env.VITE_GOOGLE_ANALYTICS_TRACKING_ID || _app.env.GOOGLE_ANALYTICS_TRACKING_ID,\n      ...options,\n    };\n    this.hello();\n    this.install();\n\n    if (!this._options.trackingId) {\n      Logger.warn(\n        '[Dill Pixel Google Analytics Plugin] Google Analytics tracking ID is not set, please set `VITE_GOOGLE_ANALYTICS_TRACKING_ID` or `GOOGLE_ANALYTICS_TRACKING_ID` environment variable.',\n      );\n      return;\n    }\n  }\n\n  private hello() {\n    const hello = `%c Dill Pixel Google Analytics Plugin v${version}`;\n    console.log(hello, 'background: rgba(31, 41, 55, 1);color: #74b64c');\n\n    if (this._options.debug) {\n      Logger.log(this._options);\n    }\n  }\n\n  private initDataLayer() {\n    const windowAsAny = window as any;\n    const dlName = this._options.dataLayerName || 'dataLayer';\n    windowAsAny[dlName] = windowAsAny[dlName] || [];\n    this._dataLayer = windowAsAny[dlName];\n\n    this.drainQueue();\n  }\n\n  private drainQueue() {\n    while (this._queue.length > 0) {\n      const args = this._queue.shift();\n      this._dataLayer.push(args);\n    }\n  }\n\n  private install() {\n    if (!this._options.trackingId) {\n      return;\n    }\n\n    const scriptId = 'ga-gtag';\n\n    if (document.getElementById(scriptId)) return;\n\n    const { head } = document;\n    const script = document.createElement('script');\n    let src = `https://www.googletagmanager.com/gtag/js?id=${this._options.trackingId}`;\n    if (this._options.dataLayerName) src += `&l=${this._options.dataLayerName}`;\n    script.id = scriptId;\n    script.async = true;\n    script.src = src;\n    head.insertBefore(script, head.firstChild);\n\n    this.initDataLayer();\n\n    this.gtag('js', new Date());\n\n    if (!Array.isArray(this._options.trackingId)) {\n      this._options.trackingId = [this._options.trackingId];\n    }\n\n    this._options.trackingId.forEach((trackingId) => {\n      this.gtag('config', trackingId, omitKeys(['trackingId'], this._options));\n    });\n  }\n\n  public gtag(...args: any[]) {\n    if (isDev) {\n      Logger.log(`gtag(${JSON.stringify(args)})`);\n    }\n\n    if (!this._dataLayer) {\n      this._queue.push(args);\n      return;\n    }\n\n    this._dataLayer.push(args);\n  }\n\n  public trackEvent<K extends keyof E>(eventName: K, eventData?: E[K]) {\n    this.gtag('event', eventName as string, eventData || {});\n  }\n}\n"],"names":["version","GoogleAnalyticsPlugin","Plugin","options","_app","isDev","Logger","hello","windowAsAny","dlName","args","scriptId","head","script","src","trackingId","omitKeys","eventName","eventData"],"mappings":";AAAO,MAAMA,IAAU;ACoBhB,MAAMC,UACHC,EAEV;AAAA,EAHO,cAAA;AAAA,UAAA,GAAA,SAAA,GAML,KAAQ,SAAgB,CAAA;AAAA,EAAC;AAAA,EAEzB,MAAM,WAAWC,GAAgDC,GAAoB;AASnF,QARA,KAAK,WAAW;AAAA,MACd,OAAOC;AAAA,MACP,YAAYD,EAAK,IAAI,qCAAqCA,EAAK,IAAI;AAAA,MACnE,GAAGD;AAAA,IAAA,GAEL,KAAK,MAAA,GACL,KAAK,QAAA,GAED,CAAC,KAAK,SAAS,YAAY;AAC7B,MAAAG,EAAO;AAAA,QACL;AAAA,MAAA;AAEF;AAAA,IAAA;AAAA,EACF;AAAA,EAGM,QAAQ;AACd,UAAMC,IAAQ,0CAA0CP,CAAO;AAC/D,YAAQ,IAAIO,GAAO,gDAAgD,GAE/D,KAAK,SAAS,SAChBD,EAAO,IAAI,KAAK,QAAQ;AAAA,EAC1B;AAAA,EAGM,gBAAgB;AACtB,UAAME,IAAc,QACdC,IAAS,KAAK,SAAS,iBAAiB;AAC9C,IAAAD,EAAYC,CAAM,IAAID,EAAYC,CAAM,KAAK,CAAA,GAC7C,KAAK,aAAaD,EAAYC,CAAM,GAEpC,KAAK,WAAA;AAAA,EAAW;AAAA,EAGV,aAAa;AACnB,WAAO,KAAK,OAAO,SAAS,KAAG;AAC7B,YAAMC,IAAO,KAAK,OAAO,MAAA;AACzB,WAAK,WAAW,KAAKA,CAAI;AAAA,IAAA;AAAA,EAC3B;AAAA,EAGM,UAAU;AAChB,QAAI,CAAC,KAAK,SAAS;AACjB;AAGF,UAAMC,IAAW;AAEjB,QAAI,SAAS,eAAeA,CAAQ,EAAG;AAEvC,UAAM,EAAE,MAAAC,MAAS,UACXC,IAAS,SAAS,cAAc,QAAQ;AAC9C,QAAIC,IAAM,+CAA+C,KAAK,SAAS,UAAU;AACjF,IAAI,KAAK,SAAS,uBAAsB,MAAM,KAAK,SAAS,aAAa,KACzED,EAAO,KAAKF,GACZE,EAAO,QAAQ,IACfA,EAAO,MAAMC,GACbF,EAAK,aAAaC,GAAQD,EAAK,UAAU,GAEzC,KAAK,cAAA,GAEL,KAAK,KAAK,MAAM,oBAAI,KAAA,CAAM,GAErB,MAAM,QAAQ,KAAK,SAAS,UAAU,MACzC,KAAK,SAAS,aAAa,CAAC,KAAK,SAAS,UAAU,IAGtD,KAAK,SAAS,WAAW,QAAQ,CAACG,MAAe;AAC/C,WAAK,KAAK,UAAUA,GAAYC,EAAS,CAAC,YAAY,GAAG,KAAK,QAAQ,CAAC;AAAA,IAAA,CACxE;AAAA,EAAA;AAAA,EAGI,QAAQN,GAAa;AAK1B,QAJIL,KACFC,EAAO,IAAI,QAAQ,KAAK,UAAUI,CAAI,CAAC,GAAG,GAGxC,CAAC,KAAK,YAAY;AACpB,WAAK,OAAO,KAAKA,CAAI;AACrB;AAAA,IAAA;AAGF,SAAK,WAAW,KAAKA,CAAI;AAAA,EAAA;AAAA,EAGpB,WAA8BO,GAAcC,GAAkB;AACnE,SAAK,KAAK,SAASD,GAAqBC,KAAa,CAAA,CAAE;AAAA,EAAA;AAE3D;"}