UNPKG

pogojs

Version:

Library to accompany the Pogo stack

68 lines (53 loc) 2.12 kB
"use strict"; 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;