This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (object-expression-parser) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ObjectExpressionParser
一个支持自定义操作符的 javascript 对象表达式转换器,可根据自定义的操作符生成不同语法。
let e ={'name':'yichen',age:{'$gt':18,'$lt':30},'||':{'level':[1,2],'age':{'$in':[3,4]}}};let{ segment, values }= expressionParser.parse(e);
console.log(segment);// (name = ?) and ((age > ?) and (age < ?)) and ((level in (?)) or (age in (?)))
console.log(values);// [ 'yichen', 18, 30, [ 1, 2 ], [ 3, 4 ] ]
Install
$ npminstall object-expression-parser
Usage
配置比较操作符
配置支持 >、<、=、in 的比较操作符。
let c ={'$gt':{through:false,// more attribute.. parse:function(prop, value, originalOperator, level, context){return{segment:`${prop} > ?`,values:[value]};}},'$lt':function(prop, value, originalOperator, level, context){return{segment:`${prop} < ?`,values:[value]};},'$eq':function(prop, value, originalOperator, level, context){return{segment:`${prop} = ?`,values:[value]};},'$in':function(prop, value, originalOperator, level, context){return{segment:`${prop} in (?)`,values:[value]};}};
配置逻辑操作符
配置支持 and、or 的逻辑操作符。
let l ={'&&':function(expr, segments, originalOperator, level, context){if(segments.length ==1)return segments[0];return`(${segments.join(`) and (`)})`;},'||':function(expr, segments, originalOperator, level, context){if(segments.length ==1)return segments[0];return`(${segments.join(`) or (`)})`;}};
配置一元操作符
配置支持 not 的一元操作符。
let u ={'$not':function(expr, segment, originalOperator, level, context){return`not(${segment})`;}};