UNPKG

@elbwalker/destination-web-google-gtm

Version:

Google Tag Manager (GTM) web destination for walkerOS

1 lines 3.25 kB
{"version":3,"sources":["../src/types/index.ts","../src/index.ts"],"sourcesContent":["import type { Mapping } from '@elbwalker/types';\nimport type { DestinationWeb } from '@elbwalker/walker.js';\n\ndeclare global {\n interface Window {\n dataLayer: Array<unknown> | unknown;\n }\n}\n\nexport interface Destination\n extends DestinationWeb.Destination<Custom, CustomEvent> {}\n\nexport type Config = DestinationWeb.Config<Custom, CustomEvent>;\n\nexport interface Custom {\n containerId?: string; // GTM-XXXXXXX\n dataLayer?: string; // dataLayer\n domain?: string; // Source domain of the GTM\n}\n\nexport type EventConfig = Mapping.EventConfig<CustomEvent>;\n\nexport interface CustomEvent {}\n","import type { Custom, Destination } from './types';\nimport { isObject } from '@elbwalker/utils';\n\nconst defaultDataLayer = 'dataLayer';\nconst defaultDomain = 'https://www.googletagmanager.com/gtm.js?id=';\n\n// Types\nexport * as DestinationGoogleGTM from './types';\n\nexport const destinationGoogleGTM: Destination = {\n type: 'google-gtm',\n\n config: {},\n\n init(config = {}) {\n const w = window as unknown as Record<string, unknown[]>;\n const { custom = {} as Partial<Custom>, fn, loadScript } = config;\n const { containerId, dataLayer, domain } = custom;\n const dataLayerName = dataLayer || defaultDataLayer;\n\n w[dataLayerName] = w[dataLayerName] || [];\n\n const func = fn || w[dataLayerName].push;\n func({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js',\n });\n\n // Load the gtm script and container\n if (loadScript && containerId)\n addScript(containerId, domain || defaultDomain, dataLayerName);\n },\n\n push(event, config, mapping, options = {}) {\n const func = config.fn || (window.dataLayer as unknown[]).push;\n const { data } = options;\n const obj = { event: event.event }; // Use the name mapping by default\n\n func({\n ...obj,\n ...(isObject(data) ? data : event),\n });\n },\n};\n\nfunction addScript(containerId: string, src: string, dataLayerName: string) {\n const dl = dataLayerName != defaultDataLayer ? '&l=' + dataLayerName : '';\n const script = document.createElement('script');\n script.src = src + containerId + dl;\n document.head.appendChild(script);\n}\n\nexport default destinationGoogleGTM;\n"],"mappings":";;;;;;;;;AAAA;;;ACGA,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AAKf,IAAM,uBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,QAAQ,CAAC;AAAA,EAET,KAAK,SAAS,CAAC,GAAG;AAChB,UAAM,IAAI;AACV,UAAM,EAAE,SAAS,CAAC,GAAsB,IAAI,WAAW,IAAI;AAC3D,UAAM,EAAE,aAAa,WAAW,OAAO,IAAI;AAC3C,UAAM,gBAAgB,aAAa;AAEnC,MAAE,aAAa,IAAI,EAAE,aAAa,KAAK,CAAC;AAExC,UAAM,OAAO,MAAM,EAAE,aAAa,EAAE;AACpC,SAAK;AAAA,MACH,cAAa,oBAAI,KAAK,GAAE,QAAQ;AAAA,MAChC,OAAO;AAAA,IACT,CAAC;AAGD,QAAI,cAAc;AAChB,gBAAU,aAAa,UAAU,eAAe,aAAa;AAAA,EACjE;AAAA,EAEA,KAAK,OAAO,QAAQ,SAAS,UAAU,CAAC,GAAG;AACzC,UAAM,OAAO,OAAO,MAAO,OAAO,UAAwB;AAC1D,UAAM,EAAE,KAAK,IAAI;AACjB,UAAM,MAAM,EAAE,OAAO,MAAM,MAAM;AAEjC,SAAK;AAAA,MACH,GAAG;AAAA,MACH,GAAI,EAAS,IAAI,IAAI,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,UAAU,aAAqB,KAAa,eAAuB;AAC1E,QAAM,KAAK,iBAAiB,mBAAmB,QAAQ,gBAAgB;AACvE,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,SAAO,MAAM,MAAM,cAAc;AACjC,WAAS,KAAK,YAAY,MAAM;AAClC;AAEA,IAAO,gBAAQ;","names":[]}