Skip to content

Commit

Permalink
task: code optimisations
Browse files Browse the repository at this point in the history
  • Loading branch information
s.jovanoski committed Jan 2, 2024
1 parent b217d76 commit f0d0d60
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
40 changes: 27 additions & 13 deletions src/utils/convertOperators.ts
@@ -1,16 +1,30 @@
import { operatorResolver } from './operatorResolver';
import { _ } from '@feathersjs/commons/lib';

export const convertOperators = (query: any, escapeFn: any, root = ''): string[] =>
Array.isArray(query) ?
query.map(q => convertOperators(q, escapeFn, root)) :
Object.keys(query).map((prop: any) =>
prop === '$or' ?
operatorResolver.$or(convertOperators(query[prop], escapeFn)) :
prop === '$and' ?
operatorResolver.$and(convertOperators(query[prop], escapeFn, prop)) :
(prop in operatorResolver) ?
operatorResolver[prop](...Object.values(escapeFn(root, query[prop]))) :
_.isObject(query[prop]) ?
operatorResolver.$and(convertOperators(query[prop], escapeFn, prop)) :
operatorResolver.$eq(...Object.values(escapeFn(prop, query[prop]))));
export const convertOperators = (query: any, escapeFn: any, root = ''): any => {
if (Array.isArray(query)) {
return query.map(q => convertOperators(q, escapeFn, root));
}

return Object.keys(query).map((prop) => {
if (prop === '$or') {
return operatorResolver.$or(convertOperators(query[prop], escapeFn));
}

if (prop === '$and') {
return operatorResolver.$and(convertOperators(query[prop], escapeFn, prop));
}

if (prop in operatorResolver) {
const values = Object.values(escapeFn(root, query[prop]));
return operatorResolver[prop](...values);
}

if (_.isObject(query[prop])) {
return operatorResolver.$and(convertOperators(query[prop], escapeFn, prop));
}

const values = Object.values(escapeFn(prop, query[prop]));
return operatorResolver.$eq(...values);
});
};
4 changes: 1 addition & 3 deletions src/utils/operatorResolver.ts
Expand Up @@ -21,7 +21,5 @@ export const operatorResolver: any = {
$or: (value: any) => `(${value.join(' OR ')})`,
$and: (value: any) => Array.isArray(value) && value.length > 1 ?
`(${value.join(' AND ')})` :
Array.isArray(value[0]) ?
value[0][0] :
value[0]
Array.isArray(value[0]) ? value[0][0] : value[0]
}

0 comments on commit f0d0d60

Please sign in to comment.