yavent
Version:
A flexible, lightweight event subscriber & emitter
70 lines (56 loc) • 1.53 kB
JavaScript
;
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