@pscoped/ngx-pub-sub
Version:
Event publish - subscribe mechanism as Angular service using Observable. You can publish your event along with any data to all the subscribers of your event. This library also supports historical published values for the subscribers.
1 lines • 10.9 kB
Source Map (JSON)
{"version":3,"file":"pscoped-ngx-pub-sub.mjs","sources":["../../../libs/ngx-pub-sub/src/lib/types/subject-type.enum.ts","../../../libs/ngx-pub-sub/src/lib/services/ngx-pub-sub.service.ts","../../../libs/ngx-pub-sub/src/lib/ngx-pub-sub.module.ts","../../../libs/ngx-pub-sub/src/pscoped-ngx-pub-sub.ts"],"sourcesContent":["\r\nexport enum SubjectType {\r\n Subject,\r\n BehaviorSubject,\r\n ReplaySubject\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Observable } from 'rxjs/internal/Observable';\r\nimport { ReplaySubject } from 'rxjs/internal/ReplaySubject';\r\nimport { Subject } from 'rxjs/internal/Subject';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\nimport { SchedulerLike } from 'rxjs/internal/types';\r\n\r\nimport { IHash } from '../types/i-hash';\r\nimport { SubjectType } from '../types/subject-type.enum';\r\n\r\n@Injectable()\r\nexport class NgxPubSubService implements OnDestroy {\r\n\r\n private eventObservableMapping: IHash;\r\n\r\n constructor() {\r\n this.eventObservableMapping = {};\r\n }\r\n \r\n publishEvent(eventName: string, data?: any) {\r\n this.validateEventName(eventName);\r\n this.createSubjectIfNotExist(eventName);\r\n\r\n this.publishNext(eventName, SubjectType.Subject, data);\r\n }\r\n \r\n subscribe(eventName: string, next?: (value: any) => void, error?: (error: any) => any, complete?: () => void): Subscription {\r\n this.validateEventName(eventName);\r\n // subject will be created if the provided eventName is not registered\r\n this.createSubjectIfNotExist(eventName);\r\n\r\n return this.eventObservableMapping[eventName].ref.subscribe(next, error, complete);\r\n }\r\n\r\n /**\r\n * Use this method to get the Observable associated with the event.\r\n * Useful when you would like to apply additional rxjs operators like debounceTime\r\n */\r\n getEventObservable(eventName: string): Observable<any> {\r\n this.validateEventName(eventName);\r\n // subject will be created if the provided eventName is not registered\r\n this.createSubjectIfNotExist(eventName);\r\n \r\n return this.eventObservableMapping[eventName].ref.asObservable();\r\n }\r\n\r\n registerEventWithLastValue(name: string, defaultValue: any) {\r\n this.validateEventName(name);\r\n // type and name check\r\n this.checkEventType(name, SubjectType.BehaviorSubject, true);\r\n // create one\r\n this.eventObservableMapping[name] = {\r\n type: SubjectType.BehaviorSubject,\r\n ref: new BehaviorSubject(defaultValue)\r\n };\r\n }\r\n\r\n registerEventWithHistory(name: string, bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike) {\r\n this.validateEventName(name);\r\n // type and name check\r\n this.checkEventType(name, SubjectType.ReplaySubject, true);\r\n // create one\r\n this.eventObservableMapping[name] = {\r\n type: SubjectType.ReplaySubject,\r\n ref: new ReplaySubject(bufferSize, windowTime, scheduler)\r\n };\r\n }\r\n\r\n publishWithLast(eventName: string, data?: any) {\r\n this.validateEventName(eventName);\r\n this.publishNext(eventName, SubjectType.BehaviorSubject, data);\r\n }\r\n\r\n publishWithHistory(eventName: string, data?: any) {\r\n this.validateEventName(eventName);\r\n this.publishNext(eventName, SubjectType.ReplaySubject, data);\r\n }\r\n \r\n completeEvent(eventName: string) {\r\n this.validateEventName(eventName);\r\n if (!this.eventObservableMapping[eventName]) {\r\n throw Error('Event not created yet');\r\n }\r\n this.completeObservableAndDestroyMapping(eventName);\r\n }\r\n\r\n ngOnDestroy() {\r\n for (const eventName in this.eventObservableMapping) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (this.eventObservableMapping.hasOwnProperty(eventName)) {\r\n this.completeObservableAndDestroyMapping(eventName);\r\n }\r\n }\r\n }\r\n \r\n private publishNext(eventName: string, type: SubjectType = SubjectType.Subject, data?: any) {\r\n this.checkEventType(eventName, type);\r\n this.eventObservableMapping[eventName].ref.next(data);\r\n }\r\n\r\n private checkEventType(eventName: string, type: SubjectType = SubjectType.Subject, shouldNotExist = false) {\r\n const object = this.eventObservableMapping[eventName];\r\n let errorMessage;\r\n if(!object && shouldNotExist) { return; }\r\n if(!object) {\r\n errorMessage = `Event doesn't exist of type: ${SubjectType[type]} or it has been completed`;\r\n } else if(object.type !== type) {\r\n errorMessage = `Event exists with other type: ${SubjectType[object.type]}. Expected type: ${SubjectType[type]}`;\r\n }\r\n if(shouldNotExist && object.type === type) {\r\n errorMessage = `Event already registerd with the same type. Don't register a second time`;\r\n }\r\n if(errorMessage) {\r\n throw Error(`Error (${eventName}): ${errorMessage}`);\r\n }\r\n }\r\n\r\n private createSubjectIfNotExist(eventName: string) {\r\n const object = this.eventObservableMapping[eventName];\r\n if(object) { return; }\r\n \r\n this.eventObservableMapping[eventName] = {\r\n type: SubjectType.Subject,\r\n ref: new Subject()\r\n };\r\n }\r\n\r\n private validateEventName(eventName: string) {\r\n if(!eventName) {\r\n throw Error('Event name not provided');\r\n }\r\n }\r\n\r\n private completeObservableAndDestroyMapping(eventName: string) {\r\n this.eventObservableMapping[eventName].ref.complete();\r\n delete this.eventObservableMapping[eventName];\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxPubSubService } from './services/ngx-pub-sub.service';\n\n@NgModule({\n imports: [CommonModule],\n providers: [NgxPubSubService]\n})\nexport class NgxPubSubModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}