Simple OData $filter query parser.
npm install odata-filter-to-astSimple OData query parser with zero dependencies.
!npm version
!MIT license
!GitHub code size in bytes
!dependencies
!npm
``shell`
$ npm install odata-filter-to-ast
Usage in code:
`js
import {parseFilter, parseOrderBy} from 'odata-filter-to-ast';
parseFilter(Name gt "Milk" or Price lt -2.55 or Size ne 3);age,sum(height,width) desc
parseOrderBy();`
Result:
`js`
{
type: 'OrExpr',
left: {
type: 'GtExpr',
left: {
type: 'MemberExpr',
value: 'Name',
},
right: {
type: 'Primitive',
value: 'Milk'
},
},
right: {
type: 'OrExpr',
left: {
type: 'LtExpr',
left: {
type: 'MemberExpr',
value: 'Price',
},
right: {
type: 'Primitive',
value: -2.55
}
},
right: {
type: 'NeExpr',
left: {
type: 'MemberExpr',
value: 'Size',
},
right: {
type: 'Primitive',
value: 3
}
}
}
}
[
{
type: 'OrderByItem',
expr: {
type: 'MemberExpr',
value: 'age',
},
dir: 'asc',
},
{
type: 'OrderByItem',
expr: {
type: 'FunctionExpr',
name: 'sum',
arguments: [
{
type: 'MemberExpr',
value: 'height',
},
{
type: 'MemberExpr',
value: 'width',
},
],
},
dir: 'desc',
},
]
The following construct
from OData specification are
supported:
- JS primitives -42, 3.14, 6.022e23, 'string', true, false, nulliDenT_iFi3r
- field identifiers ['a','r','r','a','y',7,false,null]
- heterogeneous arrays eq
- primitive relations , ne, gt, gt, lt, lein
- array relation and
- boolean conjunctions , or( ... )
- operator priority grouping includes(Name,'Joe')
- function calls asc
- sort directions , desc`
Filters should be compatible with odata-filter-builder.
Did you find a string which could not be parsed? File
an issue, please.
- Parser built using Peggy and TS PEG.js
- Grammar inspired by
the OData specification
and
the OData ABNF Construction Rules