/* Jovian (c) 2020, License: MIT */ import { BehaviorSubject, Observable } from 'rxjs'; import { Class } from '../type-transform'; export class ConfigSource { private configData: T; private configBehaviorSubject: BehaviorSubject; private configObservable$: Observable; constructor(configClass: Class, configPartialData: Partial) { this.configData = new configClass(configPartialData); this.configBehaviorSubject = new BehaviorSubject(this.configData); } getConfigData() { return this.configData; } get config() { return this.configData; } get change$() { if (!this.configObservable$) { this.configObservable$ = this.configBehaviorSubject.asObservable(); } return this.configObservable$; } }