UNPKG

@drip_sync/drip

Version:

Scalable incremental sync for MongoDB aggregation pipelines

41 lines (40 loc) 1.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isObjectExpression = isObjectExpression; exports.scopeExpression = scopeExpression; const lodash_1 = __importDefault(require("lodash")); const scope_operator_1 = require("./scope_operator"); const scope_path_expression_1 = require("./scope_path_expression"); const is_operator_1 = require("./is_operator"); const atoms_1 = require("./atoms"); function isPathExpression(e) { return typeof e === "string" && e.startsWith("$"); } function isArrayExpression(e) { return Array.isArray(e); } function isObjectExpression(e) { return (0, atoms_1.isComposite)(e) && !Array.isArray(e); } function scopeExpression(e, root, vars) { // See https://www.mongodb.com/docs/manual/reference/glossary/#std-term-expression if ((0, is_operator_1.isOperator)(e)) { return (0, scope_operator_1.scopeOperator)(e, root, vars); } else if (isPathExpression(e)) { return (0, scope_path_expression_1.scopePathExpression)(e, root, vars); } else if (isArrayExpression(e)) { return e.map((ee) => scopeExpression(ee, root, vars)); } else if (isObjectExpression(e)) { return lodash_1.default.mapValues(e, (v) => scopeExpression(v, root, vars)); } else { // A constant, no need to scope return e; } }