UNPKG

@goatlab/fluent

Version:

Readable query Interface & API generator for TS and Node

81 lines (80 loc) 3.52 kB
"use strict"; 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;