UNPKG

@gauf/tracker

Version:

Browser tracker with perfect customization

48 lines (39 loc) 1.61 kB
import Emitter, { InterfaceEmitter, InterfaceEmitterConstructor, Listener } from "@gauf/tracker/emitter"; import MetricBehaviorEmitter from "@gauf/tracker/metrics/behavior"; import MetricNavigatorEmitter from "@gauf/tracker/metrics/navigator"; export type Settings = { emitters?: InterfaceEmitterConstructor[]; settings?: { [key: string]: object, }; }; export default class Collector { public emitters: InterfaceEmitter[]; constructor(listener: Listener, settings: Settings = {}) { this.emitters = settings.emitters ? this.createCustomEmitters(listener, settings) : this.createDefaultEmitters(listener, settings); } public activate() { this.emitters.forEach((emmiter) => emmiter.activate()); } public deactivate() { this.emitters.forEach((emmiter) => emmiter.deactivate()); } private extractSettings(settings: Settings, EmitterClass: any): object | undefined { return settings.settings ? settings.settings[(EmitterClass as typeof Emitter).key] : undefined; } private createCustomEmitters(listener: Listener, settings: Settings): InterfaceEmitter[] { return settings.emitters!.map((EmitterClass: InterfaceEmitterConstructor) => ( new EmitterClass(listener, this.extractSettings(settings, EmitterClass)) )); } private createDefaultEmitters(listener: Listener, settings: Settings): Emitter[] { return [ new MetricNavigatorEmitter(listener, this.extractSettings(settings, MetricNavigatorEmitter)), new MetricBehaviorEmitter(listener, this.extractSettings(settings, MetricBehaviorEmitter)), ]; } }