hydrate-mongodb
Version:
An Object Document Mapper (ODM) for MongoDB.
40 lines (39 loc) • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var reference_1 = require("./reference");
var persistenceError_1 = require("./persistenceError");
var Observer = (function () {
function Observer(callback) {
this._watching = [];
this._onChange = this._createOnChangeEvent(callback);
}
Observer.prototype.watch = function (obj) {
if (!this._watching)
throw new persistenceError_1.PersistenceError("Observer is destroyed.");
Object.observe(obj, this._onChange);
this._watching.push(obj);
};
Observer.prototype.destroy = function () {
if (!this._watching)
return;
for (var i = 0; i < this._watching.length; i++) {
Object.unobserve(this._watching[i], this._onChange);
}
this._watching = undefined;
};
Observer.prototype._createOnChangeEvent = function (callback) {
var _this = this;
return function (changes) {
for (var i = 0; i < changes.length; i++) {
var change = changes[i];
if (change.type != 'update' || !reference_1.Reference.areEqual(change.oldValue, change.object[change.name])) {
callback();
_this.destroy();
return;
}
}
};
};
return Observer;
}());
exports.Observer = Observer;