{"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":";;;;;;;AACA,IAAY,WAIX,CAAA;AAJD,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,WAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe,CAAA;AACf,IAAA,WAAA,CAAA,WAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAa,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;MCOY,gBAAgB,CAAA;AAI3B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;KAClC;IAED,YAAY,CAAC,SAAiB,EAAE,IAAU,EAAA;AACxC,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACxD;AAED,IAAA,SAAS,CAAC,SAAiB,EAAE,IAA2B,EAAE,KAA2B,EAAE,QAAqB,EAAA;AAC1G,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;;AAElC,QAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAExC,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KACpF;AAED;;;AAGG;AACH,IAAA,kBAAkB,CAAC,SAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;;AAElC,QAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAClE;IAED,0BAA0B,CAAC,IAAY,EAAE,YAAiB,EAAA;AACxD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;QAE7B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;;AAE7D,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG;YAClC,IAAI,EAAE,WAAW,CAAC,eAAe;AACjC,YAAA,GAAG,EAAE,IAAI,eAAe,CAAC,YAAY,CAAC;SACvC,CAAC;KACH;AAED,IAAA,wBAAwB,CAAC,IAAY,EAAE,UAAmB,EAAE,UAAmB,EAAE,SAAyB,EAAA;AACxG,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;QAE7B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;;AAE3D,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG;YAClC,IAAI,EAAE,WAAW,CAAC,aAAa;YAC/B,GAAG,EAAE,IAAI,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;SAC1D,CAAC;KACH;IAED,eAAe,CAAC,SAAiB,EAAE,IAAU,EAAA;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;KAChE;IAED,kBAAkB,CAAC,SAAiB,EAAE,IAAU,EAAA;AAC9C,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC9D;AAED,IAAA,aAAa,CAAC,SAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAA,MAAM,KAAK,CAAC,uBAAuB,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC,CAAC;KACrD;IAED,WAAW,GAAA;AACT,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,sBAAsB,EAAE;;YAEnD,IAAI,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACzD,gBAAA,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC,CAAC;AACrD,aAAA;AACF,SAAA;KACF;IAEO,WAAW,CAAC,SAAiB,EAAE,IAAA,GAAoB,WAAW,CAAC,OAAO,EAAE,IAAU,EAAA;AACxF,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvD;IAEO,cAAc,CAAC,SAAiB,EAAE,IAAoB,GAAA,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,KAAK,EAAA;QACvG,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACtD,QAAA,IAAI,YAAY,CAAC;AACjB,QAAA,IAAG,CAAC,MAAM,IAAI,cAAc,EAAE;YAAE,OAAO;AAAE,SAAA;QACzC,IAAG,CAAC,MAAM,EAAE;AACV,YAAA,YAAY,GAAG,CAAgC,6BAAA,EAAA,WAAW,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC7F,SAAA;AAAM,aAAA,IAAG,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;AAC9B,YAAA,YAAY,GAAG,CAAA,8BAAA,EAAiC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACjH,SAAA;AACD,QAAA,IAAG,cAAc,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YACzC,YAAY,GAAG,0EAA0E,CAAC;AAC3F,SAAA;AACD,QAAA,IAAG,YAAY,EAAE;YACf,MAAM,KAAK,CAAC,CAAU,OAAA,EAAA,SAAS,MAAM,YAAY,CAAA,CAAE,CAAC,CAAC;AACtD,SAAA;KACF;AAEO,IAAA,uBAAuB,CAAC,SAAiB,EAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;AACtD,QAAA,IAAG,MAAM,EAAE;YAAE,OAAO;AAAE,SAAA;AAEtB,QAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG;YACvC,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,GAAG,EAAE,IAAI,OAAO,EAAE;SACnB,CAAC;KACH;AAEO,IAAA,iBAAiB,CAAC,SAAiB,EAAA;QACzC,IAAG,CAAC,SAAS,EAAE;AACb,YAAA,MAAM,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACxC,SAAA;KACF;AAEO,IAAA,mCAAmC,CAAC,SAAiB,EAAA;QAC3D,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;KAC/C;+GA7HU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;MCHE,eAAe,CAAA;+GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHhB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;AAGX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAFf,SAAA,EAAA,CAAC,gBAAgB,CAAC,YADnB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAGX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,SAAS,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA,CAAA;;;ACPD;;AAEG;;;;"}