odatafy-parser
Version:
generate odatafy ast from odata query parameters
35 lines (34 loc) • 1.36 kB
JavaScript
;
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);
}
}
};