@silverwind/ioredis-mock
Version:
This library emulates ioredis by performing all operations in-memory.
48 lines (36 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.zrevrangebyscore = zrevrangebyscore;
var _lodash = require("lodash");
var _zrangeCommand = require("./zrange-command.common");
function zrevrangebyscore(key, inputMax, inputMin, ...args) {
const map = this.data.get(key);
if (!map) {
return [];
}
if (this.data.has(key) && !(this.data.get(key) instanceof Map)) {
return [];
}
const {
withScores,
limit,
offset
} = (0, _zrangeCommand.getWithScoresAndLimit)(args);
const min = (0, _zrangeCommand.parseLimit)(inputMin);
const max = (0, _zrangeCommand.parseLimit)(inputMax);
const filteredArray = (0, _lodash.filter)(Array.from(map.values()), (0, _zrangeCommand.filterPredicate)(min, max));
let ordered = (0, _lodash.orderBy)(filteredArray, ['score', 'value'], ['desc', 'desc']);
if (withScores) {
if (limit !== null) {
ordered = (0, _zrangeCommand.offsetAndLimit)(ordered, offset, limit);
}
return (0, _lodash.flatMap)(ordered, it => [it.value, it.score]);
}
const results = ordered.map(it => it.value);
if (limit !== null) {
return (0, _zrangeCommand.offsetAndLimit)(results, offset, limit);
}
return results;
}