UNPKG

mongoose-diff-tracking

Version:
77 lines (66 loc) 2.17 kB
'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; }