UNPKG

@pelotech/nestjsx-crud-request

Version:

NestJS CRUD for RESTful APIs - request query builder (temporary patch)

97 lines 3.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const nestjsx_util_1 = require("@pelotech/nestjsx-util"); const exceptions_1 = require("./exceptions"); const types_1 = require("./types"); exports.deprecatedComparisonOperatorsList = [ 'eq', 'ne', 'gt', 'lt', 'gte', 'lte', 'starts', 'ends', 'cont', 'excl', 'in', 'notin', 'isnull', 'notnull', 'between', 'contArr', 'intersectsArr', ]; exports.comparisonOperatorsList = [ ...exports.deprecatedComparisonOperatorsList, ...nestjsx_util_1.objKeys(types_1.CondOperator).map((n) => types_1.CondOperator[n]), ]; exports.sortOrdersList = ['ASC', 'DESC']; const comparisonOperatorsListStr = exports.comparisonOperatorsList.join(); const sortOrdersListStr = exports.sortOrdersList.join(); function validateFields(fields) { if (!nestjsx_util_1.isArrayStrings(fields)) { throw new exceptions_1.RequestQueryException('Invalid fields. Array of strings expected'); } } exports.validateFields = validateFields; function validateCondition(val, cond) { if (!nestjsx_util_1.isObject(val) || !nestjsx_util_1.isStringFull(val.field)) { throw new exceptions_1.RequestQueryException(`Invalid field type in ${cond} condition. String expected`); } validateComparisonOperator(val.operator); } exports.validateCondition = validateCondition; function validateComparisonOperator(operator) { if (!exports.comparisonOperatorsList.includes(operator)) { throw new exceptions_1.RequestQueryException(`Invalid comparison operator. ${comparisonOperatorsListStr} expected`); } } exports.validateComparisonOperator = validateComparisonOperator; function validateJoin(join) { if (!nestjsx_util_1.isObject(join) || !nestjsx_util_1.isStringFull(join.field)) { throw new exceptions_1.RequestQueryException('Invalid join field. String expected'); } if (!nestjsx_util_1.isUndefined(join.select) && !nestjsx_util_1.isArrayStrings(join.select)) { throw new exceptions_1.RequestQueryException('Invalid join select. Array of strings expected'); } } exports.validateJoin = validateJoin; function validateSort(sort) { if (!nestjsx_util_1.isObject(sort) || !nestjsx_util_1.isStringFull(sort.field)) { throw new exceptions_1.RequestQueryException('Invalid sort field. String expected'); } if (!nestjsx_util_1.isEqual(sort.order, exports.sortOrdersList[0]) && !nestjsx_util_1.isEqual(sort.order, exports.sortOrdersList[1])) { throw new exceptions_1.RequestQueryException(`Invalid sort order. ${sortOrdersListStr} expected`); } } exports.validateSort = validateSort; function validateNumeric(val, num) { if (!nestjsx_util_1.isNumber(val)) { throw new exceptions_1.RequestQueryException(`Invalid ${num}. Number expected`); } } exports.validateNumeric = validateNumeric; function validateParamOption(options, name) { if (!nestjsx_util_1.isObject(options)) { throw new exceptions_1.RequestQueryException(`Invalid param ${name}. Invalid crud options`); } const option = options[name]; if (option && option.disabled) { return; } if (!nestjsx_util_1.isObject(option) || nestjsx_util_1.isNil(option.field) || nestjsx_util_1.isNil(option.type)) { throw new exceptions_1.RequestQueryException(`Invalid param option in Crud`); } } exports.validateParamOption = validateParamOption; function validateUUID(str, name) { const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; const uuidV4 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i; if (!uuidV4.test(str) && !uuid.test(str)) { throw new exceptions_1.RequestQueryException(`Invalid param ${name}. UUID string expected`); } } exports.validateUUID = validateUUID; //# sourceMappingURL=request-query.validator.js.map