pogojs
Version:
Library to accompany the Pogo stack
68 lines (53 loc) • 2.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.unsubscribe = exports.subscribe = exports.publish = undefined;
var _pogoState = require("./pogoState");
var _arrayContainsFunction = require("./utils/arrayContainsFunction");
var _arrayContainsFunction2 = _interopRequireDefault(_arrayContainsFunction);
var _arrayContainsString = require("./utils/arrayContainsString");
var _arrayContainsString2 = _interopRequireDefault(_arrayContainsString);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var subscribers = {};
var isAlreadySubscribed = function isAlreadySubscribed(stream, cb, callerId) {
return (0, _arrayContainsString2.default)(subscribers[stream].callers, callerId) && (0, _arrayContainsFunction2.default)(subscribers[stream].callbacks, cb);
};
function subscribe(streams, cb, callerId) {
var subs = streams.trim().split(/\s+/);
subs.map(function (stream) {
subscribers[stream] = subscribers[stream] || {
callbacks: [],
callers: []
};
// Prevent functions being subscribed multiple times
if (!isAlreadySubscribed(stream, cb, callerId)) {
subscribers[stream].callers.push(callerId);
subscribers[stream].callbacks.push(cb);
}
});
}
function unsubscribe(stream, cb) {
var subs = subscribers[stream].callers || [];
subs.map(function (s, i) {
if (subscribers[stream].callbacks[i] === cb) {
subscribers[stream].callbacks[i].splice(i, 1);
}
});
}
function publish() {
for (var _len = arguments.length, streams = Array(_len), _key = 0; _key < _len; _key++) {
streams[_key] = arguments[_key];
}
streams.map(function (stream) {
if (subscribers[stream]) {
var callbacks = subscribers[stream].callbacks || [];
callbacks.map(function (cb) {
cb(_pogoState.pogoState[stream] || {});
});
}
});
}
exports.publish = publish;
exports.subscribe = subscribe;
exports.unsubscribe = unsubscribe;