rule-filter-validator
Version:
A object and scope validator based on structured rules
44 lines • 1.52 kB
JavaScript
/**
*
* @param filter Filter
* @param field string name of field to remove
* @param filterPath (optional)
* @param _history (private)
* @returns
*/
export function removeFieldFromFilter(filter, field, filterPath = '', _history = '') {
if (typeof filter !== 'object' || filter === null) {
return filter;
}
const keys = Object.keys(filter);
if (keys.length === 0) {
return filter;
}
const alteredFilter = {};
keys.forEach(key => {
const value = filter[key];
if (Array.isArray(value)) {
const logicalKey = key;
const logicalFilter = () => value
.map((subFilter) => removeFieldFromFilter(subFilter, field, filterPath, `${_history}.${key}`))
.filter(Boolean);
if (logicalKey === '_or') {
alteredFilter._or = logicalFilter().filter(v => Object.keys(v).length > 0);
}
else if (logicalKey === '_and') {
alteredFilter._and = logicalFilter().filter(v => Object.keys(v).length > 0);
}
else {
alteredFilter[key] = value;
}
return;
}
const alteredValue = removeFieldFromFilter(value, field, filterPath, _history + '.' + key);
if (key === field && (!filterPath || _history.endsWith(filterPath))) {
return;
}
alteredFilter[key] = alteredValue;
});
return alteredFilter;
}
//# sourceMappingURL=remove-field-from-filter.js.map