angular7-pubsub
Version:
Pub/Sub service for Angular (7-17)
51 lines • 10.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import * as i0 from "@angular/core";
const ServiceName = 'PubSub Service';
export class PubSubService {
events = {};
constructor() { }
/**
* a void function when we don't want to use the subscription from 'RxJs';
* @param {event} event - the specific name to subscribe on - the names must be specific to those we publish.
* @param {(value: any) => void} callback - callback function
* @param {(error: any) => void} error - exception catch function
* @param {() => void} complete - complete function
*/
$sub(event, callback, error, complete) {
if (!event) {
throw new Error(`[${ServiceName}] => Subscription method must get event name.`);
}
if (this.events[event] === undefined) {
this.events[event] = new ReplaySubject();
}
if (typeof callback !== 'function') {
return this.events[event].asObservable();
}
else {
return this.events[event]
.asObservable()
.subscribe(callback, error, complete);
}
}
/**
* Base Module needed to use PubSubService.
* @param {event} event - the specific name to subscribe on
* @param {eventObject} eventObject - the optional paramter to send when raising the event
*/
$pub(event, eventObject) {
if (!event) {
throw new Error(`[${ServiceName}] => Publish method must get event name.`);
}
else if (!this.events[event]) {
return;
}
this.events[event].next(eventObject);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PubSubService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PubSubService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PubSubService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhcjctcHVic3ViLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW5ndWxhcjctcHVic3ViLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQzs7QUFFL0QsTUFBTSxXQUFXLEdBQVcsZ0JBQWdCLENBQUM7QUFHN0MsTUFBTSxPQUFPLGFBQWE7SUFDaEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVwQixnQkFBZSxDQUFDO0lBb0RoQjs7Ozs7O09BTUc7SUFDSSxJQUFJLENBQUMsS0FBYSxFQUFDLFFBQStCLEVBQUMsS0FBNEIsRUFBQyxRQUFxQjtRQUUxRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FDYixJQUFJLFdBQVcsK0NBQStDLENBQy9ELENBQUM7U0FDSDtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLGFBQWEsRUFBTyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzFDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUN0QixZQUFZLEVBQUU7aUJBQ2QsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLElBQUksQ0FBQyxLQUFhLEVBQUUsV0FBaUI7UUFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQ2IsSUFBSSxXQUFXLDBDQUEwQyxDQUMxRCxDQUFDO1NBQ0g7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQWxHVSxhQUFhOzRHQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuY29uc3QgU2VydmljZU5hbWU6IHN0cmluZyA9ICdQdWJTdWIgU2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQdWJTdWJTZXJ2aWNlIGltcGxlbWVudHMgSVB1YlN1YlNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50cyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogYSBzdWJzY3JpcHRpb24gd2hpY2ggcmV0dXJucyBldmVyeXRoaW5nIGFzIGFuIG9ic2VydmFibGUgZnJvbSBAc2VlIHtSeEpzfVxuICAgKiB0aGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgZXZlbnRPYmplY3RcbiAgICogQHBhcmFtIHtldmVudH0gZXZlbnQgLSB0aGUgc3BlY2lmaWMgbmFtZSB0byBzdWJzY3JpYmUgb24gLSB0aGUgbmFtZXMgbXVzdCBiZSBzcGVjaWZpYyB0byB0aG9zZSB3ZSBwdWJsaXNoLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxhbnk+fSBhbiBvYnNlcnZhYmxlLlxuICAgKiBAc3VtbWFyeSByZW1lbWJlciB0byB1bnN1YnNjcmliZSBpbiBvbkRlc3Ryb3kgb2YgdGhlIGNvbXBvbmVudHNcbiAgICovXG4gIHB1YmxpYyAkc3ViKGV2ZW50OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqIGEgc3Vic2NyaXB0aW9uIHdoaWNoIHJldHVybnMgdGhlIGNhbGxiYWNrLCBlcnJvciBhbmQgY29tcGxldGUgYXMgYSBzdWJzY3JpcHRpb24gZnJvbSBAc2VlIHtSeEpzfVxuICAgKiB0aGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgZXZlbnRPYmplY3RcbiAgICogQHBhcmFtIHtldmVudH0gZXZlbnQgLSB0aGUgc3BlY2lmaWMgbmFtZSB0byBzdWJzY3JpYmUgb24gLSB0aGUgbmFtZXMgbXVzdCBiZSBzcGVjaWZpYyB0byB0aG9zZSB3ZSBwdWJsaXNoLlxuICAgKiBAcGFyYW0geyh2YWx1ZTogYW55KSA9PiB2b2lkfSBjYWxsYmFjayAtIGNhbGxiYWNrIG1ldGhvZCB3aGljaCBnZXRzIHRoZSB2YWx1ZSBmcm9tIGV2ZW50T2JqZWN0LlxuICAgKiBAcmV0dXJucyB7U3Vic2NyaXB0aW9ufSBhIHN1YnNjcmlwdGlvbiB3aGljaCB3ZSBjYW4gbGlzdGVuIHRvLlxuICAgKiBAc3VtbWFyeSByZW1lbWJlciB0byB1bnN1YnNjcmliZSBpbiBvbkRlc3Ryb3kgb2YgdGhlIGNvbXBvbmVudHNcbiAgICovXG4gIHB1YmxpYyAkc3ViKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogYSBzdWJzY3JpcHRpb24gd2hpY2ggcmV0dXJucyB0aGUgY2FsbGJhY2ssIGVycm9yIGFuZCBjb21wbGV0ZSBhcyBhIHN1YnNjcmlwdGlvbiBmcm9tIEBzZWUge1J4SnN9XG4gICAqIHRoaXMgbWV0aG9kIGRvZXMgbm90IHVzZSBldmVudE9iamVjdFxuICAgKiBAcGFyYW0ge2V2ZW50fSBldmVudCAtIHRoZSBzcGVjaWZpYyBuYW1lIHRvIHN1YnNjcmliZSBvbiAtIHRoZSBuYW1lcyBtdXN0IGJlIHNwZWNpZmljIHRvIHRob3NlIHdlIHB1Ymxpc2guXG4gICAqIEBwYXJhbSB7KGVycm9yOiBhbnkpID0+IHZvaWR9IGVycm9yIC0gZXhjZXB0aW9uIGNhdGNoIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY29tcGxldGUgLSBjb21wbGV0ZSBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7U3Vic2NyaXB0aW9ufSBhIHN1YnNjcmlwdGlvbiB3aGljaCB3ZSBjYW4gbGlzdGVuIHRvLlxuICAgKiBAc3VtbWFyeSByZW1lbWJlciB0byB1bnN1YnNjcmliZSBpbiBvbkRlc3Ryb3kgb2YgdGhlIGNvbXBvbmVudHNcbiAgICovXG4gIHB1YmxpYyAkc3ViKFxuICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogYW55KSA9PiB2b2lkLFxuICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIGEgc3Vic2NyaXB0aW9uIHdoaWNoIHJldHVybnMgdGhlIGNhbGxiYWNrLCBlcnJvciBhbmQgY29tcGxldGUgYXMgYSBzdWJzY3JpcHRpb24gZnJvbSBAc2VlIHtSeEpzfVxuICAgKiBAcGFyYW0ge2V2ZW50fSBldmVudCAtIHRoZSBzcGVjaWZpYyBuYW1lIHRvIHN1YnNjcmliZSBvbiAtIHRoZSBuYW1lcyBtdXN0IGJlIHNwZWNpZmljIHRvIHRob3NlIHdlIHB1Ymxpc2guXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBhbnkpID0+IHZvaWR9IGNhbGxiYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogQHBhcmFtIHsoZXJyb3I6IGFueSkgPT4gdm9pZH0gZXJyb3IgLSBleGNlcHRpb24gY2F0Y2ggZnVuY3Rpb25cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjb21wbGV0ZSAtIGNvbXBsZXRlIGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIHtTdWJzY3JpcHRpb259IGEgc3Vic2NyaXB0aW9uIHdoaWNoIHdlIGNhbiBsaXN0ZW4gdG8uXG4gICAqIEBzdW1tYXJ5IHJlbWVtYmVyIHRvIHVuc3Vic2NyaWJlIGluIG9uRGVzdHJveSBvZiB0aGUgY29tcG9uZW50c1xuICAgKi9cbiAgcHVibGljICRzdWIoXG4gICAgZXZlbnQ6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB2b2lkLFxuICAgIGNvbXBsZXRlOiAoKSA9PiB2b2lkXG4gICk6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogYSB2b2lkIGZ1bmN0aW9uIHdoZW4gd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHN1YnNjcmlwdGlvbiBmcm9tICdSeEpzJztcbiAgICogQHBhcmFtIHtldmVudH0gZXZlbnQgLSB0aGUgc3BlY2lmaWMgbmFtZSB0byBzdWJzY3JpYmUgb24gLSB0aGUgbmFtZXMgbXVzdCBiZSBzcGVjaWZpYyB0byB0aG9zZSB3ZSBwdWJsaXNoLlxuICAgKiBAcGFyYW0geyh2YWx1ZTogYW55KSA9PiB2b2lkfSBjYWxsYmFjayAtIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7KGVycm9yOiBhbnkpID0+IHZvaWR9IGVycm9yIC0gZXhjZXB0aW9uIGNhdGNoIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY29tcGxldGUgLSBjb21wbGV0ZSBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljICRzdWIoZXZlbnQ6IHN0cmluZyxjYWxsYmFjaz86ICh2YWx1ZTogYW55KSA9PiB2b2lkLGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsY29tcGxldGU/OiAoKSA9PiB2b2lkXG4gICkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFske1NlcnZpY2VOYW1lfV0gPT4gU3Vic2NyaXB0aW9uIG1ldGhvZCBtdXN0IGdldCBldmVudCBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXZlbnRzW2V2ZW50XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSBuZXcgUmVwbGF5U3ViamVjdDxhbnk+KCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzW2V2ZW50XS5hc09ic2VydmFibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzW2V2ZW50XVxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnN1YnNjcmliZShjYWxsYmFjaywgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmFzZSBNb2R1bGUgbmVlZGVkIHRvIHVzZSBQdWJTdWJTZXJ2aWNlLlxuICAgKiBAcGFyYW0ge2V2ZW50fSBldmVudCAtIHRoZSBzcGVjaWZpYyBuYW1lIHRvIHN1YnNjcmliZSBvblxuICAgKiBAcGFyYW0ge2V2ZW50T2JqZWN0fSBldmVudE9iamVjdCAtIHRoZSBvcHRpb25hbCBwYXJhbXRlciB0byBzZW5kIHdoZW4gcmFpc2luZyB0aGUgZXZlbnRcbiAgICovXG4gIHB1YmxpYyAkcHViKGV2ZW50OiBzdHJpbmcsIGV2ZW50T2JqZWN0PzogYW55KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWyR7U2VydmljZU5hbWV9XSA9PiBQdWJsaXNoIG1ldGhvZCBtdXN0IGdldCBldmVudCBuYW1lLmBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5ldmVudHNbZXZlbnRdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudHNbZXZlbnRdLm5leHQoZXZlbnRPYmplY3QpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVB1YlN1YlNlcnZpY2Uge1xuICAkcHViKGV2ZW50OiBzdHJpbmcsIGV2ZW50T2JqZWN0PzogYW55KTogdm9pZDtcbiAgJHN1YihldmVudDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+O1xuICAkc3ViKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IFN1YnNjcmlwdGlvbjtcbiAgJHN1YihcbiAgICBldmVudDogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gdm9pZCxcbiAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogU3Vic2NyaXB0aW9uO1xuICAkc3ViKFxuICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogYW55KSA9PiB2b2lkLFxuICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcbiAgICBjb21wbGV0ZTogKCkgPT4gdm9pZFxuICApOiBTdWJzY3JpcHRpb247XG59XG5cbmludGVyZmFjZSBJJHN1YiB7XG4gIChldmVudDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+O1xuICAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogU3Vic2NyaXB0aW9uO1xuICAoXG4gICAgZXZlbnQ6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFN1YnNjcmlwdGlvbjtcbiAgKFxuICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogYW55KSA9PiB2b2lkLFxuICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcbiAgICBjb21wbGV0ZTogKCkgPT4gdm9pZFxuICApOiBTdWJzY3JpcHRpb247XG59XG4iXX0=