Files
2025-02-26 14:49:25 +07:00

449 lines
14 KiB
JavaScript

//////////////////////////////////////////////////////////////////////////
// //
// This is a generated file. You can view the original //
// source in your browser if your browser supports source maps. //
// Source maps are supported by all recent versions of Chrome, Safari, //
// and Firefox, and by Internet Explorer 11. //
// //
//////////////////////////////////////////////////////////////////////////
(function () {
/* Imports */
var Meteor = Package.meteor.Meteor;
var global = Package.meteor.global;
var meteorEnv = Package.meteor.meteorEnv;
var _ = Package.underscore._;
var Tracker = Package.tracker.Tracker;
var Deps = Package.tracker.Deps;
var EJSON = Package.ejson.EJSON;
var meteorInstall = Package.modules.meteorInstall;
var meteorBabelHelpers = Package['babel-runtime'].meteorBabelHelpers;
var Promise = Package.promise.Promise;
var Symbol = Package['ecmascript-runtime-client'].Symbol;
var Map = Package['ecmascript-runtime-client'].Map;
var Set = Package['ecmascript-runtime-client'].Set;
/* Package-scope variables */
var ReactiveDict;
var require = meteorInstall({"node_modules":{"meteor":{"reactive-dict":{"migration.js":function(require,exports,module){
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/reactive-dict/migration.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
module.export({
ReactiveDict: function () {
return ReactiveDict;
}
});
var ReactiveDict;
module.watch(require("./reactive-dict"), {
ReactiveDict: function (v) {
ReactiveDict = v;
}
}, 0);
ReactiveDict._migratedDictData = {}; // name -> data
ReactiveDict._dictsToMigrate = {}; // name -> ReactiveDict
ReactiveDict._loadMigratedDict = function (dictName) {
if (_.has(ReactiveDict._migratedDictData, dictName)) {
var data = ReactiveDict._migratedDictData[dictName];
delete ReactiveDict._migratedDictData[dictName];
return data;
}
return null;
};
ReactiveDict._registerDictForMigrate = function (dictName, dict) {
if (_.has(ReactiveDict._dictsToMigrate, dictName)) throw new Error("Duplicate ReactiveDict name: " + dictName);
ReactiveDict._dictsToMigrate[dictName] = dict;
};
if (Meteor.isClient && Package.reload) {
// Put old migrated data into ReactiveDict._migratedDictData,
// where it can be accessed by ReactiveDict._loadMigratedDict.
var migrationData = Package.reload.Reload._migrationData('reactive-dict');
if (migrationData && migrationData.dicts) ReactiveDict._migratedDictData = migrationData.dicts; // On migration, assemble the data from all the dicts that have been
// registered.
Package.reload.Reload._onMigrate('reactive-dict', function () {
var dictsToMigrate = ReactiveDict._dictsToMigrate;
var dataToMigrate = {};
for (var dictName in meteorBabelHelpers.sanitizeForInObject(dictsToMigrate)) {
dataToMigrate[dictName] = dictsToMigrate[dictName]._getMigrationData();
}
return [true, {
dicts: dataToMigrate
}];
});
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
},"reactive-dict.js":function(require,exports,module){
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/reactive-dict/reactive-dict.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
module.export({
ReactiveDict: function () {
return ReactiveDict;
}
});
// XXX come up with a serialization method which canonicalizes object key
// order, which would allow us to use objects as values for equals.
function stringify(value) {
if (value === undefined) {
return 'undefined';
}
return EJSON.stringify(value);
}
function parse(serialized) {
if (serialized === undefined || serialized === 'undefined') {
return undefined;
}
return EJSON.parse(serialized);
}
function changed(v) {
v && v.changed();
} // XXX COMPAT WITH 0.9.1 : accept migrationData instead of dictName
var ReactiveDict =
/*#__PURE__*/
function () {
function ReactiveDict(dictName, dictData) {
// this.keys: key -> value
this.keys = {};
if (dictName) {
// name given; migration will be performed
if (typeof dictName === 'string') {
// the normal case, argument is a string name.
// Only run migration logic on client, it will cause
// duplicate name errors on server during reloads.
// _registerDictForMigrate will throw an error on duplicate name.
Meteor.isClient && ReactiveDict._registerDictForMigrate(dictName, this);
var migratedData = Meteor.isClient && ReactiveDict._loadMigratedDict(dictName);
if (migratedData) {
// Don't stringify migrated data
this.keys = migratedData;
} else {
// Use _setObject to make sure values are stringified
this._setObject(dictData || {});
}
this.name = dictName;
} else if ((0, _typeof2.default)(dictName) === 'object') {
// back-compat case: dictName is actually migrationData
// Use _setObject to make sure values are stringified
this._setObject(dictName);
} else {
throw new Error("Invalid ReactiveDict argument: " + dictName);
}
} else if ((0, _typeof2.default)(dictData) === 'object') {
this._setObject(dictData);
}
this.allDeps = new Tracker.Dependency();
this.keyDeps = {}; // key -> Dependency
this.keyValueDeps = {}; // key -> Dependency
} // set() began as a key/value method, but we are now overloading it
// to take an object of key/value pairs, similar to backbone
// http://backbonejs.org/#Model-set
var _proto = ReactiveDict.prototype;
_proto.set = function () {
function set(keyOrObject, value) {
if ((0, _typeof2.default)(keyOrObject) === 'object' && value === undefined) {
// Called as `dict.set({...})`
this._setObject(keyOrObject);
return;
} // the input isn't an object, so it must be a key
// and we resume with the rest of the function
var key = keyOrObject;
value = stringify(value);
var keyExisted = _.has(this.keys, key);
var oldSerializedValue = keyExisted ? this.keys[key] : 'undefined';
var isNewValue = value !== oldSerializedValue;
this.keys[key] = value;
if (isNewValue || !keyExisted) {
// Using the changed utility function here because this.allDeps might not exist yet,
// when setting initial data from constructor
changed(this.allDeps);
} // Don't trigger changes when setting initial data from constructor,
// this.KeyDeps is undefined in this case
if (isNewValue && this.keyDeps) {
changed(this.keyDeps[key]);
if (this.keyValueDeps[key]) {
changed(this.keyValueDeps[key][oldSerializedValue]);
changed(this.keyValueDeps[key][value]);
}
}
}
return set;
}();
_proto.setDefault = function () {
function setDefault(keyOrObject, value) {
if ((0, _typeof2.default)(keyOrObject) === 'object' && value === undefined) {
// Called as `dict.setDefault({...})`
this._setDefaultObject(keyOrObject);
return;
} // the input isn't an object, so it must be a key
// and we resume with the rest of the function
var key = keyOrObject;
if (!_.has(this.keys, key)) {
this.set(key, value);
}
}
return setDefault;
}();
_proto.get = function () {
function get(key) {
this._ensureKey(key);
this.keyDeps[key].depend();
return parse(this.keys[key]);
}
return get;
}();
_proto.equals = function () {
function equals(key, value) {
var _this = this;
// Mongo.ObjectID is in the 'mongo' package
var ObjectID = null;
if (Package.mongo) {
ObjectID = Package.mongo.Mongo.ObjectID;
} // We don't allow objects (or arrays that might include objects) for
// .equals, because JSON.stringify doesn't canonicalize object key
// order. (We can make equals have the right return value by parsing the
// current value and using EJSON.equals, but we won't have a canonical
// element of keyValueDeps[key] to store the dependency.) You can still use
// "EJSON.equals(reactiveDict.get(key), value)".
//
// XXX we could allow arrays as long as we recursively check that there
// are no objects
if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean' && typeof value !== 'undefined' && !(value instanceof Date) && !(ObjectID && value instanceof ObjectID) && value !== null) {
throw new Error("ReactiveDict.equals: value must be scalar");
}
var serializedValue = stringify(value);
if (Tracker.active) {
this._ensureKey(key);
if (!_.has(this.keyValueDeps[key], serializedValue)) {
this.keyValueDeps[key][serializedValue] = new Tracker.Dependency();
}
var isNew = this.keyValueDeps[key][serializedValue].depend();
if (isNew) {
Tracker.onInvalidate(function () {
// clean up [key][serializedValue] if it's now empty, so we don't
// use O(n) memory for n = values seen ever
if (!_this.keyValueDeps[key][serializedValue].hasDependents()) {
delete _this.keyValueDeps[key][serializedValue];
}
});
}
}
var oldValue = undefined;
if (_.has(this.keys, key)) {
oldValue = parse(this.keys[key]);
}
return EJSON.equals(oldValue, value);
}
return equals;
}();
_proto.all = function () {
function all() {
this.allDeps.depend();
var ret = {};
_.each(this.keys, function (value, key) {
ret[key] = parse(value);
});
return ret;
}
return all;
}();
_proto.clear = function () {
function clear() {
var _this2 = this;
var oldKeys = this.keys;
this.keys = {};
this.allDeps.changed();
_.each(oldKeys, function (value, key) {
changed(_this2.keyDeps[key]);
if (_this2.keyValueDeps[key]) {
changed(_this2.keyValueDeps[key][value]);
changed(_this2.keyValueDeps[key]['undefined']);
}
});
}
return clear;
}();
_proto.delete = function () {
function _delete(key) {
var didRemove = false;
if (_.has(this.keys, key)) {
var oldValue = this.keys[key];
delete this.keys[key];
changed(this.keyDeps[key]);
if (this.keyValueDeps[key]) {
changed(this.keyValueDeps[key][oldValue]);
changed(this.keyValueDeps[key]['undefined']);
}
this.allDeps.changed();
didRemove = true;
}
return didRemove;
}
return _delete;
}();
_proto.destroy = function () {
function destroy() {
this.clear();
if (this.name && _.has(ReactiveDict._dictsToMigrate, this.name)) {
delete ReactiveDict._dictsToMigrate[this.name];
}
}
return destroy;
}();
_proto._setObject = function () {
function _setObject(object) {
var _this3 = this;
_.each(object, function (value, key) {
_this3.set(key, value);
});
}
return _setObject;
}();
_proto._setDefaultObject = function () {
function _setDefaultObject(object) {
var _this4 = this;
_.each(object, function (value, key) {
_this4.setDefault(key, value);
});
}
return _setDefaultObject;
}();
_proto._ensureKey = function () {
function _ensureKey(key) {
if (!(key in this.keyDeps)) {
this.keyDeps[key] = new Tracker.Dependency();
this.keyValueDeps[key] = {};
}
}
return _ensureKey;
}(); // Get a JSON value that can be passed to the constructor to
// create a new ReactiveDict with the same contents as this one
_proto._getMigrationData = function () {
function _getMigrationData() {
// XXX sanitize and make sure it's JSONible?
return this.keys;
}
return _getMigrationData;
}();
return ReactiveDict;
}();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}}}}},{
"extensions": [
".js",
".json"
]
});
var exports = require("/node_modules/meteor/reactive-dict/migration.js");
/* Exports */
Package._define("reactive-dict", exports, {
ReactiveDict: ReactiveDict
});
})();