UNPKG

@orbit/core

Version:

Core library for Orbit - a flexible data access and synchronization layer.

52 lines 4.59 kB
/** * The `Notifier` class can emit messages to an array of subscribed listeners. * Here's a simple example: * * ```ts * import { Notifier } from '@orbit/core'; * * let notifier = new Notifier(); * notifier.addListener((message: string) => { * console.log("I heard " + message); * }); * notifier.addListener((message: string) => { * console.log("I also heard " + message); * }); * * notifier.emit('hello'); // logs "I heard hello" and "I also heard hello" * ``` * * Calls to `emit` will send along all of their arguments. */ export class Notifier { constructor() { this.listeners = []; } /** * Add a callback as a listener, which will be triggered when sending * notifications. */ addListener(listener) { this.listeners.push(listener); return () => this.removeListener(listener); } /** * Remove a listener so that it will no longer receive notifications. */ removeListener(listener) { const listeners = this.listeners; for (let i = 0, len = listeners.length; i < len; i++) { if (listeners[i] === listener) { listeners.splice(i, 1); return; } } } /** * Notify registered listeners. */ emit(...args) { this.listeners.slice(0).forEach((listener) => listener(...args)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90aWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUduQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsUUFBa0I7UUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxRQUFrQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRWpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUM3QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkIsT0FBTzthQUNSO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLENBQUMsR0FBRyxJQUFlO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBMaXN0ZW5lciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiAqICBUaGUgYE5vdGlmaWVyYCBjbGFzcyBjYW4gZW1pdCBtZXNzYWdlcyB0byBhbiBhcnJheSBvZiBzdWJzY3JpYmVkIGxpc3RlbmVycy5cbiAqIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBOb3RpZmllciB9IGZyb20gJ0BvcmJpdC9jb3JlJztcbiAqXG4gKiBsZXQgbm90aWZpZXIgPSBuZXcgTm90aWZpZXIoKTtcbiAqIG5vdGlmaWVyLmFkZExpc3RlbmVyKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAqICAgY29uc29sZS5sb2coXCJJIGhlYXJkIFwiICsgbWVzc2FnZSk7XG4gKiB9KTtcbiAqIG5vdGlmaWVyLmFkZExpc3RlbmVyKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAqICAgY29uc29sZS5sb2coXCJJIGFsc28gaGVhcmQgXCIgKyBtZXNzYWdlKTtcbiAqIH0pO1xuICpcbiAqIG5vdGlmaWVyLmVtaXQoJ2hlbGxvJyk7IC8vIGxvZ3MgXCJJIGhlYXJkIGhlbGxvXCIgYW5kIFwiSSBhbHNvIGhlYXJkIGhlbGxvXCJcbiAqIGBgYFxuICpcbiAqIENhbGxzIHRvIGBlbWl0YCB3aWxsIHNlbmQgYWxvbmcgYWxsIG9mIHRoZWlyIGFyZ3VtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdGlmaWVyIHtcbiAgcHVibGljIGxpc3RlbmVyczogTGlzdGVuZXJbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNhbGxiYWNrIGFzIGEgbGlzdGVuZXIsIHdoaWNoIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gc2VuZGluZ1xuICAgKiBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgYWRkTGlzdGVuZXIobGlzdGVuZXI6IExpc3RlbmVyKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbGlzdGVuZXIgc28gdGhhdCBpdCB3aWxsIG5vIGxvbmdlciByZWNlaXZlIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcjogTGlzdGVuZXIpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycztcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICAgKi9cbiAgZW1pdCguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycy5zbGljZSgwKS5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoLi4uYXJncykpO1xuICB9XG59XG4iXX0=