mongoose-diff-tracking
Version:
Manage Mongo Collection diff History and versions
77 lines (66 loc) • 2.17 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.normalizeUpdateOperation = normalizeUpdateOperation;
exports.toUpdateOperation = toUpdateOperation;
var _normalizeQueryCondition = require('./normalize-query-condition.js');
/**
* 1. When no operators are found, convert it into $set operator.
* 2. Normalize $addToSet.
* 3. Normalize $pull.
* 4. Normalize $push.
*/
function normalizeUpdateOperation(_operation) {
var operation = toUpdateOperation(_operation);
if (operation.$addToSet != null) {
operation = Object.assign({}, operation, { $addToSet: normalizeAddToSetOperator(operation.$addToSet) });
}
if (operation.$pull != null) {
operation = Object.assign({}, operation, { $pull: normalizePullOperator(operation.$pull) });
}
if (operation.$push != null) {
operation = Object.assign({}, operation, { $push: normalizePushOperator(operation.$push) });
}
return operation;
}
function normalizeAddToSetOperator($addToSet) {
var modified = {};
Object.keys($addToSet).forEach(function (docPath) {
var modifier = $addToSet[docPath];
// Is type of newVal PushModifier or just the value?
if (modifier.$each == null) {
modifier = { $each: [modifier] };
}
modified[docPath] = modifier;
});
return modified;
}
function normalizePullOperator($pull) {
var modified = {};
Object.keys($pull).forEach(function (docPath) {
modified[docPath] = (0, _normalizeQueryCondition.normalizeQueryCondition)($pull[docPath]);
});
return modified;
}
function normalizePushOperator($push) {
var modified = {};
Object.keys($push).forEach(function (docPath) {
var modifier = $push[docPath];
// Is type of newVal PushModifier or just the value?
if (modifier.$each == null) {
modifier = { $each: [modifier] };
}
modified[docPath] = modifier;
});
return modified;
}
/**
* When no operators are found, convert it into $set operator.
*/
function toUpdateOperation(operation) {
var firstKey = Object.keys(operation)[0];
if (!firstKey) return operation;
if (firstKey.charAt(0) !== '$') return { $set: operation };
return operation;
}