1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.zadd = zadd;
|
7 |
|
8 | var _es6Map = require('es6-map');
|
9 |
|
10 | var _es6Map2 = _interopRequireDefault(_es6Map);
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13 |
|
14 | function zadd(key) {
|
15 |
|
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 |
|
27 | var elems = vals.length;
|
28 | if (elems % 2 !== 0 || elems < 1) throw new Error('ERR syntax error');
|
29 |
|
30 |
|
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 |
|
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 |
|
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 |