@equantic/linq
Version:
eQuantic Linq for JavaScript
31 lines (30 loc) • 991 B
JavaScript
import { splitArguments } from '../funcs/index.js';
export const funcRegex = /(\b[^()]+)\((.*)\)$/;
export function parseExpression(exp) {
const arr = exp.split(':');
const [prop, ...rest] = arr;
const propertyName = prop.trim();
let operator = 'eq';
let value = '';
if (rest.length > 0) {
const v = rest.join(':');
const match = v.match(funcRegex);
if (match) {
operator = match[1];
value = match[2];
}
else
value = v;
}
return { column: propertyName, value, operator };
}
export function parseComposite(exp, result) {
const compositeMatch = exp.match(funcRegex);
if (compositeMatch == null || compositeMatch.length <= 1 || compositeMatch[1].indexOf(':') >= 0)
return null;
const operator = compositeMatch[1];
if (!operator)
return null;
const args = splitArguments(compositeMatch[2]);
return { values: args, compositeOperator: operator };
}