rule-filter-validator
Version:
A object and scope validator based on structured rules
46 lines • 1.58 kB
JavaScript
/**
*
* @param filter Filter
* @param oldField string name of field to rename
* @param newField string new name of field
* @param filterPath (optional)
* @param _history (private)
* @returns
*/
export function renameFieldInFilter(filter, oldField, newField, 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) => renameFieldInFilter(subFilter, oldField, newField, filterPath, `${_history}.${key}`))
.filter(Boolean);
if (logicalKey === '_or') {
alteredFilter._or = logicalFilter();
}
else if (logicalKey === '_and') {
alteredFilter._and = logicalFilter();
}
else {
alteredFilter[key] = value;
}
return;
}
const alteredValue = renameFieldInFilter(value, oldField, newField, filterPath, _history + '.' + key);
if (key === oldField && (!filterPath || _history.endsWith(filterPath))) {
alteredFilter[newField] = alteredValue;
return;
}
alteredFilter[key] = alteredValue;
});
return alteredFilter;
}
//# sourceMappingURL=rename-field-in-filter.js.map