@piwikpro/ngx-piwik-pro
Version:
Piwik PRO tracking library for Angular apps.
54 lines • 8.68 kB
JavaScript
import { APP_BOOTSTRAP_LISTENER, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { NGX_PIWIK_PRO_ROUTING_SETTINGS_TOKEN } from '../tokens/ngx-piwik-pro-router-settings.token';
import { NavigationEnd, Router } from '@angular/router';
import { filter, skipWhile } from 'rxjs/operators';
import { Title } from '@angular/platform-browser';
import { PageViewsService } from '../services/page-views/page-views.service';
export const NGX_PIWIK_PRO_ROUTER_INITIALIZER_PROVIDER = {
provide: APP_BOOTSTRAP_LISTENER,
multi: true,
useFactory: PiwikProRouterInitializer,
deps: [
NGX_PIWIK_PRO_ROUTING_SETTINGS_TOKEN,
Title,
PageViewsService,
PLATFORM_ID,
]
};
export function PiwikProRouterInitializer(settings, titleService, pageViewsService, platformId) {
return async (c) => {
if (!isPlatformBrowser(platformId)) {
return;
}
const router = c.injector.get(Router);
const { include = [], exclude = [], skipFirstPageView } = settings ?? {};
const includeRules = normalizePathRules(include);
const excludeRules = normalizePathRules(exclude);
const subs = router
.events
.pipe(filter((event) => event instanceof NavigationEnd), skipWhile((_, index) => {
// Preventing double views on the first trigger (because PiwikPro Already send one ping on setup by default)
if (skipFirstPageView) {
return index === 0;
}
return false;
}), filter(event => includeRules.length > 0
? includeRules.some(rule => rule.test(event.urlAfterRedirects))
: true), filter(event => excludeRules.length > 0
? !excludeRules.some(rule => rule.test(event.urlAfterRedirects))
: true))
.subscribe(() => {
pageViewsService.trackPageView();
});
// Cleanup
c.onDestroy(() => subs.unsubscribe());
};
}
/** Converts all path rules from string to Regex instances */
function normalizePathRules(rules) {
return rules.map(rule => (rule instanceof RegExp)
? rule
: new RegExp(`^${rule.replace('*', '.*')}$`, 'i'));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl3aWstcHJvLXJvdXRlci5pbml0aWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1waXdpay1wcm8vc3JjL2xpYi9pbml0aWFsaXplcnMvcGl3aWstcHJvLXJvdXRlci5pbml0aWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQWdCLFdBQVcsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLHlDQUF5QyxHQUFhO0lBQ2pFLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0IsS0FBSyxFQUFFLElBQUk7SUFDWCxVQUFVLEVBQUUseUJBQXlCO0lBQ3JDLElBQUksRUFBRTtRQUNKLG9DQUFvQztRQUNwQyxLQUFLO1FBQ0wsZ0JBQWdCO1FBQ2hCLFdBQVc7S0FDWjtDQUNGLENBQUM7QUFFRixNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLFFBQWlDLEVBQ2pDLFlBQW1CLEVBQ25CLGdCQUFrQyxFQUNsQyxVQUFrQjtJQUVsQixPQUFPLEtBQUssRUFBRSxDQUFvQixFQUFFLEVBQUU7UUFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUN6RSxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBRyxNQUFNO2FBQ2hCLE1BQU07YUFDTixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLEVBRXRELFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyQiw0R0FBNEc7WUFDNUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixPQUFPLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FFVjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNMLFVBQVU7UUFDVixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCw2REFBNkQ7QUFDN0QsU0FBUyxrQkFBa0IsQ0FBQyxLQUE2QjtJQUN2RCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxNQUFNLENBQUM7UUFDL0MsQ0FBQyxDQUFDLElBQUk7UUFDTixDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9CT09UU1RSQVBfTElTVEVORVIsIENvbXBvbmVudFJlZiwgUExBVEZPUk1fSUQsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOR1hfUElXSUtfUFJPX1JPVVRJTkdfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuLi90b2tlbnMvbmd4LXBpd2lrLXByby1yb3V0ZXItc2V0dGluZ3MudG9rZW4nO1xuaW1wb3J0IHsgUGl3aWtQcm9Sb3V0aW5nU2V0dGluZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Bpd2lrLXByby1yb3V0ZXItc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBQYWdlVmlld3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFnZS12aWV3cy9wYWdlLXZpZXdzLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgTkdYX1BJV0lLX1BST19ST1VURVJfSU5JVElBTElaRVJfUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLFxuICBtdWx0aTogdHJ1ZSxcbiAgdXNlRmFjdG9yeTogUGl3aWtQcm9Sb3V0ZXJJbml0aWFsaXplcixcbiAgZGVwczogW1xuICAgIE5HWF9QSVdJS19QUk9fUk9VVElOR19TRVRUSU5HU19UT0tFTixcbiAgICBUaXRsZSxcbiAgICBQYWdlVmlld3NTZXJ2aWNlLFxuICAgIFBMQVRGT1JNX0lELFxuICBdXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gUGl3aWtQcm9Sb3V0ZXJJbml0aWFsaXplcihcbiAgc2V0dGluZ3M6IFBpd2lrUHJvUm91dGluZ1NldHRpbmdzLFxuICB0aXRsZVNlcnZpY2U6IFRpdGxlLFxuICBwYWdlVmlld3NTZXJ2aWNlOiBQYWdlVmlld3NTZXJ2aWNlLFxuICBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuIGFzeW5jIChjOiBDb21wb25lbnRSZWY8YW55PikgPT4ge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXIgPSBjLmluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIGNvbnN0IHsgaW5jbHVkZSA9IFtdLCBleGNsdWRlID0gW10sIHNraXBGaXJzdFBhZ2VWaWV3IH0gPSBzZXR0aW5ncyA/PyB7fTtcbiAgICBjb25zdCBpbmNsdWRlUnVsZXMgPSBub3JtYWxpemVQYXRoUnVsZXMoaW5jbHVkZSk7XG4gICAgY29uc3QgZXhjbHVkZVJ1bGVzID0gbm9ybWFsaXplUGF0aFJ1bGVzKGV4Y2x1ZGUpO1xuICAgIGNvbnN0IHN1YnMgPSByb3V0ZXJcbiAgICAgIC5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBhbnkpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG5cbiAgICAgICAgc2tpcFdoaWxlKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgIC8vIFByZXZlbnRpbmcgZG91YmxlIHZpZXdzIG9uIHRoZSBmaXJzdCB0cmlnZ2VyIChiZWNhdXNlIFBpd2lrUHJvIEFscmVhZHkgc2VuZCBvbmUgcGluZyBvbiBzZXR1cCBieSBkZWZhdWx0KVxuICAgICAgICAgIGlmIChza2lwRmlyc3RQYWdlVmlldykge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gaW5jbHVkZVJ1bGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGluY2x1ZGVSdWxlcy5zb21lKHJ1bGUgPT4gcnVsZS50ZXN0KGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKSlcbiAgICAgICAgICA6IHRydWUpLFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXhjbHVkZVJ1bGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICFleGNsdWRlUnVsZXMuc29tZShydWxlID0+IHJ1bGUudGVzdChldmVudC51cmxBZnRlclJlZGlyZWN0cykpXG4gICAgICAgICAgOiB0cnVlKSxcbiAgICAgICAgLy8gZGVsYXkoNTAwMClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBwYWdlVmlld3NTZXJ2aWNlLnRyYWNrUGFnZVZpZXcoKTtcbiAgICAgIH0pO1xuICAgIC8vIENsZWFudXBcbiAgICBjLm9uRGVzdHJveSgoKSA9PiBzdWJzLnVuc3Vic2NyaWJlKCkpO1xuICB9O1xufVxuXG4vKiogQ29udmVydHMgYWxsIHBhdGggcnVsZXMgZnJvbSBzdHJpbmcgdG8gUmVnZXggaW5zdGFuY2VzICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoUnVsZXMocnVsZXM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD4pOiBBcnJheTxSZWdFeHA+IHtcbiAgcmV0dXJuIHJ1bGVzLm1hcChydWxlID0+IChydWxlIGluc3RhbmNlb2YgUmVnRXhwKVxuICAgID8gcnVsZVxuICAgIDogbmV3IFJlZ0V4cChgXiR7cnVsZS5yZXBsYWNlKCcqJywgJy4qJyl9JGAsICdpJykpO1xufVxuIl19