Parsing
A partial javascript parser has been implemented to support expressions. Mostly used in client, as other pieces in akala, this is free to use.
Usage Examples
Basic Arithmetic Parsing
const parser = new Parser();
const evaluator = new EvaluatorAsFunction();
const result = parser.parse('b*c+d', false);
console.log((evaluator.eval(result))({ b: 1, c: 2, d: 3 }));
String concat and conditions
console.log((evaluator.eval(parser.parse("template || '/' + deviceType + '/new.html'")))({ template: '/devices/virtualstate.html' }));
console.log((evaluator.eval(parser.parse("template || '/' + deviceType + '/new.html'")))({ deviceType: 'pioneer' }));
Formatters
class DummyHttpFormatter implements Formatter<string>
{
public format(value: unknown)
{
return `$http on '${value}'`;
}
}
formatters.register('#http', DummyHttpFormatter, true);
console.log((evaluator.eval(parser.parse("'/my/url' # http")))());
Date Parsing
console.log((evaluator.eval(parser.parse("'2018-03-12' # toDate")))({}));
console.log((evaluator.eval(parser.parse("'12/03/18' #toDate:'dd/MM/yy'")))({}));
console.log((evaluator.eval(parser.parse("'03/12/18' #toDate:'MM/dd/yy'")))({}));
console.log((evaluator.eval(parser.parse("'3/12/18' #toDate:'MM/dd/yy'")))({}));
Complex Object Parsing
console.log((evaluator.eval(parser.parse("{options:{in:'/api/@domojs/zigate/pending' # http, text:internalName, value:address}}"))({})));
console.log((evaluator.eval(parser.parse("{options:{in:'/api/@domojs/zigate/pending' # http, text:internalName, value:address}}")))({})['options']);
Array Parsing
console.log(evaluator.eval(parser.parse('columns[0].title'))({ columns: [{ title: 'pwet' }] }));