UNPKG

mongoose-diff-tracking

Version:
83 lines (72 loc) 2.47 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.visitFindOperation = visitFindOperation; var _normalizeQueryCondition = require('./normalize-query-condition.js'); /** * @public * Modify FindOperation by passing visitor functions. */ function visitFindOperation(where, visitor) { if (where.$and != null) { // $FlowIssue(this-is-not-SimpleFindOperation) return { $and: where.$and.map(function (subWhere) { return visitFindOperation(subWhere, visitor); }) }; } if (where.$nor != null) { // $FlowIssue(this-is-not-SimpleFindOperation) return { $nor: where.$nor.map(function (subWhere) { return visitFindOperation(subWhere, visitor); }) }; } if (where.$or != null) { // $FlowIssue(this-is-not-SimpleFindOperation) return { $or: where.$or.map(function (subWhere) { return visitFindOperation(subWhere, visitor); }) }; } return visitSimpleFindOperation(where, visitor); } /** * @private */ function visitSimpleFindOperation(_where, visitor) { var where = visitor.simpleFindOperation ? visitor.simpleFindOperation(_where) : _where; var queryConditionVisitor = visitor.queryCondition; if (queryConditionVisitor == null) { return where; } var documentPaths = Object.keys(where); var modified = {}; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = documentPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var documentPath = _step.value; // $FlowIssue(queryCondition-is-QueryCondition-or-EqCondition) var _queryCondition = (0, _normalizeQueryCondition.normalizeQueryCondition)(where[documentPath] || {}); modified[documentPath] = queryConditionVisitor(_queryCondition); if (_queryCondition.$not) { modified[documentPath] = Object.assign({}, modified[documentPath], { $not: queryConditionVisitor(_queryCondition.$not) }); } } // $FlowIssue(this-is-SimpleFindOperation) } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return Object.assign({}, where, modified); }