UNPKG

odatafy-mongodb

Version:

convert oData requests through odatafy to MongoDB queries

41 lines (40 loc) 1.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateProjectStage = exports.generateProjectFromSelectExpr = void 0; var odatafy_parser_1 = require("odatafy-parser"); /** * Get a MongoDB project stage based on oData select parameter * @param expr value of select url parameter * @returns MongoDB aggregation pipline project stage */ function generateProjectFromSelectExpr(expr) { var select = odatafy_parser_1.selectParser.parse(expr); return generateProjectStage(select); } exports.generateProjectFromSelectExpr = generateProjectFromSelectExpr; /** * Get MongoDB project stage based on a parsed select expression * @param select ast parsed select from a select expression * @returns MongoDB aggregation pipline project stage */ function generateProjectStage(selectNode) { var projection = {}; //iterate through selectnode selectNode.value.forEach(function (selectPathNode) { var extractedPaths = []; if (selectPathNode.nodeType == odatafy_parser_1.NodeTypes.SelectPathNode) { selectPathNode.value.forEach(function (selectItemNode) { //only include identifier nodes if (selectItemNode.nodeType == odatafy_parser_1.NodeTypes.SelectIdentifierNode) { extractedPaths.push(selectItemNode.value); } }); var path = extractedPaths.join('.'); projection[path] = 1; } }); return { '$project': projection }; } exports.generateProjectStage = generateProjectStage;