UNPKG

publisher-subscriber-pattern

Version:

Publisher subscriber pattern that can be used with different event emitters including browser window

80 lines (56 loc) 2.66 kB
# About * Javascript implementation of publisher subscriber pattern * Can be used with various event emitters including browser's *window* object * Provides **Publisher** class # Installation ```javascript npm i publisher-subscriber-pattern ``` # Example The example uses the browser's *window* object as *emitterInstance*. Other valid emitter instances can be also used. ```javascript import { Publisher } from 'publisher-subscriber-pattern'; const publisher = new Publisher(window, 'addEventListener','removeEventListener'); ``` *Publisher's* *subscribe* method returns function, which can be used later to unsubscribe from the publisher's event. ```javascript const unsubscribe = publisher.subscribe('scroll', (event) => {}); // ...foo code... unsubscribe(); ``` There is also a method *unsubscribeAll* for unsubscribing all subscribers from all emitter's events. ```javascript publisher.unsubscribeAll(); ``` # API ## **Publisher** * Parameters: *emitterInstance*, *addListenerMethodName*, *removeListenerMethodName* * Methods: *subscribe*, *unsubscribeAll*, *eventSubscribersCount*, *subscribersCount* ### Parameters #### emitterInstance * Object, which exposes *addListener* and *removeListener* methods * Behind the scenes, the *emitterInstance* is bound to *addListener* and *removeListener* methods as *this* ([see Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)) #### addListenerMethodName, removeListenerMethodName * Names of methods (strings), which are exposed by *emitterInstance* and, which add and remove event listeners, respectively ### Methods #### subscribe * Required parameters: *eventName*, *eventCallback* * Optional parameter: *subscriberInstance*, which will be bound to the *eventCallback* argument as *this* ([see Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)) * Method subscribes *eventCallback* to *eventName*, so whenever event occurs the *eventCallback* is called * Returns function for unsubscribing from the event #### unsubscribeAll * Unsubscribes all publisher's *eventCallbacks* from all emitter's *eventNames* #### eventSubscriberCount * Required parameter: *eventName* * Returns number of subscribers' *eventCallbacks* subscribed to publisher's *eventName* #### subscribersCount * Returns number of subscriber's *eventCallbacks* subscribed to all publisher's *eventNames* # Dependencies ## Production dependencies * Package has no production dependencies ## Main development dependencies * Typescript * Jasmine, chai, sinon * Babel * Node (EventEmitter)