{"version":3,"sources":["meteor://💻app/packages/id-map/id-map.js"],"names":["module","export","IdMap","hasOwn","Object","prototype","hasOwnProperty","constructor","idStringify","idParse","clear","_idStringify","JSON","stringify","_idParse","parse","get","id","key","_map","set","value","remove","has","call","empty","create","forEach","iterator","keys","i","length","breakIfFalse","size","setDefault","def","clone","EJSON"],"mappings":"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","file":"/packages/id-map.js","sourcesContent":["const hasOwn = Object.prototype.hasOwnProperty;\n\nexport class IdMap {\n constructor(idStringify, idParse) {\n this.clear();\n this._idStringify = idStringify || JSON.stringify;\n this._idParse = idParse || JSON.parse;\n }\n\n// Some of these methods are designed to match methods on OrderedDict, since\n// (eg) ObserveMultiplex and _CachingChangeObserver use them interchangeably.\n// (Conceivably, this should be replaced with \"UnorderedDict\" with a specific\n// set of methods that overlap between the two.)\n\n get(id) {\n var key = this._idStringify(id);\n return this._map[key];\n }\n\n set(id, value) {\n var key = this._idStringify(id);\n this._map[key] = value;\n }\n\n remove(id) {\n var key = this._idStringify(id);\n delete this._map[key];\n }\n\n has(id) {\n var key = this._idStringify(id);\n return hasOwn.call(this._map, key);\n }\n\n empty() {\n for (let key in this._map) {\n return false;\n }\n return true;\n }\n\n clear() {\n this._map = Object.create(null);\n }\n\n // Iterates over the items in the map. Return `false` to break the loop.\n forEach(iterator) {\n // don't use _.each, because we can't break out of it.\n var keys = Object.keys(this._map);\n for (var i = 0; i < keys.length; i++) {\n var breakIfFalse = iterator.call(\n null,\n this._map[keys[i]],\n this._idParse(keys[i])\n );\n if (breakIfFalse === false) {\n return;\n }\n }\n }\n\n size() {\n return Object.keys(this._map).length;\n }\n\n setDefault(id, def) {\n var key = this._idStringify(id);\n if (hasOwn.call(this._map, key)) {\n return this._map[key];\n }\n this._map[key] = def;\n return def;\n }\n\n // Assumes that values are EJSON-cloneable, and that we don't need to clone\n // IDs (ie, that nobody is going to mutate an ObjectId).\n clone() {\n var clone = new IdMap(this._idStringify, this._idParse);\n this.forEach(function (value, id) {\n clone.set(id, EJSON.clone(value));\n });\n return clone;\n }\n}\n"]}