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

mastermatt/scim2-parse-filter

This branch is 62 commits behind thomaspoignant/scim2-parse-filter:master.

Folders and files

NameName
Last commit message
Last commit date
Aug 7, 2022
Aug 27, 2022
Aug 27, 2022
Nov 13, 2019
Aug 7, 2022
Nov 13, 2019
Jul 30, 2021
Apr 3, 2020
Nov 13, 2019
Mar 29, 2022
Sep 29, 2022
Sep 29, 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

Languages

  • TypeScript 100.0%