ioredis-mock
Version:
This library emulates ioredis by performing all operations in-memory.
69 lines (53 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.zrangebyscore = zrangebyscore;
var _es6Map = require('es6-map');
var _es6Map2 = _interopRequireDefault(_es6Map);
var _arrayFrom = require('array-from');
var _arrayFrom2 = _interopRequireDefault(_arrayFrom);
var _lodash = require('lodash');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function parseLimit(input) {
var str = '' + input;
var strict = false;
if (str[0] === '(') {
str = str.substr(1, str.length);
strict = true;
} else if (str === '-inf') {
return { value: -Infinity, isStrict: true };
} else if (str === '+inf') {
return { value: +Infinity, isStrict: true };
}
return {
value: parseInt(str, 10),
isStrict: strict
};
}
function filterPredicate(min, max) {
return function (it) {
if (it.score < min.value || min.isStrict && it.score === min.value) {
return false;
}
if (it.score > max.value || max.isStrict && it.score === max.value) {
return false;
}
return true;
};
}
function zrangebyscore(key, inputMin, inputMax) {
var map = this.data.get(key);
if (!map) {
return [];
}
if (this.data.has(key) && !(this.data.get(key) instanceof _es6Map2.default)) {
return [];
}
var min = parseLimit(inputMin);
var max = parseLimit(inputMax);
var filteredArray = (0, _lodash.filter)((0, _arrayFrom2.default)(map.values()), filterPredicate(min, max));
return (0, _lodash.orderBy)(filteredArray, 'score').map(function (it) {
return it.value;
});
}