UNPKG

odatafy-parser

Version:

generate odatafy ast from odata query parameters

102 lines (101 loc) 3.98 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.searchParser = exports.selectParser = exports.computeParser = exports.expandParser = exports.topParser = exports.skipParser = exports.orderbyParser = exports.filterParser = exports.parseODataUrl = void 0; const url_1 = __importDefault(require("url")); const computeParser_1 = __importDefault(require("./parsing/computeParser")); exports.computeParser = computeParser_1.default; const filterParser_1 = __importDefault(require("./parsing/filterParser")); exports.filterParser = filterParser_1.default; const orderbyParser_1 = __importDefault(require("./parsing/orderbyParser")); exports.orderbyParser = orderbyParser_1.default; const skipParser_1 = __importDefault(require("./parsing/skipParser")); exports.skipParser = skipParser_1.default; const topParser_1 = __importDefault(require("./parsing/topParser")); exports.topParser = topParser_1.default; const expandParser_1 = __importDefault(require("./parsing/expandParser")); exports.expandParser = expandParser_1.default; const selectParser_1 = __importDefault(require("./parsing/selectParser")); exports.selectParser = selectParser_1.default; const searchParser_1 = __importDefault(require("./parsing/searchParser")); exports.searchParser = searchParser_1.default; const utils_1 = require("./utils"); const countParser_1 = __importDefault(require("./parsing/countParser")); /** * parse oData parameter expressions * @param parameters oData url parameters * @returns parsed oData parameters */ function parseOData(parameters) { const result = {}; if (parameters.filter) { result.filter = filterParser_1.default.parse(parameters.filter); } if (parameters.orderby) { result.orderby = orderbyParser_1.default.parse(parameters.orderby); } if (parameters.skip) { result.skip = skipParser_1.default.parse(parameters.skip); } if (parameters.top) { result.top = topParser_1.default.parse(parameters.top); } if (parameters.expand) { result.expand = expandParser_1.default.parse(parameters.expand); } if (parameters.compute) { result.compute = computeParser_1.default.parse(parameters.compute); } if (parameters.select) { result.select = selectParser_1.default.parse(parameters.select); } if (parameters.search) { result.search = searchParser_1.default.parse(parameters.search); } if (parameters.count) { result.count = countParser_1.default.parse(parameters.count); } return result; } /** * parse oData parameter expressions from url * @param oDataUrl oData url as string, from req.url * @example //returns {top: 4} * parseODataUrl("//https://services.odata.org/v2/northwind/northwind.svc/Customers?$top=4") * @returns parsed oData parameters */ function parseODataUrl(oDataUrl) { let query; try { query = url_1.default.parse(oDataUrl, true).query; } catch (e) { throw (0, utils_1.getOdatafyParserError)('malformed URL'); } const validParams = [ 'filter', 'orderby', 'skip', 'top', 'expand', 'compute', 'select', 'search', 'count' ]; const params = Object.keys(query); const parseParameters = {}; validParams.forEach((param) => { //check if url if (params.includes(param) && params.includes('$' + param)) { throw (0, utils_1.getOdatafyParserError)(`Malformed oData url, cannot contain param: ${param} and param: $${param}`); } if (params.includes(param) || params.includes('$' + param)) { parseParameters[param] = query[params.includes(param) ? param : '$' + param]; } }); return parseOData(parseParameters); } exports.parseODataUrl = parseODataUrl;