Parse/Apply JS-like condition expressions on an object of flags.
Easily apply a JS logic condition string based on an array of flags. E.g.: bunch of flags (traits) of a user fetched from a fast backend (e.g. redis). Requested entity requires a bunch of flags with some logic (and, or, threshold) to apply.
[
'countryFlag:NL',
'languageFlag:EN',
'proUser'
]
proUser && (countryFlag:NL || languageFlag:NL)
proUser + countryFlag:NL + languageFlag:NL + !optedOut > 2
- Parenthesis is supported
- Valid operators (logic):
&&
(and)||
(or)
- Valid threshold operators:
+
(add)-
(subtract)
- Valid comparison operators (for thresholds):
>
(gt)<
(lt)
- Invert
!
(not, e.g. flag does not apply,!someFlag
)
- Flags can contain these characters:
a-z
A-Z
0-9
_
(underscore):
(colon).
(dot)
- Flags must start with
a-z
orA-Z
. - Flags should be present in the condition in plain texts (so no quotes surrounding them)
- Flags are case sensitive
import { validate, flags, apply } from 'condition-flags-parser'
const condition = '(someFlag:123 + anotherFlag) + (countryFlag:NL + !countryFlag:GB) > 3'
// 2nd argument = throw Error in case of validation Error
// Boolean, true if valid, or Throws
console.log(validate(condition, true))
// List flags the condition is working with (for e.g. redis `smismember`)
console.log(flags(condition))
// Returns boolean (condition applies?)
console.log(apply(condition, [
'someFlag:123',
'countryFlag:NL',
'countryFlag:GB',
'anotherFlag',
]))
Tests: npm run test