@piwikpro/ngx-piwik-pro
Version:
Piwik PRO tracking library for Angular apps.
49 lines • 8.08 kB
JavaScript
import { APP_BOOTSTRAP_LISTENER } from '@angular/core';
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,
]
};
export function PiwikProRouterInitializer(settings, titleService, pageViewsService) {
return async (c) => {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl3aWstcHJvLXJvdXRlci5pbml0aWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1waXdpay1wcm8vc3JjL2xpYi9pbml0aWFsaXplcnMvcGl3aWstcHJvLXJvdXRlci5pbml0aWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0seUNBQXlDLEdBQWE7SUFDakUsT0FBTyxFQUFFLHNCQUFzQjtJQUMvQixLQUFLLEVBQUUsSUFBSTtJQUNYLFVBQVUsRUFBRSx5QkFBeUI7SUFDckMsSUFBSSxFQUFFO1FBQ0osb0NBQW9DO1FBQ3BDLEtBQUs7UUFDTCxnQkFBZ0I7S0FDakI7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxRQUFpQyxFQUNqQyxZQUFtQixFQUNuQixnQkFBa0M7SUFFbEMsT0FBTyxLQUFLLEVBQUUsQ0FBb0IsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3pFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sSUFBSSxHQUFHLE1BQU07YUFDaEIsTUFBTTthQUNOLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFFdEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JCLDRHQUE0RztZQUM1RyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDckMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9ELENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDVCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUVWO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsVUFBVTtRQUNWLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELDZEQUE2RDtBQUM3RCxTQUFTLGtCQUFrQixDQUFDLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxZQUFZLE1BQU0sQ0FBQztRQUMvQyxDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0JPT1RTVFJBUF9MSVNURU5FUiwgQ29tcG9uZW50UmVmLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdYX1BJV0lLX1BST19ST1VUSU5HX1NFVFRJTkdTX1RPS0VOIH0gZnJvbSAnLi4vdG9rZW5zL25neC1waXdpay1wcm8tcm91dGVyLXNldHRpbmdzLnRva2VuJztcbmltcG9ydCB7IFBpd2lrUHJvUm91dGluZ1NldHRpbmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9waXdpay1wcm8tcm91dGVyLXNldHRpbmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyLCBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUGFnZVZpZXdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhZ2Utdmlld3MvcGFnZS12aWV3cy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IE5HWF9QSVdJS19QUk9fUk9VVEVSX0lOSVRJQUxJWkVSX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQVBQX0JPT1RTVFJBUF9MSVNURU5FUixcbiAgbXVsdGk6IHRydWUsXG4gIHVzZUZhY3Rvcnk6IFBpd2lrUHJvUm91dGVySW5pdGlhbGl6ZXIsXG4gIGRlcHM6IFtcbiAgICBOR1hfUElXSUtfUFJPX1JPVVRJTkdfU0VUVElOR1NfVE9LRU4sXG4gICAgVGl0bGUsXG4gICAgUGFnZVZpZXdzU2VydmljZSxcbiAgXVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFBpd2lrUHJvUm91dGVySW5pdGlhbGl6ZXIoXG4gIHNldHRpbmdzOiBQaXdpa1Byb1JvdXRpbmdTZXR0aW5ncyxcbiAgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcbiAgcGFnZVZpZXdzU2VydmljZTogUGFnZVZpZXdzU2VydmljZSxcbikge1xuICByZXR1cm4gYXN5bmMgKGM6IENvbXBvbmVudFJlZjxhbnk+KSA9PiB7XG4gICAgY29uc3Qgcm91dGVyID0gYy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICBjb25zdCB7IGluY2x1ZGUgPSBbXSwgZXhjbHVkZSA9IFtdLCBza2lwRmlyc3RQYWdlVmlldyB9ID0gc2V0dGluZ3MgPz8ge307XG4gICAgY29uc3QgaW5jbHVkZVJ1bGVzID0gbm9ybWFsaXplUGF0aFJ1bGVzKGluY2x1ZGUpO1xuICAgIGNvbnN0IGV4Y2x1ZGVSdWxlcyA9IG5vcm1hbGl6ZVBhdGhSdWxlcyhleGNsdWRlKTtcbiAgICBjb25zdCBzdWJzID0gcm91dGVyXG4gICAgICAuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogYW55KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuXG4gICAgICAgIHNraXBXaGlsZSgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICAvLyBQcmV2ZW50aW5nIGRvdWJsZSB2aWV3cyBvbiB0aGUgZmlyc3QgdHJpZ2dlciAoYmVjYXVzZSBQaXdpa1BybyBBbHJlYWR5IHNlbmQgb25lIHBpbmcgb24gc2V0dXAgYnkgZGVmYXVsdClcbiAgICAgICAgICBpZiAoc2tpcEZpcnN0UGFnZVZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGluY2x1ZGVSdWxlcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBpbmNsdWRlUnVsZXMuc29tZShydWxlID0+IHJ1bGUudGVzdChldmVudC51cmxBZnRlclJlZGlyZWN0cykpXG4gICAgICAgICAgOiB0cnVlKSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV4Y2x1ZGVSdWxlcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyAhZXhjbHVkZVJ1bGVzLnNvbWUocnVsZSA9PiBydWxlLnRlc3QoZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpKVxuICAgICAgICAgIDogdHJ1ZSksXG4gICAgICAgIC8vIGRlbGF5KDUwMDApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgcGFnZVZpZXdzU2VydmljZS50cmFja1BhZ2VWaWV3KCk7XG4gICAgICB9KTtcbiAgICAvLyBDbGVhbnVwXG4gICAgYy5vbkRlc3Ryb3koKCkgPT4gc3Vicy51bnN1YnNjcmliZSgpKTtcbiAgfTtcbn1cblxuLyoqIENvbnZlcnRzIGFsbCBwYXRoIHJ1bGVzIGZyb20gc3RyaW5nIHRvIFJlZ2V4IGluc3RhbmNlcyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aFJ1bGVzKHJ1bGVzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+KTogQXJyYXk8UmVnRXhwPiB7XG4gIHJldHVybiBydWxlcy5tYXAocnVsZSA9PiAocnVsZSBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICA/IHJ1bGVcbiAgICA6IG5ldyBSZWdFeHAoYF4ke3J1bGUucmVwbGFjZSgnKicsICcuKicpfSRgLCAnaScpKTtcbn1cbiJdfQ==