UNPKG

@orbit/core

Version:

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

56 lines 4.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Notifier = void 0; /** * 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. */ 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)); } } exports.Notifier = Notifier; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbm90aWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLFFBQVE7SUFHbkI7UUFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLFFBQWtCO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlCLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsUUFBa0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BELElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU87YUFDUjtTQUNGO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLEdBQUcsSUFBZTtRQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBckNELDRCQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIExpc3RlbmVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cbi8qKlxuICogIFRoZSBgTm90aWZpZXJgIGNsYXNzIGNhbiBlbWl0IG1lc3NhZ2VzIHRvIGFuIGFycmF5IG9mIHN1YnNjcmliZWQgbGlzdGVuZXJzLlxuICogSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGU6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IE5vdGlmaWVyIH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuICpcbiAqIGxldCBub3RpZmllciA9IG5ldyBOb3RpZmllcigpO1xuICogbm90aWZpZXIuYWRkTGlzdGVuZXIoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICogICBjb25zb2xlLmxvZyhcIkkgaGVhcmQgXCIgKyBtZXNzYWdlKTtcbiAqIH0pO1xuICogbm90aWZpZXIuYWRkTGlzdGVuZXIoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICogICBjb25zb2xlLmxvZyhcIkkgYWxzbyBoZWFyZCBcIiArIG1lc3NhZ2UpO1xuICogfSk7XG4gKlxuICogbm90aWZpZXIuZW1pdCgnaGVsbG8nKTsgLy8gbG9ncyBcIkkgaGVhcmQgaGVsbG9cIiBhbmQgXCJJIGFsc28gaGVhcmQgaGVsbG9cIlxuICogYGBgXG4gKlxuICogQ2FsbHMgdG8gYGVtaXRgIHdpbGwgc2VuZCBhbG9uZyBhbGwgb2YgdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgTm90aWZpZXIge1xuICBwdWJsaWMgbGlzdGVuZXJzOiBMaXN0ZW5lcltdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY2FsbGJhY2sgYXMgYSBsaXN0ZW5lciwgd2hpY2ggd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBzZW5kaW5nXG4gICAqIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBhZGRMaXN0ZW5lcihsaXN0ZW5lcjogTGlzdGVuZXIpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIHJldHVybiAoKSA9PiB0aGlzLnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBsaXN0ZW5lciBzbyB0aGF0IGl0IHdpbGwgbm8gbG9uZ2VyIHJlY2VpdmUgbm90aWZpY2F0aW9ucy5cbiAgICovXG4gIHJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyOiBMaXN0ZW5lcik6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGxpc3RlbmVyc1tpXSA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gICAqL1xuICBlbWl0KC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuZXJzLnNsaWNlKDApLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lciguLi5hcmdzKSk7XG4gIH1cbn1cbiJdfQ==