expressive-js-config
Expressive JS config is a configuration format and parser that allows config files to build up with a syntax extrememly similar to javascript, allowing inline comments and expressions (Which update as other values change) to be defined in the config.
Getting Started
npm install expressive-js-config
const parse = require('expressive-js-config')
const obj = parse('foo: "bar", hello: "world"', {})
obj
in this case will be an object with 2 properties foo
and hello
. If the parser is unable to parse the content,
it will attempt to wrap the content in {
and }
to parse an object. If this also fails it will attempt [
and ]
to
attempt as an array.
Expressions
Expressions are attached to the resultant objects as accessors. If they are surrounded by an outer static()
call, they
will only be exeucted once, and the same value / Error
returned on every subsequent access.
Setters
When set, expression values become constant and are no longer affected by changes to dependent properties
reset()
The reset function is attached to the property set accessor will remove any previous set override, allowing the expression to act as though it had never been overridden.
Valid code blocks
The following code blocks are permitted for use in expressions:
- ConditionalExpression
- ObjectExpression
- BinaryExpression
- MemberExpression
- UnaryExpression
- ArrayExpression
- TemplateLiteral
- TemplateElement
- CallExpression
- ThisExpression
- NewExpression
- Identifier
- Property
- Literal
Any other encountered code blocks will cause an exception
Options
The following options are available
id
If an id
property with a string value is passed as an option, any parsed object with a property named for the supplied
value, that object will be registered with the contextual lookup allowing that object to be referenced in expressions
with it's given name.
errorContext
The error context property will be injected into any error messages generated by the expression or parsing.
context
context may either be an object
in which case the properties on that object will be available as identifiers to
expressions. Or context may be a function
in which case it will be called to lookup any identifiers.
context.register(id, obj)
If context is a function, an optional register
function may be attached to register objects which have the relevant
id property into the context for use with expressions