UNPKG

mysql-live

Version:

Brings the server.publish and client.subscribe for live updates on mysql database. The only one Live Collections.

162 lines (161 loc) 7.38 kB
var node_mysql_wrapper_1 = require("node-mysql-wrapper"); var _ = require("lodash"); var LiveStore = (function () { function LiveStore(handler) { this.handler = handler; this.publications = {}; this.subscriptions = {}; } LiveStore.prototype.isFindCursor = function (cursor) { return '__find__' in cursor; }; LiveStore.prototype.isProcedureCursor = function (cursor) { return '__procedure__' in cursor; }; LiveStore.prototype.registerPublication = function (publicationName, subscriptionCb) { this.publications[publicationName] = subscriptionCb; }; LiveStore.prototype.registerSubscriptions = function (socketId, subscriptionName) { var _this = this; var clientArgs = []; for (var _i = 2; _i < arguments.length; _i++) { clientArgs[_i - 2] = arguments[_i]; } var subs = []; if (this.publications[subscriptionName] === undefined) { console.log(subscriptionName + ' has not found into publications!!'); return undefined; } var _publication = this.publications[subscriptionName]; var cursors; if (_.isFunction(_publication)) { var foundCursorOrMany = (_a = _publication).call.apply(_a, [this.handler.getSocket(socketId)].concat(clientArgs)); if (!_.isArray(foundCursorOrMany)) { cursors = [foundCursorOrMany]; } else { cursors = foundCursorOrMany; } } else if (_.isArray(_publication) && _publication[0]["collectionName"] !== undefined) { cursors = _publication; } else if (_publication["collectionName"] !== undefined && _publication["criteria"] !== undefined) { cursors = [_publication]; } else if (_.isArray(_publication) && _publication[0]["table"] !== undefined && _publication[0]["name"] !== undefined) { cursors = []; _publication.forEach(function (col) { cursors.push(col.find()); }); } else if (_publication["table"] !== undefined && _publication["name"] !== undefined) { cursors = [_publication.find()]; } else if (this.isProcedureCursor(_publication)) { cursors = [_publication]; } else if (_.isArray(_publication) && this.isProcedureCursor(_publication[0])) { cursors = _publication; } if (cursors.length > 0) { this.subscriptions[subscriptionName] = []; } cursors.forEach(function (cursor, index) { if (_this.isFindCursor(cursor)) { if (cursor.criteria === undefined) { subs.push({ name: subscriptionName, subscriber: socketId, cursor: cursor }); } else { var subscription = { name: subscriptionName, subscriber: socketId, cursor: cursor }; if (_this.subscriptions[subscriptionName] === undefined) _this.subscriptions[subscriptionName] = []; var alreadyExistsSub = _.find(_this.subscriptions[subscriptionName], function (sub) { if (sub.cursor !== undefined) { if (_this.isFindCursor(sub.cursor)) { return sub.cursor.collectionName === subscription.cursor.collectionName && sub.subscriber === socketId; } else { } } return false; }); if (alreadyExistsSub !== undefined) { subscription.cursor.criteria = alreadyExistsSub.cursor.criteria; } else { _this.subscriptions[subscriptionName].push(subscription); } subs.push(subscription); } } else if (_this.isProcedureCursor(cursor)) { var subscription = { name: subscriptionName, subscriber: socketId, cursor: cursor }; var alreadyExistsSub = _.find(_this.subscriptions[subscriptionName], function (sub) { if (sub.cursor !== undefined) { if (_this.isProcedureCursor(sub.cursor)) { return sub.cursor.name === subscription.cursor.name && sub.subscriber === socketId; } else { } } return false; }); if (alreadyExistsSub === undefined) { _this.subscriptions[subscriptionName].push(subscription); } subs.push(subscription); } }); return subs; var _a; }; LiveStore.prototype.getSubscriptionsByCollection = function (collectionName) { var _this = this; var subs = []; node_mysql_wrapper_1.Helper.forEachKey(this.subscriptions, function (subscriptionName) { _this.subscriptions[subscriptionName].forEach(function (sub) { if (_this.isFindCursor(sub.cursor)) { if (sub.cursor.collectionName === collectionName) { subs.push(sub); } } }); }); return subs; }; LiveStore.prototype.getSubscriptionsByProcedure = function (procedureName) { var _this = this; var subs = []; node_mysql_wrapper_1.Helper.forEachKey(this.subscriptions, function (subscriptionName) { _this.subscriptions[subscriptionName].forEach(function (sub) { if (_this.isProcedureCursor(sub.cursor)) { if (sub.cursor.name === procedureName) { subs.push(sub); } } }); }); return subs; }; LiveStore.prototype.getSubscriptionByCollectionAndSubscriber = function (socketId, collectionName) { return _.find(this.getSubscriptionsByCollection(collectionName), function (sub) { return sub.subscriber === socketId; }); }; LiveStore.prototype.removeAllSubscriptionsBySubscriber = function (socketId) { var _this = this; node_mysql_wrapper_1.Helper.forEachKey(this.subscriptions, function (subscriptionName) { _.remove(_this.subscriptions[subscriptionName], function (sub) { return sub.subscriber === socketId; }); }); }; LiveStore.prototype.removeSubscriptionByNameAndSubscriber = function (socketId, subscriptionName) { _.remove(this.subscriptions[subscriptionName], function (sub) { return sub.subscriber === socketId; }); }; LiveStore.prototype.isSubscribedToCollection = function (socketId, collectionName) { return this.getSubscriptionByCollectionAndSubscriber(socketId, collectionName) !== undefined; }; LiveStore.prototype.isSubscribedTo = function (socketId, subscriptionName) { return _.find(this.subscriptions[subscriptionName], function (sub) { return sub.subscriber === socketId; }) !== undefined; }; return LiveStore; })(); exports.LiveStore = LiveStore;