JS Condition Parser
Parse/Apply JS-like condition expressions on an object of flags.
Purpose
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.
Sample flags:
[
'countryFlag:NL',
'languageFlag:EN',
'proUser'
]
Sample condition (logic):
proUser && (countryFlag:NL || languageFlag:NL)
Threshold example (two out of three):
proUser + countryFlag:NL + languageFlag:NL + !optedOut > 2
Support/requirements
Syntax
- Parenthesis is supported
- Valid operators (logic):
- Valid threshold operators:
- Valid comparison operators (for thresholds):
- Invert
!
(not, e.g. flag does not apply, !someFlag
)
Flags
- Flags can contain these characters:
a-z
A-Z
0-9
_
(underscore):
(colon).
(dot)
- Flags must start with
a-z
or A-Z
. - Flags should be present in the condition in plain texts (so no quotes surrounding them)
- Flags are case sensitive
Use
import { validate, flags, apply } from 'condition-flags-parser'
const condition = '(someFlag:123 + anotherFlag) + (countryFlag:NL + !countryFlag:GB) > 3'
console.log(validate(condition, true))
console.log(flags(condition))
console.log(apply(condition, [
'someFlag:123',
'countryFlag:NL',
'countryFlag:GB',
'anotherFlag',
]))
Development
Tests: npm run test