ngx-google-analytics
Version:
A simple ng-9 wrapper to load Google Analytics dependency by angular way
66 lines • 9.37 kB
JavaScript
import { APP_INITIALIZER, isDevMode } from '@angular/core';
import { NGX_GOOGLE_ANALYTICS_SETTINGS_TOKEN } from '../tokens/ngx-google-analytics-settings-token';
import { NGX_GTAG_FN } from '../tokens/ngx-gtag-token';
import { DOCUMENT } from '@angular/common';
/**
* Provide a DI Configuration to attach GA Initialization at Angular Startup Cycle.
*/
export const NGX_GOOGLE_ANALYTICS_INITIALIZER_PROVIDER = {
provide: APP_INITIALIZER,
multi: true,
useFactory: GoogleAnalyticsInitializer,
deps: [
NGX_GOOGLE_ANALYTICS_SETTINGS_TOKEN,
NGX_GTAG_FN,
DOCUMENT
]
};
/**
* Create a script element on DOM and link it to Google Analytics tracking code URI.
* After that, execute exactly same init process as tracking snippet code.
*/
export function GoogleAnalyticsInitializer(settings, gtag, document) {
return async () => {
if (!settings.trackingCode) {
if (!isDevMode()) {
console.error('Empty tracking code for Google Analytics. Make sure to provide one when initializing NgxGoogleAnalyticsModule.');
}
return;
}
if (!gtag) {
if (!isDevMode()) {
console.error('Was not possible create or read gtag() fn. Make sure this module is running on a Browser w/ access to Window interface.');
}
return;
}
if (!document) {
if (!isDevMode()) {
console.error('Was not possible to access Document interface. Make sure this module is running on a Browser w/ access do Document interface.');
}
}
// Set default ga.js uri
settings.uri = settings.uri || `https://www.googletagmanager.com/gtag/js?id=${settings.trackingCode}`;
// these commands should run first!
settings.initCommands = settings?.initCommands ?? [];
// assert config command
if (!settings.initCommands.find(x => x.command === 'config')) {
settings.initCommands.unshift({ command: 'config', values: [settings.trackingCode] });
}
// assert js command
if (!settings.initCommands.find(x => x.command === 'js')) {
settings.initCommands.unshift({ command: 'js', values: [new Date()] });
}
for (const command of settings.initCommands) {
gtag(command.command, ...command.values);
}
const s = document.createElement('script');
s.async = true;
s.src = settings.uri;
if (settings.nonce) {
s.setAttribute('nonce', settings.nonce);
}
const head = document.getElementsByTagName('head')[0];
head.appendChild(s);
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWFuYWx5dGljcy5pbml0aWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1nb29nbGUtYW5hbHl0aWNzL3NyYy9saWIvaW5pdGlhbGl6ZXJzL2dvb2dsZS1hbmFseXRpY3MuaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlDQUF5QyxHQUFhO0lBQ2pFLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLEtBQUssRUFBRSxJQUFJO0lBQ1gsVUFBVSxFQUFFLDBCQUEwQjtJQUN0QyxJQUFJLEVBQUU7UUFDSixtQ0FBbUM7UUFDbkMsV0FBVztRQUNYLFFBQVE7S0FDVDtDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFFBQWtDLEVBQ2xDLElBQVksRUFDWixRQUFrQjtJQUVsQixPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnSEFBZ0gsQ0FBQyxDQUFDO2FBQ2pJO1lBRUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5SEFBeUgsQ0FBQyxDQUFDO2FBQzFJO1lBRUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQywrSEFBK0gsQ0FBQyxDQUFDO2FBQ2hKO1NBQ0Y7UUFFRCx3QkFBd0I7UUFDeEIsUUFBUSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLCtDQUErQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEcsbUNBQW1DO1FBQ25DLFFBQVEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7UUFFckQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDNUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUUsRUFBRSxDQUFDLENBQUM7U0FDekY7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRTtZQUN4RCxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBRSxFQUFFLENBQUMsQ0FBQztTQUMxRTtRQUVELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtZQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQztRQUVELE1BQU0sQ0FBQyxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBRXJCLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtZQUNsQixDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekM7UUFFRCxNQUFNLElBQUksR0FBb0IsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyLCBBUFBfSU5JVElBTElaRVIsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdYX0dPT0dMRV9BTkFMWVRJQ1NfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuLi90b2tlbnMvbmd4LWdvb2dsZS1hbmFseXRpY3Mtc2V0dGluZ3MtdG9rZW4nO1xuaW1wb3J0IHsgSUdvb2dsZUFuYWx5dGljc1NldHRpbmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pLWdvb2dsZS1hbmFseXRpY3Mtc2V0dGluZ3MnO1xuaW1wb3J0IHsgTkdYX0dUQUdfRk4gfSBmcm9tICcuLi90b2tlbnMvbmd4LWd0YWctdG9rZW4nO1xuaW1wb3J0IHsgR3RhZ0ZuIH0gZnJvbSAnLi4vdHlwZXMvZ3RhZy50eXBlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBQcm92aWRlIGEgREkgQ29uZmlndXJhdGlvbiB0byBhdHRhY2ggR0EgSW5pdGlhbGl6YXRpb24gYXQgQW5ndWxhciBTdGFydHVwIEN5Y2xlLlxuICovXG5leHBvcnQgY29uc3QgTkdYX0dPT0dMRV9BTkFMWVRJQ1NfSU5JVElBTElaRVJfUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gIG11bHRpOiB0cnVlLFxuICB1c2VGYWN0b3J5OiBHb29nbGVBbmFseXRpY3NJbml0aWFsaXplcixcbiAgZGVwczogW1xuICAgIE5HWF9HT09HTEVfQU5BTFlUSUNTX1NFVFRJTkdTX1RPS0VOLFxuICAgIE5HWF9HVEFHX0ZOLFxuICAgIERPQ1VNRU5UXG4gIF1cbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgc2NyaXB0IGVsZW1lbnQgb24gRE9NIGFuZCBsaW5rIGl0IHRvIEdvb2dsZSBBbmFseXRpY3MgdHJhY2tpbmcgY29kZSBVUkkuXG4gKiBBZnRlciB0aGF0LCBleGVjdXRlIGV4YWN0bHkgc2FtZSBpbml0IHByb2Nlc3MgYXMgdHJhY2tpbmcgc25pcHBldCBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gR29vZ2xlQW5hbHl0aWNzSW5pdGlhbGl6ZXIoXG4gIHNldHRpbmdzOiBJR29vZ2xlQW5hbHl0aWNzU2V0dGluZ3MsXG4gIGd0YWc6IEd0YWdGbixcbiAgZG9jdW1lbnQ6IERvY3VtZW50XG4pIHtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNldHRpbmdzLnRyYWNraW5nQ29kZSkge1xuICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFbXB0eSB0cmFja2luZyBjb2RlIGZvciBHb29nbGUgQW5hbHl0aWNzLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBvbmUgd2hlbiBpbml0aWFsaXppbmcgTmd4R29vZ2xlQW5hbHl0aWNzTW9kdWxlLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFndGFnKSB7XG4gICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dhcyBub3QgcG9zc2libGUgY3JlYXRlIG9yIHJlYWQgZ3RhZygpIGZuLiBNYWtlIHN1cmUgdGhpcyBtb2R1bGUgaXMgcnVubmluZyBvbiBhIEJyb3dzZXIgdy8gYWNjZXNzIHRvIFdpbmRvdyBpbnRlcmZhY2UuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRvY3VtZW50KSB7XG4gICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dhcyBub3QgcG9zc2libGUgdG8gYWNjZXNzIERvY3VtZW50IGludGVyZmFjZS4gTWFrZSBzdXJlIHRoaXMgbW9kdWxlIGlzIHJ1bm5pbmcgb24gYSBCcm93c2VyIHcvIGFjY2VzcyBkbyBEb2N1bWVudCBpbnRlcmZhY2UuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGRlZmF1bHQgZ2EuanMgdXJpXG4gICAgc2V0dGluZ3MudXJpID0gc2V0dGluZ3MudXJpIHx8IGBodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndGFnL2pzP2lkPSR7c2V0dGluZ3MudHJhY2tpbmdDb2RlfWA7XG5cbiAgICAvLyB0aGVzZSBjb21tYW5kcyBzaG91bGQgcnVuIGZpcnN0IVxuICAgIHNldHRpbmdzLmluaXRDb21tYW5kcyA9IHNldHRpbmdzPy5pbml0Q29tbWFuZHMgPz8gW107XG5cbiAgICAvLyBhc3NlcnQgY29uZmlnIGNvbW1hbmRcbiAgICBpZiAoIXNldHRpbmdzLmluaXRDb21tYW5kcy5maW5kKHggPT4geC5jb21tYW5kID09PSAnY29uZmlnJykpIHtcbiAgICAgIHNldHRpbmdzLmluaXRDb21tYW5kcy51bnNoaWZ0KHsgY29tbWFuZDogJ2NvbmZpZycsIHZhbHVlczogWyBzZXR0aW5ncy50cmFja2luZ0NvZGUgXSB9KTtcbiAgICB9XG5cbiAgICAvLyBhc3NlcnQganMgY29tbWFuZFxuICAgIGlmICghc2V0dGluZ3MuaW5pdENvbW1hbmRzLmZpbmQoeCA9PiB4LmNvbW1hbmQgPT09ICdqcycpKSB7XG4gICAgICBzZXR0aW5ncy5pbml0Q29tbWFuZHMudW5zaGlmdCh7IGNvbW1hbmQ6ICdqcycsIHZhbHVlczogWyBuZXcgRGF0ZSgpIF0gfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb21tYW5kIG9mIHNldHRpbmdzLmluaXRDb21tYW5kcykge1xuICAgICAgZ3RhZyhjb21tYW5kLmNvbW1hbmQsIC4uLmNvbW1hbmQudmFsdWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzOiBIVE1MU2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHMuYXN5bmMgPSB0cnVlO1xuICAgIHMuc3JjID0gc2V0dGluZ3MudXJpO1xuXG4gICAgaWYgKHNldHRpbmdzLm5vbmNlKSB7XG4gICAgICBzLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBzZXR0aW5ncy5ub25jZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZDogSFRNTEhlYWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHMpO1xuICB9O1xufVxuIl19