ioredis-mock
Version:
This library emulates ioredis by performing all operations in-memory.
64 lines (59 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = parseKeyspaceEvents;
exports.emitNotification = emitNotification;
var allEventsDisabled = {
g: false,
string: false,
l: false,
s: false,
h: false,
z: false,
x: false,
e: false
};
function parseEvents(keyspaceEventsConfigString) {
var result = Object.assign({}, allEventsDisabled);
var allEvents = 'g$lshzxe';
var unAliasedString = keyspaceEventsConfigString.replace('A', allEvents);
result.g = unAliasedString.includes('g');
result.string = unAliasedString.includes('$');
result.l = unAliasedString.includes('l');
result.s = unAliasedString.includes('s');
result.h = unAliasedString.includes('h');
result.z = unAliasedString.includes('z');
result.x = unAliasedString.includes('x');
result.e = unAliasedString.includes('e');
return result;
}
function parseKeyspaceEvents(keyspaceEventsConfigString) {
var keyspaceConfig = {
K: Object.assign({}, allEventsDisabled),
E: Object.assign({}, allEventsDisabled)
};
var isKeyspace = keyspaceEventsConfigString.includes('K');
var isKeyevent = keyspaceEventsConfigString.includes('E');
if (isKeyspace) {
keyspaceConfig.K = parseEvents(keyspaceEventsConfigString);
}
if (isKeyevent) {
keyspaceConfig.E = parseEvents(keyspaceEventsConfigString);
}
return keyspaceConfig;
}
function createChannelString(type, name) {
var database = 0; // if we support multiple databases in the future, we might want to set this to non-zero
var typeString = type === 'K' ? 'keyspace' : 'keyevent';
var channel = '__' + typeString + '@' + database + '__:' + name;
return channel;
}
function emitNotification(redisMock, notifType, key, event) {
if (redisMock.keyspaceEvents.K[notifType] === true) {
redisMock.publish(createChannelString('K', key), event);
}
if (redisMock.keyspaceEvents.E[notifType] === true) {
redisMock.publish(createChannelString('E', event), key);
}
}