UNPKG

@silverwind/ioredis-mock

Version:

This library emulates ioredis by performing all operations in-memory.

67 lines (51 loc) 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSubscribedChannels = getSubscribedChannels; exports.subscribeToChannel = subscribeToChannel; exports.unsubscribeFromChannel = unsubscribeFromChannel; var _emitMessage = _interopRequireDefault(require("./emitMessage")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getSubscribedChannels(instance, channelStore) { const subscribedChannels = []; if (!channelStore.instanceListeners) { return []; } channelStore.instanceListeners.forEach((instanceMap, channel) => { if (instanceMap.has(instance)) { subscribedChannels.push(channel); } }); return subscribedChannels; } function subscribeToChannel(instance, chan, channels, isPattern) { if (!channels.instanceListeners.has(chan)) { channels.instanceListeners.set(chan, new Map()); } if (channels.instanceListeners.get(chan).has(instance)) { // do not register another listener for existing channel return; } // Pattern events include the channel, regular events do not, so we pass chan in directly const listener = (message, channel) => (0, _emitMessage.default)(instance, isPattern ? channel : chan, message, isPattern ? chan : undefined); channels.on(chan, listener); channels.instanceListeners.get(chan).set(instance, listener); } function unsubscribeFromChannel(instance, chan, channels) { if (!channels.instanceListeners || channels.instanceListeners.has(chan) === false) { // there are no subscriptions to this channel return; } const channelMap = channels.instanceListeners.get(chan); if (channelMap.has(instance) === false) { // this instance is not subscribed to the channel return; } const listener = channelMap.get(instance); channels.removeListener(chan, listener); channelMap.delete(instance); if (channelMap.size === 0) { // tidy up: remove the map if it's empty channels.instanceListeners.delete(chan); } }