@jiovan-labs/ts-multi-map 0.0.0-stage → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +46 -2
  3. package/dist/cjs/index.d.ts +7 -0
  4. package/dist/cjs/index.js +47 -0
  5. package/dist/cjs/type/declaration.d.ts +10 -0
  6. package/dist/cjs/type/declaration.js +17 -0
  7. package/dist/cjs/util/MultiKeyMap.d.ts +34 -0
  8. package/dist/cjs/util/MultiKeyMap.js +530 -0
  9. package/dist/cjs/util/MultiValueMap.d.ts +35 -0
  10. package/dist/cjs/util/MultiValueMap.js +527 -0
  11. package/dist/cjs/util/RangeMap.d.ts +36 -0
  12. package/dist/cjs/util/RangeMap.js +584 -0
  13. package/dist/cjs/util/ReadonlyMultiKeyMap.d.ts +27 -0
  14. package/dist/cjs/util/ReadonlyMultiKeyMap.js +364 -0
  15. package/dist/cjs/util/ReadonlyMultiValueMap.d.ts +27 -0
  16. package/dist/cjs/util/ReadonlyMultiValueMap.js +365 -0
  17. package/dist/cjs/util/ReadonlyRangeMap.d.ts +27 -0
  18. package/dist/cjs/util/ReadonlyRangeMap.js +376 -0
  19. package/dist/esm/index.d.ts +7 -0
  20. package/dist/esm/index.js +7 -0
  21. package/dist/esm/type/declaration.d.ts +10 -0
  22. package/dist/esm/type/declaration.js +1 -0
  23. package/dist/esm/util/MultiKeyMap.d.ts +34 -0
  24. package/dist/esm/util/MultiKeyMap.js +318 -0
  25. package/dist/esm/util/MultiValueMap.d.ts +35 -0
  26. package/dist/esm/util/MultiValueMap.js +328 -0
  27. package/dist/esm/util/RangeMap.d.ts +36 -0
  28. package/dist/esm/util/RangeMap.js +358 -0
  29. package/dist/esm/util/ReadonlyMultiKeyMap.d.ts +27 -0
  30. package/dist/esm/util/ReadonlyMultiKeyMap.js +136 -0
  31. package/dist/esm/util/ReadonlyMultiValueMap.d.ts +27 -0
  32. package/dist/esm/util/ReadonlyMultiValueMap.js +136 -0
  33. package/dist/esm/util/ReadonlyRangeMap.d.ts +27 -0
  34. package/dist/esm/util/ReadonlyRangeMap.js +135 -0
  35. package/dist/umd/ts-multi-map.min.js +1 -0
  36. package/package.json +111 -5
