UNPKG

odatafy-parser

Version:

generate odatafy ast from odata query parameters

47 lines (45 loc) 2.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const peggy_1 = __importDefault(require("peggy")); const filterAstPostProc_1 = __importDefault(require("../processing/filterAstPostProc")); const filterExpressionPreProc_1 = __importDefault(require("../processing/filterExpressionPreProc")); const errors_1 = require("../types/errors"); const nodes_1 = require("../types/nodes"); const utils_1 = require("../utils"); //import astPostProc from '../processing/astPostProc'; const filterParser_1 = require("./filterParser"); const computeParser = peggy_1.default.generate(filterParser_1.filterGrammar + ` start = head:computeItem tail:( COMMA @computeItem )* {return{nodeType: "ComputeNode", computeProps: [head, ...tail]}} computeItem = commonExpr:(commonExpr / value:$mathExpr {return {type: 'mathExpr', value: value}} / odataIdentifier) RWS "as" RWS computeIdentifier:$odataIdentifier {return {nodeType: "ComputeItemNode", commonExpr:commonExpr, computeIdentifier: computeIdentifier}} `, { allowedStartRules: ['start'] }); function parseCompute(expr) { const computeNode = { nodeType: nodes_1.NodeTypes.ComputeNode, value: [] }; try { expr = (0, filterExpressionPreProc_1.default)(expr); const ast = computeParser.parse(expr); ast.computeProps.forEach((computeItem) => { computeItem.commonExpr = (0, filterAstPostProc_1.default)(computeItem.commonExpr); computeNode.value.push(computeItem); }); return computeNode; } catch (e) { throw (0, utils_1.getOdatafyParserError)('malformed compute expression', errors_1.OdatafyQueryOptions.Compute); } } exports.default = { /** * Parser for compute expressions * @param expr compute expression as string * @example computeParser.parse("FirstName as Name") * @returns Abstract Syntax Tree (AST) of type ComputeNode */ parse: parseCompute };