12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
- function MultiMap() {
- var map = {
- arrayMap: [],
- weakMap: new WeakMap()
- };
- return {
- get: function get(key) {
- if (canBeAnArrayMapKey(key)) {
- return map.arrayMap[key];
- } else if (canBeAWeakMapKey(key)) {
- return map.weakMap.get(key);
- }
- },
- set: function set(key, value) {
- if (canBeAnArrayMapKey(key)) {
- map.arrayMap[key] = value;
- } else if (canBeAWeakMapKey(key)) {
- map.weakMap.set(key, value);
- } else {
- throw new Error('Invalid key type');
- }
- },
- delete: function _delete(key) {
- if (canBeAnArrayMapKey(key)) {
- delete map.arrayMap[key];
- } else if (canBeAWeakMapKey(key)) {
- map.weakMap.delete(key);
- }
- }
- };
- function canBeAnArrayMapKey(obj) {
- return obj !== null && !isNaNSymbol(obj) && (typeof obj == 'string' || typeof obj == 'number');
- }
- function canBeAWeakMapKey(obj) {
- return obj !== null && ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == 'object' || typeof obj == 'function');
- }
- function isNaNSymbol(obj) {
- /* eslint-disable no-self-compare */
- return obj !== obj; // NaN === NaN is always false
- }
- }
- export default MultiMap;
|