@@ -0,0 +1,318 @@
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
5
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
6
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
7
+ var _Symbol$iterator, _Symbol$toStringTag;
8
+ import objectHash from 'object-hash';
9
+ import { MultiValueMap } from "./..";
10
+ _Symbol$iterator = Symbol.iterator;
11
+ _Symbol$toStringTag = Symbol.toStringTag;
12
+ export var MultiKeyMap = /*#__PURE__*/function () {
13
+ function MultiKeyMap(entries) {
14
+ var _this = this;
15
+ _classCallCheck(this, MultiKeyMap);
16
+ _defineProperty(this, "keyMap", new MultiValueMap());
17
+ _defineProperty(this, "valueMap", new Map());
18
+ entries === null || entries === void 0 || entries.forEach(function (entry) {
19
+ var _entry = _slicedToArray(entry, 2),
20
+ ks = _entry[0],
21
+ v = _entry[1];
22
+ _this.set(ks, v);
23
+ });
24
+ }
25
+ _createClass(MultiKeyMap, [{
26
+ key: "get",
27
+ value: function get(keys, defaults) {
28
+ var _this$valueMap$get;
29
+ if (keys.length == 0 || this.isEmpty()) {
30
+ return defaults;
31
+ }
32
+ var hash = objectHash(keys);
33
+ return (_this$valueMap$get = this.valueMap.get(hash)) !== null && _this$valueMap$get !== void 0 ? _this$valueMap$get : defaults;
34
+ }
35
+ }, {
36
+ key: "set",
37
+ value: function set(keys, value) {
38
+ if (keys.length == 0) {
39
+ return;
40
+ }
41
+ var hash = objectHash(keys);
42
+ this.keyMap.set(hash, _toConsumableArray(keys));
43
+ this.valueMap.set(hash, value);
44
+ }
45
+ }, {
46
+ key: "clear",
47
+ value: function clear() {
48
+ this.keyMap.clear();
49
+ this.valueMap.clear();
50
+ }
51
+ }, {
52
+ key: "keys",
53
+ value: function keys() {
54
+ return _toConsumableArray(this.keyMap.values());
55
+ }
56
+ }, {
57
+ key: "values",
58
+ value: function values() {
59
+ return _toConsumableArray(this.valueMap.values());
60
+ }
61
+ }, {
62
+ key: "entries",
63
+ value: function entries() {
64
+ if (this.isEmpty()) {
65
+ return [];
66
+ }
67
+ if (this.keyMap.size !== this.valueMap.size) {
68
+ throw EvalError("Internal maps size mismatch!");
69
+ }
70
+ var result = [];
71
+ var _iterator = _createForOfIteratorHelper(this.valueMap),
72
+ _step;
73
+ try {
74
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
75
+ var _this$keyMap$get;
76
+ var _step$value = _slicedToArray(_step.value, 2),
77
+ k = _step$value[0],
78
+ v = _step$value[1];
79
+ result.push([(_this$keyMap$get = this.keyMap.get(k)) !== null && _this$keyMap$get !== void 0 ? _this$keyMap$get : [], v]);
80
+ }
81
+ } catch (err) {
82
+ _iterator.e(err);
83
+ } finally {
84
+ _iterator.f();
85
+ }
86
+ return result;
87
+ }
88
+ }, {
89
+ key: "deleteByKey",
90
+ value: function deleteByKey(key) {
91
+ if (!key.length || this.isEmpty()) {
92
+ return false;
93
+ }
94
+ var hash = objectHash(key);
95
+ return this.keyMap.deleteByKey(hash) && this.valueMap.delete(hash);
96
+ }
97
+ }, {
98
+ key: "deleteByKeys",
99
+ value: function deleteByKeys(keys) {
100
+ if (!keys.length || this.isEmpty()) {
101
+ return false;
102
+ }
103
+ var result = false;
104
+ var _iterator2 = _createForOfIteratorHelper(keys),
105
+ _step2;
106
+ try {
107
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
108
+ var key = _step2.value;
109
+ if (this.deleteByKey(key)) {
110
+ result = true;
111
+ }
112
+ }
113
+ } catch (err) {
114
+ _iterator2.e(err);
115
+ } finally {
116
+ _iterator2.f();
117
+ }
118
+ return result;
119
+ }
120
+ }, {
121
+ key: "deleteByValue",
122
+ value: function deleteByValue(value) {
123
+ if (this.isEmpty()) {
124
+ return false;
125
+ }
126
+ var result = false;
127
+ var _iterator3 = _createForOfIteratorHelper(this.valueMap.entries()),
128
+ _step3;
129
+ try {
130
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
131
+ var _step3$value = _slicedToArray(_step3.value, 2),
132
+ k = _step3$value[0],
133
+ v = _step3$value[1];
134
+ if (v === value && this.keyMap.deleteByKey(k) && this.valueMap.delete(k)) {
135
+ result = true;
136
+ }
137
+ }
138
+ } catch (err) {
139
+ _iterator3.e(err);
140
+ } finally {
141
+ _iterator3.f();
142
+ }
143
+ return result;
144
+ }
145
+ }, {
146
+ key: "deleteByValues",
147
+ value: function deleteByValues(values) {
148
+ if (!values.length || this.isEmpty()) {
149
+ return false;
150
+ }
151
+ var result = false;
152
+ var _iterator4 = _createForOfIteratorHelper(values),
153
+ _step4;
154
+ try {
155
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
156
+ var _value = _step4.value;
157
+ if (this.deleteByValue(_value)) {
158
+ result = true;
159
+ }
160
+ }
161
+ } catch (err) {
162
+ _iterator4.e(err);
163
+ } finally {
164
+ _iterator4.f();
165
+ }
166
+ return result;
167
+ }
168
+ }, {
169
+ key: "forEach",
170
+ value: function forEach(callback, thisArg) {
171
+ this.entries().forEach(function (entry) {
172
+ var _entry2 = _slicedToArray(entry, 2),
173
+ ks = _entry2[0],
174
+ v = _entry2[1];
175
+ callback(v, ks);
176
+ }, thisArg);
177
+ }
178
+ }, {
179
+ key: "forEachIndexing",
180
+ value: function forEachIndexing(callback, thisArg) {
181
+ var index = 0;
182
+ this.entries().forEach(function (entry) {
183
+ var _entry3 = _slicedToArray(entry, 2),
184
+ ks = _entry3[0],
185
+ v = _entry3[1];
186
+ callback(v, ks, index++);
187
+ }, thisArg);
188
+ }
189
+ }, {
190
+ key: "forEachBreakable",
191
+ value: function forEachBreakable(callback, thisArg) {
192
+ this.entries().forEach(function (entry) {
193
+ var _entry4 = _slicedToArray(entry, 2),
194
+ ks = _entry4[0],
195
+ v = _entry4[1];
196
+ if (!callback(v, ks)) {
197
+ return;
198
+ }
199
+ }, thisArg);
200
+ }
201
+ }, {
202
+ key: "hasKey",
203
+ value: function hasKey(keys) {
204
+ var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
205
+ return this.isNotEmpty() && keys.length > 0 && this.keyMap.hasValue(keys, exact);
206
+ }
207
+ }, {
208
+ key: "hasKeyValue",
209
+ value: function hasKeyValue(keys, value) {
210
+ return this.isNotEmpty() && keys.length > 0 && this.get(keys) === value;
211
+ }
212
+ }, {
213
+ key: "hasAnyKeys",
214
+ value: function hasAnyKeys(keys) {
215
+ var _this2 = this;
216
+ var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
217
+ return this.isNotEmpty() && keys.length > 0 && keys.some(function (item) {
218
+ return _this2.hasKey(item, exact);
219
+ });
220
+ }
221
+ }, {
222
+ key: "hasAllKeys",
223
+ value: function hasAllKeys(keys) {
224
+ var _this3 = this;
225
+ var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
226
+ return this.isNotEmpty() && keys.length > 0 && keys.every(function (item) {
227
+ return _this3.hasKey(item, exact);
228
+ });
229
+ }
230
+ }, {
231
+ key: "hasValue",
232
+ value: function hasValue(value) {
233
+ return this.values().includes(value);
234
+ }
235
+ }, {
236
+ key: "hasAnyValues",
237
+ value: function hasAnyValues(values) {
238
+ var _this4 = this;
239
+ return this.isNotEmpty() && values.length > 0 && values.some(function (item) {
240
+ return _this4.hasValue(item);
241
+ });
242
+ }
243
+ }, {
244
+ key: "hasAllValues",
245
+ value: function hasAllValues(values) {
246
+ var _this5 = this;
247
+ return this.isNotEmpty() && values.length > 0 && values.every(function (item) {
248
+ return _this5.hasValue(item);
249
+ });
250
+ }
251
+ }, {
252
+ key: "isEmpty",
253
+ value: function isEmpty() {
254
+ return !this.valueMap.size;
255
+ }
256
+ }, {
257
+ key: "isNotEmpty",
258
+ value: function isNotEmpty() {
259
+ return this.valueMap.size > 0;
260
+ }
261
+ }, {
262
+ key: "getKey",
263
+ value: function getKey(value, defaults) {
264
+ if (this.isEmpty()) {
265
+ return defaults;
266
+ }
267
+ var _iterator5 = _createForOfIteratorHelper(this.valueMap.entries()),
268
+ _step5;
269
+ try {
270
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
271
+ var _step5$value = _slicedToArray(_step5.value, 2),
272
+ k = _step5$value[0],
273
+ v = _step5$value[1];
274
+ if (v === value) {
275
+ return this.keyMap.get(k, defaults);
276
+ }
277
+ }
278
+ } catch (err) {
279
+ _iterator5.e(err);
280
+ } finally {
281
+ _iterator5.f();
282
+ }
283
+ return defaults;
284
+ }
285
+ }, {
286
+ key: _Symbol$iterator,
287
+ value: function value() {
288
+ return this.entries()[Symbol.iterator]();
289
+ }
290
+ }, {
291
+ key: "size",
292
+ get: function get() {
293
+ return this.valueMap.size;
294
+ }
295
+ }, {
296
+ key: _Symbol$toStringTag,
297
+ get: function get() {
298
+ return 'MultiKeyMap';
299
+ }
300
+ }, {
301
+ key: "toString",
302
+ value: function toString() {
303
+ return _toConsumableArray(this).map(function (entry) {
304
+ var _ref = entry.length <= 1 ? [[], entry[0]] : [entry.slice(0, -1), entry[entry.length - 1]],
305
+ _ref2 = _slicedToArray(_ref, 2),
306
+ ks = _ref2[0],
307
+ v = _ref2[1];
308
+ return "[".concat(ks.join(), "]:").concat(v);
309
+ }).join(';');
310
+ }
311
+ }], [{
312
+ key: "of",
313
+ value: function of(entries) {
314
+ return new MultiKeyMap(entries);
315
+ }
316
+ }]);
317
+ return MultiKeyMap;
318
+ }();
@@ -0,0 +1,35 @@
1
+ import { type MultiValueMapEntries } from "..";
2
+ export declare class MultiValueMap<K, V> implements Omit<Map<K, V[]>, 'delete' | 'forEach' | 'get' | 'has' | 'set' | 'entries' | 'keys' | 'values' | 'push'> {
3
+ private readonly map;
4
+ static of<K, V>(entries?: MultiValueMapEntries<K, V>): MultiValueMap<K, V>;
5
+ constructor(entries?: MultiValueMapEntries<K, V>);
6
+ get(key: K, defaults?: V[]): V[] | undefined;
7
+ set(key: K, values: V[]): void;
8
+ push(key: K, values: V[]): void;
9
+ clear(): void;
10
+ keys(): K[];
11
+ values(): V[][];
12
+ entries(): [K, V[]][];
13
+ deleteByKey(key: K): boolean;
14
+ deleteByKeys(keys: K[]): boolean;
15
+ deleteByValue(value: V): boolean;
16
+ deleteByValues(values: V[]): boolean;
17
+ deleteValueOfKey(key: K, value: V): boolean;
18
+ forEach(callback: (values?: V[], key?: K) => void, thisArg?: any): void;
19
+ forEachIndexing(callback: (values?: V[], key?: K, index?: number) => void, thisArg?: any): void;
20
+ forEachBreakable(callback: (values?: V[], key?: K) => boolean, thisArg?: any): void;
21
+ hasKey(key: K): boolean;
22
+ hasKeyValue(key: K, value: V): boolean;
23
+ hasAnyKeys(keys: K[]): boolean;
24
+ hasAllKeys(keys: K[]): boolean;
25
+ hasValue(values: V[], exact?: boolean): boolean;
26
+ hasAnyValues(values: V[][], exact?: boolean): boolean;
27
+ hasAllValues(values: V[][], exact?: boolean): boolean;
28
+ isEmpty(): boolean;
29
+ isNotEmpty(): boolean;
30
+ getKey(values: V[], defaults?: K): K | undefined;
31
+ [Symbol.iterator](): IterableIterator<[K, V[]]>;
32
+ get size(): number;
33
+ get [Symbol.toStringTag](): string;
34
+ toString(): string;
35
+ }
@@ -0,0 +1,328 @@
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
5
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
6
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
7
+ var _Symbol$iterator, _Symbol$toStringTag;
8
+ _Symbol$iterator = Symbol.iterator;
9
+ _Symbol$toStringTag = Symbol.toStringTag;
10
+ export var MultiValueMap = /*#__PURE__*/function () {
11
+ function MultiValueMap(entries) {
12
+ var _this = this;
13
+ _classCallCheck(this, MultiValueMap);
14
+ _defineProperty(this, "map", new Map());
15
+ entries === null || entries === void 0 || entries.forEach(function (entry) {
16
+ var _entry = _slicedToArray(entry, 2),
17
+ k = _entry[0],
18
+ vs = _entry[1];
19
+ _this.set(k, vs);
20
+ });
21
+ }
22
+ _createClass(MultiValueMap, [{
23
+ key: "get",
24
+ value: function get(key, defaults) {
25
+ var _this$map$get;
26
+ return (_this$map$get = this.map.get(key)) !== null && _this$map$get !== void 0 ? _this$map$get : defaults;
27
+ }
28
+ }, {
29
+ key: "set",
30
+ value: function set(key, values) {
31
+ this.map.set(key, values);
32
+ }
33
+ }, {
34
+ key: "push",
35
+ value: function push(key, values) {
36
+ var array = this.get(key) || [];
37
+ array.push.apply(array, _toConsumableArray(values));
38
+ this.map.set(key, array);
39
+ }
40
+ }, {
41
+ key: "clear",
42
+ value: function clear() {
43
+ this.map.clear();
44
+ }
45
+ }, {
46
+ key: "keys",
47
+ value: function keys() {
48
+ return _toConsumableArray(this.map.keys());
49
+ }
50
+ }, {
51
+ key: "values",
52
+ value: function values() {
53
+ return _toConsumableArray(this.map.values());
54
+ }
55
+ }, {
56
+ key: "entries",
57
+ value: function entries() {
58
+ return _toConsumableArray(this.map.entries());
59
+ }
60
+ }, {
61
+ key: "deleteByKey",
62
+ value: function deleteByKey(key) {
63
+ return this.map.delete(key);
64
+ }
65
+ }, {
66
+ key: "deleteByKeys",
67
+ value: function deleteByKeys(keys) {
68
+ if (!keys.length || this.isEmpty()) {
69
+ return false;
70
+ }
71
+ var result = false;
72
+ var _iterator = _createForOfIteratorHelper(keys),
73
+ _step;
74
+ try {
75
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
76
+ var _key = _step.value;
77
+ if (this.deleteByKey(_key)) {
78
+ result = true;
79
+ }
80
+ }
81
+ } catch (err) {
82
+ _iterator.e(err);
83
+ } finally {
84
+ _iterator.f();
85
+ }
86
+ return result;
87
+ }
88
+ }, {
89
+ key: "deleteByValue",
90
+ value: function deleteByValue(value) {
91
+ if (this.isEmpty()) {
92
+ return false;
93
+ }
94
+ var result = false;
95
+ var _iterator2 = _createForOfIteratorHelper(this.entries()),
96
+ _step2;
97
+ try {
98
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
99
+ var _step2$value = _slicedToArray(_step2.value, 2),
100
+ k = _step2$value[0],
101
+ vs = _step2$value[1];
102
+ if (vs !== null && vs !== void 0 && vs.includes(value) && this.map.delete(k)) {
103
+ result = true;
104
+ }
105
+ }
106
+ } catch (err) {
107
+ _iterator2.e(err);
108
+ } finally {
109
+ _iterator2.f();
110
+ }
111
+ return result;
112
+ }
113
+ }, {
114
+ key: "deleteByValues",
115
+ value: function deleteByValues(values) {
116
+ if (!values.length || this.isEmpty()) {
117
+ return false;
118
+ }
119
+ var result = false;
120
+ var _iterator3 = _createForOfIteratorHelper(values),
121
+ _step3;
122
+ try {
123
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
124
+ var value = _step3.value;
125
+ if (this.deleteByValue(value)) {
126
+ result = true;
127
+ }
128
+ }
129
+ } catch (err) {
130
+ _iterator3.e(err);
131
+ } finally {
132
+ _iterator3.f();
133
+ }
134
+ return result;
135
+ }
136
+ }, {
137
+ key: "deleteValueOfKey",
138
+ value: function deleteValueOfKey(key, value) {
139
+ var array = this.get(key) || [];
140
+ if (!array.includes(value)) {
141
+ return false;
142
+ }
143
+ array = array.filter(function (v) {
144
+ return v !== value;
145
+ });
146
+ this.map.set(key, array);
147
+ return true;
148
+ }
149
+ }, {
150
+ key: "forEach",
151
+ value: function forEach(callback, thisArg) {
152
+ this.map.forEach(function (vs, k) {
153
+ callback(vs, k);
154
+ }, thisArg);
155
+ }
156
+ }, {
157
+ key: "forEachIndexing",
158
+ value: function forEachIndexing(callback, thisArg) {
159
+ var index = 0;
160
+ this.map.forEach(function (vs, k) {
161
+ callback(vs, k, index++);
162
+ }, thisArg);
163
+ }
164
+ }, {
165
+ key: "forEachBreakable",
166
+ value: function forEachBreakable(callback, thisArg) {
167
+ this.map.forEach(function (vs, k) {
168
+ if (!callback(vs, k)) {
169
+ return;
170
+ }
171
+ }, thisArg);
172
+ }
173
+ }, {
174
+ key: "hasKey",
175
+ value: function hasKey(key) {
176
+ return this.map.has(key);
177
+ }
178
+ }, {
179
+ key: "hasKeyValue",
180
+ value: function hasKeyValue(key, value) {
181
+ return this.isNotEmpty() && this.get(key, []).includes(value);
182
+ }
183
+ }, {
184
+ key: "hasAnyKeys",
185
+ value: function hasAnyKeys(keys) {
186
+ var _this2 = this;
187
+ return this.isNotEmpty() && keys.length > 0 && keys.some(function (item) {
188
+ return _this2.hasKey(item);
189
+ });
190
+ }
191
+ }, {
192
+ key: "hasAllKeys",
193
+ value: function hasAllKeys(keys) {
194
+ var _this3 = this;
195
+ return this.isNotEmpty() && keys.length > 0 && keys.every(function (item) {
196
+ return _this3.hasKey(item);
197
+ });
198
+ }
199
+ }, {
200
+ key: "hasValue",
201
+ value: function hasValue(values) {
202
+ var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
203
+ if (!values.length || this.isEmpty()) {
204
+ return false;
205
+ }
206
+ var _iterator4 = _createForOfIteratorHelper(this.map.values()),
207
+ _step4;
208
+ try {
209
+ var _loop = function _loop() {
210
+ var vs = _step4.value;
211
+ var result = exact ? values.length === vs.length && values.every(function (item) {
212
+ return vs.includes(item);
213
+ }) : values.some(function (item) {
214
+ return vs.includes(item);
215
+ });
216
+ if (result) {
217
+ return {
218
+ v: true
219
+ };
220
+ }
221
+ },
222
+ _ret;
223
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
224
+ _ret = _loop();
225
+ if (_ret) return _ret.v;
226
+ }
227
+ } catch (err) {
228
+ _iterator4.e(err);
229
+ } finally {
230
+ _iterator4.f();
231
+ }
232
+ return false;
233
+ }
234
+ }, {
235
+ key: "hasAnyValues",
236
+ value: function hasAnyValues(values) {
237
+ var _this4 = this;
238
+ var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
239
+ return this.isNotEmpty() && values.length > 0 && values.some(function (item) {
240
+ return _this4.hasValue(item, exact);
241
+ });
242
+ }
243
+ }, {
244
+ key: "hasAllValues",
245
+ value: function hasAllValues(values) {
246
+ var _this5 = this;
247
+ var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
248
+ return this.isNotEmpty() && values.length > 0 && values.every(function (item) {
249
+ return _this5.hasValue(item, exact);
250
+ });
251
+ }
252
+ }, {
253
+ key: "isEmpty",
254
+ value: function isEmpty() {
255
+ return !this.map.size;
256
+ }
257
+ }, {
258
+ key: "isNotEmpty",
259
+ value: function isNotEmpty() {
260
+ return this.map.size > 0;
261
+ }
262
+ }, {
263
+ key: "getKey",
264
+ value: function getKey(values, defaults) {
265
+ if (this.isEmpty()) {
266
+ return defaults;
267
+ }
268
+ var _iterator5 = _createForOfIteratorHelper(this.entries()),
269
+ _step5;
270
+ try {
271
+ var _loop2 = function _loop2() {
272
+ var _step5$value = _slicedToArray(_step5.value, 2),
273
+ k = _step5$value[0],
274
+ vs = _step5$value[1];
275
+ if (values.length === vs.length && values.every(function (item) {
276
+ return vs.includes(item);
277
+ })) {
278
+ return {
279
+ v: k
280
+ };
281
+ }
282
+ },
283
+ _ret2;
284
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
285
+ _ret2 = _loop2();
286
+ if (_ret2) return _ret2.v;
287
+ }
288
+ } catch (err) {
289
+ _iterator5.e(err);
290
+ } finally {
291
+ _iterator5.f();
292
+ }
293
+ return defaults;
294
+ }
295
+ }, {
296
+ key: _Symbol$iterator,
297
+ value: function value() {
298
+ return this.map[Symbol.iterator]();
299
+ }
300
+ }, {
301
+ key: "size",
302
+ get: function get() {
303
+ return this.map.size;
304
+ }
305
+ }, {
306
+ key: _Symbol$toStringTag,
307
+ get: function get() {
308
+ return 'MultiValueMap';
309
+ }
310
+ }, {
311
+ key: "toString",
312
+ value: function toString() {
313
+ return _toConsumableArray(this).map(function (entry) {
314
+ var _ref = entry.length <= 1 ? [[], entry[0]] : [entry.slice(0, -1), entry[entry.length - 1]],
315
+ _ref2 = _slicedToArray(_ref, 2),
316
+ k = _ref2[0],
317
+ vs = _ref2[1];
318
+ return "".concat(k, ":[").concat(vs.join(), "]");
319
+ }).join(';');
320
+ }
321
+ }], [{
322
+ key: "of",
323
+ value: function of(entries) {
324
+ return new MultiValueMap(entries);
325
+ }
326
+ }]);
327
+ return MultiValueMap;
328
+ }();