1.0.1 • Published 3 years ago
condition-flags-parser v1.0.1
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 > 2Support/requirements
Syntax
- 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
- Flags can contain these characters:
a-zA-Z0-9_(underscore):(colon).(dot)
- Flags must start with
a-zorA-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'
// 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',
]))Development
Tests: npm run test