@silverwind/ioredis-mock
Version:
This library emulates ioredis by performing all operations in-memory.
72 lines (62 loc) • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = parseKeyspaceEvents;
exports.emitNotification = emitNotification;
const allEventsDisabled = {
g: false,
string: false,
l: false,
s: false,
h: false,
z: false,
x: false,
e: false
};
function parseEvents(keyspaceEventsConfigString) {
// eslint-disable-next-line prefer-object-spread
const result = Object.assign({}, allEventsDisabled);
const allEvents = 'g$lshzxe';
const 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) {
const keyspaceConfig = {
// eslint-disable-next-line prefer-object-spread
K: Object.assign({}, allEventsDisabled),
// eslint-disable-next-line prefer-object-spread
E: Object.assign({}, allEventsDisabled)
};
const isKeyspace = keyspaceEventsConfigString.includes('K');
const isKeyevent = keyspaceEventsConfigString.includes('E');
if (isKeyspace) {
keyspaceConfig.K = parseEvents(keyspaceEventsConfigString);
}
if (isKeyevent) {
keyspaceConfig.E = parseEvents(keyspaceEventsConfigString);
}
return keyspaceConfig;
}
function createChannelString(type, name) {
const database = 0; // if we support multiple databases in the future, we might want to set this to non-zero
const typeString = type === 'K' ? 'keyspace' : 'keyevent';
const 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);
}
}