Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mg98/filter.js
JS package that enables you to formulate complex conditions in a convenient string syntax which can then be matched with objects and further query a JSON array.
https://github.com/mg98/filter.js
declarative-programming json sql
Last synced: about 1 month ago
JSON representation
JS package that enables you to formulate complex conditions in a convenient string syntax which can then be matched with objects and further query a JSON array.
- Host: GitHub
- URL: https://github.com/mg98/filter.js
- Owner: mg98
- License: mit
- Created: 2022-04-20T20:59:29.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-06-09T14:36:33.000Z (over 2 years ago)
- Last Synced: 2024-11-13T18:46:46.371Z (about 1 month ago)
- Topics: declarative-programming, json, sql
- Language: TypeScript
- Homepage: https://filter.js.org
- Size: 3.33 MB
- Stars: 1
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
filter.js
Filter JSONs using SQL-like syntax!
_filter.js_ is a lightweight JavaScript library that enables you to use a comprehensible string syntax to run complex filter operations on a set of JSONs (or only one for that matter).
The syntax is strongly inspired by the syntax for the expression of conditions in SQL and is meant to be simple and intuitive, even for non-technical people. [See a demo!](https://filter.js.org)## Install
```
npm i @mg98/filter-js
```## Example
```js
import { matchCondition } from '@mg98/filter-js';const clients = [
{
name: 'Batu',
age: 17,
country: 'Turkey'
},
{
name: 'Hai Dang',
age: 24,
country: 'Vietnam'
},
{
name: 'Miles',
age: 16,
country: 'USA'
},
{
name: 'Philipp',
age: 58,
country: 'Germany'
}
]const alcoholClients = clients.filter(client => matchCondition(client,
"(age >= 18 and country in ('Germany', 'Turkey', 'Vietnam') or age >= 21 and country = 'USA') and country != 'Arabia'"
))console.log(alcoholClients)
// [
// {
// name: 'Hai Dang',
// age: 24,
// country: 'Vietnam'
// },
// {
// name: 'Philipp',
// age: 58,
// country: 'Germany'
// }
// ]
```## Features
The goal of _filter.js_ is to create a language that is not only a powerful tool, but also a convenient and fault-tolerant one.
✅ Basic comparison operators `=`, `!=`, `>`, `<`, `>=`, `<=`
✅ Operators `in` and `not in` in combination with array values (`('Apple', 'Peach', 'Banana')`)
✅ Supports value types string and number (including floating values)
✅ Supports operations on arrays (e.g. `hobbies > 3` is valid if `hobbies` in an array of length > 3)
✅ Logical operators `and` and `or` to combine expressions
✅ Deep property access (e.g. `address.street = 'Elm Str'`)
✅ Nested expressions using parentheses
**Not yet supported...**
❌ Boolean type
❌ Understanding of date & time
## Usage in Browser
A compiled and browserified version of this library is available at
- https://filter.js.org/bundle.js and
- https://filter.js.org/bundle.min.js _(minified)_.This will give you the latest version.
However, to avoid the risk of breaking changes in a new version, it is recommended to target a specific [release tag](https://github.com/mg98/filter.js/tags), e.g. https://filter.js.org/tags/v0.4.2/bundle.min.js.
### Example
```html
const clients = [ /* ... */ ]
const alcoholClients = clients.filter(client => filterjs.matchCondition(client,
"(age >= 18 and country in ('Germany', 'Turkey', 'Vietnam') or age >= 21 and country = 'USA') and country != 'Arabia'"
))```