@reactivehub/cli
Version:
80 lines (67 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _flat = require('flat');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const QueryOperators = {
EQUALS: '=',
NOT_EQUALS: '!=',
LIKE: 'LIKE',
IN: 'IN',
GT: '>',
GTE: '>=',
LT: '<',
LTE: '<='
};
const TypeFilterOps = {
STRING: {
operators: [QueryOperators.EQUALS, QueryOperators.NOT_EQUALS, QueryOperators.LIKE, QueryOperators.IN]
},
NUMBER: {
operators: [QueryOperators.EQUALS, QueryOperators.NOT_EQUALS, QueryOperators.GT, QueryOperators.GTE, QueryOperators.LT, QueryOperators.LTE, QueryOperators.IN]
},
DATE: [QueryOperators.EQUALS, QueryOperators.NOT_EQUALS, QueryOperators.GT, QueryOperators.GTE, QueryOperators.LT, QueryOperators.LTE, QueryOperators.IN],
BOOLEAN: [QueryOperators.EQUALS, QueryOperators.NOT_EQUALS],
ARRAY: [QueryOperators.IN],
OBJECT: [QueryOperators.EQUALS]
};
const checkPropertyTypes = (model = {}) => {
let status = true;
let messages = [];
if (model && (0, _keys2.default)(model).length > 0) {
const flatModel = (0, _flat.flatten)(model, { maxDepth: null });
messages = (0, _keys2.default)(flatModel).map(key => {
const value = String(flatModel[key]);
if (TypeFilterOps[value.toUpperCase()]) return false;
return `${key}: ${value} type not allowed.`;
}).filter(item => item);
status = messages.length === 0;
}
return { status, messages };
};
const checkQuery = condition => {
const split = condition.split('AND');
const messages = [];
let status = true;
split.forEach(query => {
const hasOr = query.match(/(OR|or)/g);
const hasAllowedOperator = query.match(/(=|!=|<>|<|<=|>|>=|IN|LIKE)/g);
if (hasOr) {
status = false;
messages.push('OR in query condition is not allowed.');
}
if (!hasAllowedOperator) {
status = false;
messages.push(`Valid operators not found on condition "${query}" (Allowed operators: =, !=, <>, <, <=, >, >=, IN, LIKE).`);
}
});
return { status, messages };
};
exports.default = {
checkPropertyTypes,
checkQuery
};
//# sourceMappingURL=query.js.map