UNPKG

odatafy-parser

Version:

generate odatafy ast from odata query parameters

35 lines (34 loc) 1.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const errors_1 = require("../types/errors"); const nodes_1 = require("../types/nodes"); const utils_1 = require("../utils"); exports.default = { /** * Parser for orderby expression * @param expr orderby expression as string * @example orderbyParser.parse("Country/Name asc,Street desc") * @returns AbstractSyntaxTree (AST) of type OrderbyNode */ parse: function parseOrderby(expr) { const regexp = new RegExp('^(([a-zA-z/]+ (asc|desc),)|[a-zA-z/]+,)*(([a-zA-z/]+ (asc|desc))|[a-zA-z/]+)$', 'gmy'); if (regexp.test(expr)) { return { nodeType: nodes_1.NodeTypes.OrderbyNode, value: expr.split(',').map((ele) => { const splt_ele = ele.trim().split(' '); return { nodeType: nodes_1.NodeTypes.OrderbyItemNode, type: (splt_ele.length == 1 ? nodes_1.OrderDirection.Asc : splt_ele[1]), value: splt_ele[0] }; }) }; } else { throw (0, utils_1.getOdatafyParserError)('malformed orderby expression', errors_1.OdatafyQueryOptions.OrderBy); } } };