Skip to content

RFC7643 SCIM(System for Cross-domain Identity Management) 2.0 filter parser.

License

Notifications You must be signed in to change notification settings

thomaspoignant/scim2-parse-filter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Thomas Poignant
Feb 1, 2022
dadf840 · Feb 1, 2022

History

96 Commits
Aug 9, 2021
Aug 3, 2021
Aug 3, 2021
Nov 13, 2019
Nov 13, 2019
Jul 30, 2021
Apr 3, 2020
Nov 13, 2019
Nov 9, 2021
Feb 1, 2022
Feb 1, 2022
Nov 13, 2019

Repository files navigation

scim2-parse-filter

npm version Build Status Downloads

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

parse

You can parse filter query and get ast.

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"
          }
        ]
      }
    }
  ]
});

filter

and You can use filter in json.

import {parse, filter} from 'scim2-parse-filter';

const f = filter(parse(`userName eq "[email protected]"`));
const users = [
  { userName: "[email protected]" },
  { userName: "[email protected]" }
];
const ret = users.filter(f);
assert.deepEqual(ret, [users[0]]);

stringify

and you can convert an AST back into a SCIM query.

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"]');

About

RFC7643 SCIM(System for Cross-domain Identity Management) 2.0 filter parser.

Resources

License

Stars

Watchers

Forks

Packages

No packages published