@goatlab/fluent
Version:
Readable query Interface & API generator for TS and Node
81 lines (80 loc) • 3.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractConditions = void 0;
const js_utils_1 = require("@goatlab/js-utils");
const types_1 = require("../../types");
const isAnyObject_1 = require("./isAnyObject");
const extractConditions = (conditions) => {
const accumulatedClauses = [];
if (!conditions) {
return accumulatedClauses;
}
for (const clause of conditions) {
if (!clause) {
continue;
}
for (const el of Object.keys(clause)) {
const value = clause[el];
if ((0, isAnyObject_1.isAnyObject)(value)) {
const initialKey = el;
const flatten = js_utils_1.Objects.flatten(value);
for (const key of Object.keys(flatten)) {
const transformedKey = key.replace(new RegExp('.[0-9]', 'g'), '');
if (types_1.LogicOperator[transformedKey]) {
if (types_1.LogicOperator[transformedKey] === types_1.LogicOperator.in ||
types_1.LogicOperator[transformedKey] === types_1.LogicOperator.notIn) {
accumulatedClauses.push({
operator: types_1.LogicOperator[transformedKey],
element: `${initialKey}`,
value: value[transformedKey]
});
}
else {
accumulatedClauses.push({
operator: types_1.LogicOperator[transformedKey],
element: `${initialKey}`,
value: flatten[key]
});
}
}
else if (transformedKey.includes('.')) {
const op = key.split('.').slice(-1).pop();
if (!op) {
continue;
}
if (types_1.LogicOperator[op]) {
accumulatedClauses.push({
operator: types_1.LogicOperator[op],
element: `${initialKey}.${key.replace(`.${op}`, '')}`,
value: flatten[key]
});
}
else {
accumulatedClauses.push({
operator: types_1.LogicOperator.equals,
element: `${initialKey}.${key}`,
value: flatten[key]
});
}
}
else {
accumulatedClauses.push({
operator: types_1.LogicOperator.equals,
element: `${initialKey}.${transformedKey}`,
value: flatten[key]
});
}
}
}
else {
accumulatedClauses.push({
operator: types_1.LogicOperator.equals,
element: el,
value
});
}
}
}
return accumulatedClauses.filter((v, i, a) => a.findIndex(v2 => JSON.stringify(v2) === JSON.stringify(v)) === i);
};
exports.extractConditions = extractConditions;