@forzalabs/remora
Version:
A powerful CLI tool for seamless data translation.
68 lines (67 loc) • 3.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class RequestExecutorClass {
constructor() {
this.evaluateFilter = (record, filter) => {
const evaluate = (baseRecord, baseFilter) => {
const { member, operator, values } = baseFilter;
const value = baseRecord[member];
const singleValue = values[0];
switch (operator) {
case 'equals':
return value === singleValue;
case 'notEquals':
return value !== singleValue;
case 'contains':
return typeof value === 'string' && value.includes(singleValue);
case 'notContains':
return typeof value === 'string' && !value.includes(singleValue);
case 'startsWith':
return typeof value === 'string' && value.startsWith(singleValue);
case 'endsWith':
return typeof value === 'string' && value.endsWith(singleValue);
case 'greaterThan':
return typeof value === 'number' && value > Number(singleValue);
case 'greaterThanOrEquals':
return typeof value === 'number' && value >= Number(singleValue);
case 'lessThan':
return typeof value === 'number' && value < Number(singleValue);
case 'lessThanOrEquals':
return typeof value === 'number' && value <= Number(singleValue);
case 'in':
return values.includes(value);
case 'notIn':
return !values.includes(value);
case 'between':
return values.length === 2 && value >= values[0] && value <= values[1];
case 'notBetween':
return values.length === 2 && (value < values[0] || value > values[1]);
case 'isNull':
return value === null || value === undefined;
case 'isNotNull':
return value !== null && value !== undefined;
case 'true':
return value === true;
case 'false':
return value === false;
case 'matches':
return typeof value === 'string' && new RegExp(singleValue).test(value);
case 'notMatches':
return typeof value === 'string' && !new RegExp(singleValue).test(value);
default:
throw new Error(`Unsupported filter operator: ${operator}`);
}
};
const { and, or } = filter;
const baseResult = evaluate(record, filter);
if (and)
return baseResult && and.every(subFilter => this.evaluateFilter(record, subFilter));
if (or)
return baseResult || or.some(subFilter => this.evaluateFilter(record, subFilter));
else
return baseResult;
};
}
}
const RequestExecutor = new RequestExecutorClass();
exports.default = RequestExecutor;