scim2-filter
Version:
scim 2.0 filter parser
37 lines • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.valfilter = (f, path) => {
if (path && "attrPath" in f) {
f = Object.assign(Object.assign({}, f), { attrPath: `${path}.${f.attrPath}` });
}
switch (f.op) {
case "and":
case "or":
return Object.assign(Object.assign({}, f), { filters: f.filters.map(c => exports.valfilter(c, path)) });
case "not":
return Object.assign(Object.assign({}, f), { filter: exports.valfilter(f, path) });
case "[]":
return exports.valfilter(f.valFilter, f.attrPath);
}
return f;
};
// 1 and 2 or (1 or b) => 1 and 2 or 1 or b
exports.log = (f) => {
switch (f.op) {
case "and":
case "or":
const filters = f.filters.map(exports.log);
const result = [];
filters.forEach(c => {
if (c.op == f.op) {
c.filters.forEach(cc => result.push(cc));
}
else {
result.push(c);
}
});
return Object.assign(Object.assign({}, f), { filters: result });
}
return f;
};
//# sourceMappingURL=flatten.js.map