////////////////////////////////////////////////////////////////////////// // // // This is a generated file. You can view the original // // source in your browser if your browser supports source maps. // // // // If you are using Chrome, open the Developer Tools and click the gear // // icon in its lower right corner. In the General Settings panel, turn // // on 'Enable source maps'. // // // // If you are using Firefox 23, go to `about:config` and set the // // `devtools.debugger.source-maps-enabled` preference to true. // // (The preference should be on by default in Firefox 24; versions // // older than 23 do not support source maps.) // // // ////////////////////////////////////////////////////////////////////////// (function () { /* Imports */ var Meteor = Package.meteor.Meteor; var _ = Package.underscore._; var JSON = Package.json.JSON; var EJSON = Package.ejson.EJSON; /* Package-scope variables */ var IdMap; (function () { //////////////////////////////////////////////////////////////////////////////// // // // packages/id-map/id-map.js // // // //////////////////////////////////////////////////////////////////////////////// // IdMap = function (idStringify, idParse) { // 1 var self = this; // 2 self._map = {}; // 3 self._idStringify = idStringify || JSON.stringify; // 4 self._idParse = idParse || JSON.parse; // 5 }; // 6 // 7 // Some of these methods are designed to match methods on OrderedDict, since // 8 // (eg) ObserveMultiplex and _CachingChangeObserver use them interchangeably. // 9 // (Conceivably, this should be replaced with "UnorderedDict" with a specific // 10 // set of methods that overlap between the two.) // 11 // 12 _.extend(IdMap.prototype, { // 13 get: function (id) { // 14 var self = this; // 15 var key = self._idStringify(id); // 16 return self._map[key]; // 17 }, // 18 set: function (id, value) { // 19 var self = this; // 20 var key = self._idStringify(id); // 21 self._map[key] = value; // 22 }, // 23 remove: function (id) { // 24 var self = this; // 25 var key = self._idStringify(id); // 26 delete self._map[key]; // 27 }, // 28 has: function (id) { // 29 var self = this; // 30 var key = self._idStringify(id); // 31 return _.has(self._map, key); // 32 }, // 33 empty: function () { // 34 var self = this; // 35 return _.isEmpty(self._map); // 36 }, // 37 clear: function () { // 38 var self = this; // 39 self._map = {}; // 40 }, // 41 // Iterates over the items in the map. Return `false` to break the loop. // 42 forEach: function (iterator) { // 43 var self = this; // 44 // don't use _.each, because we can't break out of it. // 45 var keys = _.keys(self._map); // 46 for (var i = 0; i < keys.length; i++) { // 47 var breakIfFalse = iterator.call(null, self._map[keys[i]], // 48 self._idParse(keys[i])); // 49 if (breakIfFalse === false) // 50 return; // 51 } // 52 }, // 53 size: function () { // 54 var self = this; // 55 return _.size(self._map); // 56 }, // 57 setDefault: function (id, def) { // 58 var self = this; // 59 var key = self._idStringify(id); // 60 if (_.has(self._map, key)) // 61 return self._map[key]; // 62 self._map[key] = def; // 63 return def; // 64 }, // 65 // Assumes that values are EJSON-cloneable, and that we don't need to clone // 66 // IDs (ie, that nobody is going to mutate an ObjectId). // 67 clone: function () { // 68 var self = this; // 69 var clone = new IdMap(self._idStringify, self._idParse); // 70 self.forEach(function (value, id) { // 71 clone.set(id, EJSON.clone(value)); // 72 }); // 73 return clone; // 74 } // 75 }); // 76 // 77 // 78 //////////////////////////////////////////////////////////////////////////////// }).call(this); /* Exports */ if (typeof Package === 'undefined') Package = {}; Package['id-map'] = { IdMap: IdMap }; })();