ngx-hotjar
Version:
A simple ng wrapper to load hotjar dependency by angular way
60 lines • 7.95 kB
JavaScript
import { __awaiter } from "tslib";
import { APP_INITIALIZER, isDevMode } from '@angular/core';
import { NGX_HOTJAR_SETTINGS_TOKEN } from '../tokens/ngx-hotjar-settings.token';
import { DOCUMENT } from '@angular/common';
import { WINDOW } from '../tokens/window-token';
/**
* Provides a TOKEN to manually configure Hojtar tracking code by angular way.
*/
export const NGX_HOTJAR_INITIALIZER_PROVIDER = {
provide: APP_INITIALIZER,
multi: true,
useFactory: hotjarInitializer,
deps: [
NGX_HOTJAR_SETTINGS_TOKEN,
DOCUMENT,
WINDOW
]
};
/**
* Configuration Factory to create hotjar install script tag and attache on DOM at angular initialization.
*/
export function hotjarInitializer(settings, document, window) {
return () => __awaiter(this, void 0, void 0, function* () {
if (!settings.trackingCode) {
if (isDevMode()) {
console.error('Empty tracking code for Hotjar. Make sure to provide one when initializing NgxHotjarModule.');
}
return;
}
if (!document) {
if (isDevMode()) {
console.error('Was not possible to access `document` instance. Make shure this environment works on a Broser like API');
}
return;
}
if (!window) {
if (isDevMode()) {
console.error('Was not possible to access `window` api. Make sure this environment works like a browser.');
}
return;
}
Object.defineProperty(window, 'hj', {
value: (window.hj || function () {
(window.hj.q = window.hj.q || []).push(arguments);
}),
configurable: true,
writable: true
});
Object.defineProperty(window, '_hjSettings', {
value: { hjid: settings.trackingCode, hjsv: (settings.version || 6) },
configurable: true,
writable: true
});
const head = document.querySelector('head'), script = document.createElement('script'), uri = `https://static.hotjar.com/c/hotjar-${window._hjSettings.hjid}.js?sv=${window._hjSettings.hjsv}`;
script.async = true;
script.src = (settings.uri || uri);
head.appendChild(script);
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90amFyLmluaXRpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhvdGphci9zcmMvbGliL2luaXRpYWxpemVycy9ob3RqYXIuaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHaEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBYTtJQUN2RCxPQUFPLEVBQUUsZUFBZTtJQUN4QixLQUFLLEVBQUUsSUFBSTtJQUNYLFVBQVUsRUFBRSxpQkFBaUI7SUFDN0IsSUFBSSxFQUFFO1FBQ0oseUJBQXlCO1FBQ3pCLFFBQVE7UUFDUixNQUFNO0tBQ1A7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFFBQXlCLEVBQ3pCLFFBQWtCLEVBQ2xCLE1BQTRFO0lBRTVFLE9BQU8sR0FBUyxFQUFFO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1lBQzFCLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO2FBQzlHO1lBRUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3R0FBd0csQ0FBQyxDQUFDO2FBQ3pIO1lBRUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO2FBQzVHO1lBRUQsT0FBTztTQUNSO1FBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ2xDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUk7Z0JBQ25CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQztZQUNGLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FDbkIsTUFBTSxFQUNOLGFBQWEsRUFDYjtZQUNFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDckUsWUFBWSxFQUFFLElBQUk7WUFDbEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUNGLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUNyQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFDekMsR0FBRyxHQUFHLHNDQUFzQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTdHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFBLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBQcm92aWRlciwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSG90amFyU2V0dGluZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktaG90amFyLXNldHRpbmdzJztcbmltcG9ydCB7IE5HWF9IT1RKQVJfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuLi90b2tlbnMvbmd4LWhvdGphci1zZXR0aW5ncy50b2tlbic7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi90b2tlbnMvd2luZG93LXRva2VuJztcbmltcG9ydCB7IEhqRm4gfSBmcm9tICcuLi90eXBlcy9oaic7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBUT0tFTiB0byBtYW51YWxseSBjb25maWd1cmUgSG9qdGFyIHRyYWNraW5nIGNvZGUgYnkgYW5ndWxhciB3YXkuXG4gKi9cbmV4cG9ydCBjb25zdCBOR1hfSE9USkFSX0lOSVRJQUxJWkVSX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICBtdWx0aTogdHJ1ZSxcbiAgdXNlRmFjdG9yeTogaG90amFySW5pdGlhbGl6ZXIsXG4gIGRlcHM6IFtcbiAgICBOR1hfSE9USkFSX1NFVFRJTkdTX1RPS0VOLFxuICAgIERPQ1VNRU5ULFxuICAgIFdJTkRPV1xuICBdXG59O1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gRmFjdG9yeSB0byBjcmVhdGUgaG90amFyIGluc3RhbGwgc2NyaXB0IHRhZyBhbmQgYXR0YWNoZSBvbiBET00gYXQgYW5ndWxhciBpbml0aWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvdGphckluaXRpYWxpemVyKFxuICBzZXR0aW5nczogSUhvdGphclNldHRpbmdzLFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIHdpbmRvdzogV2luZG93ICYgeyBoaj86IEhqRm4sIF9oalNldHRpbmdzPzogeyBoamlkOiBzdHJpbmcsIGhqc3Y6IG51bWJlciB9IH1cbikge1xuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2V0dGluZ3MudHJhY2tpbmdDb2RlKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRW1wdHkgdHJhY2tpbmcgY29kZSBmb3IgSG90amFyLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBvbmUgd2hlbiBpbml0aWFsaXppbmcgTmd4SG90amFyTW9kdWxlLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkb2N1bWVudCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dhcyBub3QgcG9zc2libGUgdG8gYWNjZXNzIGBkb2N1bWVudGAgaW5zdGFuY2UuIE1ha2Ugc2h1cmUgdGhpcyBlbnZpcm9ubWVudCB3b3JrcyBvbiBhIEJyb3NlciBsaWtlIEFQSScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF3aW5kb3cpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdXYXMgbm90IHBvc3NpYmxlIHRvIGFjY2VzcyBgd2luZG93YCBhcGkuIE1ha2Ugc3VyZSB0aGlzIGVudmlyb25tZW50IHdvcmtzIGxpa2UgYSBicm93c2VyLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2hqJywgeyBcbiAgICAgIHZhbHVlOiAod2luZG93LmhqIHx8IGZ1bmN0aW9uKCkge1xuICAgICAgICAod2luZG93LmhqLnEgPSB3aW5kb3cuaGoucSB8fCBbXSkucHVzaChhcmd1bWVudHMpO1xuICAgICAgfSksXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgd2luZG93LFxuICAgICAgJ19oalNldHRpbmdzJyxcbiAgICAgIHsgXG4gICAgICAgIHZhbHVlOiB7IGhqaWQ6IHNldHRpbmdzLnRyYWNraW5nQ29kZSwgaGpzdjogKHNldHRpbmdzLnZlcnNpb24gfHwgNikgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLFxuICAgICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLFxuICAgICAgICAgIHVyaSA9IGBodHRwczovL3N0YXRpYy5ob3RqYXIuY29tL2MvaG90amFyLSR7d2luZG93Ll9oalNldHRpbmdzLmhqaWR9LmpzP3N2PSR7d2luZG93Ll9oalNldHRpbmdzLmhqc3Z9YDtcblxuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgc2NyaXB0LnNyYyA9IChzZXR0aW5ncy51cmkgfHwgdXJpKTtcblxuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfTtcbn1cbiJdfQ==