UNPKG

yavent

Version:

A flexible, lightweight event subscriber & emitter

70 lines (56 loc) 1.53 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); // Standalone events: // Named events: /** * Create a standalone event. * Returns a subscriber function and an emitter function. */ function makeEvent() { var callbacks = []; var callbacksLocked = false; // Clone the callback list if necessary, // so the changes will only apply on the next emit. function unlockCallbacks() { if (callbacksLocked) { callbacksLocked = false; callbacks = callbacks.slice(); } } var on = function on(callback) { unlockCallbacks(); callbacks.push(callback); var subscribed = true; return function unsubscribe() { if (subscribed) { subscribed = false; unlockCallbacks(); callbacks.splice(callbacks.indexOf(callback), 1); } }; }; var emit = function emit(payload) { callbacksLocked = true; var snapshot = callbacks; for (var i = 0; i < snapshot.length; ++i) { snapshot[i](payload); } callbacksLocked = false; }; return [on, emit]; } function makeEvents() { var events = {}; var on = function on(name, callback) { var event = events[name]; if (event == null) event = events[name] = makeEvent(); return event[0](callback); }; var emit = function emit(name, payload) { var event = events[name]; if (event != null) event[1](payload); }; return [on, emit]; } exports.makeEvent = makeEvent; exports.makeEvents = makeEvents; //# sourceMappingURL=index.js.map