This is a fork https://www.npmjs.com/package/scim2-filter version 0.2.0 with bug correction.
npm install scim2-parse-filterscim2-parse-filter
============



RFC7643 SCIM(System for Cross-domain Identity Management) 2.0 filter parser.
see section 3.4.2.2. Filtering.
This implements filter syntax parser and json filter function.
This is a fork https://www.npmjs.com/package/scim2-filter version 0.2.0 with bug correction.
usage
-----
javascript
import {parse} from 'scim2-parse-filter';const f = parse(
userType eq "Employee" and emails[type eq "work" and value co "@example.com"]);
assert.deepEqual(f, {
op:"and",
filters:[
{
op:"eq",
attrPath:"userType",
compValue:"Employee"
},
{
op:"[]",
attrPath:"emails",
valFilter:{
op:"and",
filters:[
{
op:"eq",
attrPath:"type",
compValue:"work"
},
{
op:"co",
attrPath:"value",
compValue:"@example.com"
}
]
}
}
]
});
`$3
and You can use filter in json.`javascript
import {parse, filter} from 'scim2-parse-filter';const f = filter(parse(
userName eq "test1@example.com"));
const users = [
{ userName: "test1@example.com" },
{ userName: "test2@example.com" }
];
const ret = users.filter(f);
assert.deepEqual(ret, [users[0]]);
`$3
and you can convert an AST back into a SCIM query.`typescript
import { Filter, stringify } from 'scim2-parse-filter';const ast: Filter = {
op:"and",
filters:[
{
op:"eq",
attrPath:"userType",
compValue:"Employee"
},
{
op:"[]",
attrPath:"emails",
valFilter:{
op:"and",
filters:[
{
op:"eq",
attrPath:"type",
compValue:"work"
},
{
op:"co",
attrPath:"value",
compValue:"@example.com"
}
]
}
}
]
};
assert.deepEqual(stringify(ast), 'userType eq "Employee" and emails[type eq "work" and value co "@example.com"]');
``