A highly versatile and fast OData Version 4.01 Parser which support almost all the available system query options like $filter, $orderby, $skip, $top, $count. The Open Data Protocol (OData) enables the creation of REST-based data services which allow resources, identified using Uniform Resource Locators (URLs) and defined in a data model. The Parser on high level works on lexer scanner strategy.
To run the parser in local, please clone the repository and follow the below steps:
npm install
npm run parserTo test and for test coverage:
npm test
npm run test:reportimport { parseFilter, parseOrderby, parseSkip, parseTop } from '@slackbyte/odata-query-parser';
const filter = "Price gt 20 or Rating ge 10 not (Name eq 'uday singh' and City in ('Redmond', 'London'))"
console.log(parseFilter(filter));Output:
{
  token: [
    { tokenType: 'conditionMemberExp', subType: '', value: 'Price' },
    { tokenType: 'comOperatorExp', subType: 'greaterThanExp', value: '>'},
    { tokenType: 'conditionMemberExp', subType: '', value: '20' },
    { tokenType: 'logOperatorExp', subType: 'orExp', value: 'OR' },
    { tokenType: 'conditionMemberExp', subType: '', value: 'Rating' },
    { tokenType: 'comOperatorExp', subType: 'greaterThanEqualToExp', value: '>='},
    { tokenType: 'conditionMemberExp', subType: '', value: '10' },
    { tokenType: 'logOperatorExp', subType: 'notExp', value: 'NOT' },
    { tokenType: 'groupOperatorExp', subType: 'openBracExp', value: '('},
    { tokenType: 'conditionMemberExp', subType: '', value: 'Name' },
    { tokenType: 'comOperatorExp', subType: 'equalToExp', value: '=' },
    { tokenType: 'conditionMemberExp', subType: '', value: "'uday singh'"},
    { tokenType: 'logOperatorExp', subType: 'andExp', value: 'AND' },
    { tokenType: 'conditionMemberExp', subType: '', value: 'City' },
    { tokenType: 'comOperatorExp', subType: 'inExp', value: 'in' },
    { tokenType: 'conditionMemberExp', subType: '', value: "('Redmond', 'London')"},
    { tokenType: 'groupOperatorExp', subType: 'closeBracExp', value: ')'}
  ]
}- $count
 -  $filter
-  Comparison Operators
- eq
 - ne
 - lt
 - le
 - gt
 - ge
 - has
 - in
 
 -  Logical Operators
- and
 - or
 - not
 
 -  Arithmetic Operators
- add
 - sub
 - mul
 - div
 - divby
 - mod
 
 -  String Functions
- indexof
 - contains
 - endswith
 - startswith
 - length
 - substring
 - tolower
 - toupper
 - trim
 - concat
 
 -  Date Functions
- year
 - month
 - day
 - hour
 - minute
 - second
 - fractionalseconds
 - date
 - time
 - totaloffsetminutes
 - now
 - mindatetime
 - maxdatetime
 
 -  Math Functions
- round
 - floor
 - ceiling
 
 -  Type and conditional Functions
- cast
 - isof
 - case
 
 
 -  Comparison Operators
 - $select
 - $top
 - $skip
 - $orderby
 
I love your inputs! and I want to make your contribution to this project easy and transparent, whether it's:
- Reporting a bug
 - Discussing the current state of the code
 - Submitting a fix
 - Proposing new features
 
Please raise a pull request. 😊
Made with love in INDIA. ❤️