UNPKG

1.79 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.zadd = zadd;
7
8var _es6Map = require('es6-map');
9
10var _es6Map2 = _interopRequireDefault(_es6Map);
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14function zadd(key) {
15 // consume options
16 var options = [];
17
18 for (var _len = arguments.length, vals = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
19 vals[_key - 1] = arguments[_key];
20 }
21
22 while (['NX', 'XX', 'CH', 'INCR'].includes(vals[0])) {
23 options.push(vals.shift());
24 }
25
26 // make sure we have the correct number of args
27 var elems = vals.length;
28 if (elems % 2 !== 0 || elems < 1) throw new Error('ERR syntax error');
29
30 // set option vals
31 var nx = options.includes('NX');
32 var xx = options.includes('XX');
33 var ch = options.includes('CH');
34 var incr = options.includes('INCR');
35
36 // validate options
37 if (nx && xx) throw new Error('XX and NX options at the same time are not compatible');
38 if (incr && elems > 2) throw new Error('INCR option supports a single increment-element pair');
39
40 if (!this.data.has(key)) {
41 if (xx) return 0;
42 this.data.set(key, new _es6Map2.default());
43 }
44
45 var map = this.data.get(key);
46
47 var added = 0;
48 var updated = 0;
49 for (var i = 0; i < elems; i += 2) {
50 var score = Number(vals[i]);
51 var value = vals[i + 1];
52
53 if (map.has(value)) {
54 if (!nx) {
55 if (incr) {
56 score += Number(map.get(value).score);
57 }
58 map.set(value, { score: score, value: value });
59 updated++;
60 }
61
62 // noop when nx
63 } else if (!xx) {
64 map.set(value, { score: score, value: value });
65 added++;
66 }
67 }
68
69 this.data.set(key, map);
70 return ch ? added + updated : added;
71}
\No newline at end of file