https://github.com/mdwheele/query-language-parser
(query-parser:=true AND supports-boolean-operators:=true) OR maintainer:is-fun-guy
https://github.com/mdwheele/query-language-parser
Last synced: 11 months ago
JSON representation
(query-parser:=true AND supports-boolean-operators:=true) OR maintainer:is-fun-guy
- Host: GitHub
- URL: https://github.com/mdwheele/query-language-parser
- Owner: mdwheele
- Created: 2022-02-08T04:35:23.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-02-08T04:49:56.000Z (over 4 years ago)
- Last Synced: 2025-04-08T09:57:59.764Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 73.2 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# query-language-parser
This library can be used to build an Abstract Syntax Tree from query language. This AST can then be used to
filter a collection of data using either the `SimpleFilterer` interpreter built into the package OR through
implementation of your own interpreter!
### Query Language
```js
const query = '(type:=fruit AND weight:=0.75) OR (type:=meat AND weight:>1) OR name:=tilapia'
```
**Grammar**
```
query: predicate ((T_AND | T_OR) predicate)*
predicate: T_ID ':' T_OPERATOR T_ID | '(' query ')'
```
### Generating an AST
```js
const { ast } = require('query-language-parser')
const root = ast(query)
```
```
├─ left
│ ├─ left
│ │ ├─ left
│ │ │ ├─ left: type
│ │ │ ├─ op: =
│ │ │ └─ right: fruit
│ │ ├─ op: AND
│ │ └─ right
│ │ ├─ left: weight
│ │ ├─ op: =
│ │ └─ right: 0.75
│ ├─ op: OR
│ └─ right
│ ├─ left
│ │ ├─ left: type
│ │ ├─ op: =
│ │ └─ right: meat
│ ├─ op: AND
│ └─ right
│ ├─ left: weight
│ ├─ op: >
│ └─ right: 1
├─ op: OR
└─ right
├─ left: name
├─ op: =
└─ right: tilapia
```
### Filtering Data
```js
const { filter } = require('query-language-parser')
const groceries = [
{ type: 'fruit', weight: 0.75, name: 'grapefruit' },
{ type: 'fruit', weight: 0.5, name: 'apple' },
{ type: 'vegetable', weight: 1.5, name: 'cucumber' },
{ type: 'vegetable', weight: 0.74, name: 'squash' },
{ type: 'meat', weight: 0.5, name: 'hamburger' },
{ type: 'meat', weight: 1.1, name: 'chicken' },
{ type: 'fish', weight: 2.1, name: 'tilapia' },
]
filter(query, groceries)
```
```
[
{ type: 'fruit', weight: 0.75, name: 'grapefruit' },
{ type: 'meat', weight: 1.1, name: 'chicken' },
{ type: 'fish', weight: 2.1, name: 'tilapia' }
]
```