UNPKG

@reactivehub/cli

Version:
80 lines (67 loc) 2.29 kB
'use strict'; 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