mongoose-diff-tracking
Version:
Manage Mongo Collection diff History and versions
42 lines (36 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.visitUpdateOperation = visitUpdateOperation;
var _normalizeUpdateOperation = require('./normalize-update-operation.js');
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* @public
* Modify FindOperation by passing visitor functions.
*/
function visitUpdateOperation(uOp, visitor) {
return ['$set', '$inc', '$min', '$max', '$mul', '$addToSet', '$pop', '$pull', '$push', '$currentDate', '$bit', '$unset', '$restore', '$rename'].reduce(function (acc, opName) {
return visitOp(acc, visitor, opName);
}, (0, _normalizeUpdateOperation.normalizeUpdateOperation)(uOp));
}
function visitOp(uOp, visitor, opName) {
if (uOp[opName] == null) {
return uOp;
}
var ret = Object.assign({}, uOp);
var generalVisitor = visitor.operation;
if (generalVisitor != null) {
ret = Object.assign(ret, _defineProperty({}, opName, generalVisitor(ret[opName])));
}
// $FlowIssue(compatible)
var specificVisitor = visitor[opName];
if (specificVisitor != null) {
// $FlowIssue(compatible)
var _op = ret[opName];
// $FlowIssue(compatible)
ret = Object.assign(ret, _defineProperty({}, opName, specificVisitor(_op)));
}
// $FlowIssue(compatible)
return ret;
}