spring-filter-query-builder
Version:
<!-- Improved compatibility of back to top link: See: https://github.com/othneildrew/Best-README-Template/pull/73 -->
220 lines (167 loc) • 8.96 kB
Markdown
<!-- Improved compatibility of back to top link: See: https://github.com/othneildrew/Best-README-Template/pull/73 -->
<a name="readme-top"></a>
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]
[![LinkedIn][linkedin-shield]][linkedin-url]
<div align="center">
<h1 align="center">Spring Filter Query Builder</h1>
<p align="center">
A User-Friendly JavaScript/TypeScript Query Builder for <a href="https://github.com/turkraft/spring-filter">Spring Filter</a>.
<br />
<a href="#documentation"><strong>Explore the docs »</strong></a>
<br />
<br />
<a href="https://codesandbox.io/s/demo-yp3mgd">View Demo</a>
·
<a href="https://github.com/sisimomo/Spring-Filter-Query-Builder/issues">Report Bug</a>
·
<a href="https://github.com/sisimomo/Spring-Filter-Query-Builder/issues">Request Feature</a>
</p>
</div>
<!-- TABLE OF CONTENTS -->
<details>
<summary>Table of Contents</summary>
<ol>
<li>
<a href="#about-the-project">About The Project</a>
<ul>
<li><a href="#built-with">Built With</a></li>
</ul>
</li>
<li><a href="#usage">Usage</a></li>
<li>
<a href="#documentation">Documentation</a>
<ul>
<li><a href="#classes">Classes</a></li>
</ul>
<ul>
<li><a href="#operators">Operators</a></li>
</ul>
<ul>
<li><a href="#comparators">Comparators</a></li>
</ul>
<ul>
<li><a href="#functions">Functions</a></li>
</ul>
<ul>
<li><a href="#customization">Customization</a></li>
</ul>
</li>
<li><a href="#contributing">Contributing</a></li>
<li><a href="#contact">Contact</a></li>
</ol>
</details>
<!-- ABOUT THE PROJECT -->
## About The Project
Elevate your development experience with our straightforward Query Builder designed for use alongside [Spring Filter](https://github.com/turkraft/spring-filter). This lightweight tool boasts simplicity by being dependency-free and compatible with TypeScript and JavaScript projects.
<p align="right">(<a href="#readme-top">back to top</a>)</p>
### Built With
- [![Visual Studio Code][vscode-shield]](https://code.visualstudio.com/)
- [![CodeSandbox][codesandbox-shield]](https://codesandbox.io/)
- [![TypeScript][typescript-shield]](https://www.typescriptlang.org/)
- [![NPM][npm-shield]](https://www.npmjs.com/)
- [![Jest][jest-shield]](https://jestjs.io/)
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## Usage
1. Install the package using [NPM](https://www.npmjs.com/package/spring-filter-query-builder):
```bash
npm install spring-filter-query-builder
```
2. Import the required functions from `spring-filter-query-builder` into your JavaScript/TypeScript file:
```js
import { sfAnd, sfEqual, sfGt, sfIsNull, sfLike, sfNot, sfOr } from 'spring-filter-query-builder';
```
3. Here's an example of how to use the library:
```js
const filter = sfAnd([sfEqual('status', 'active'), sfGt('createdAt', '1-1-2000')]);
console.log(filter.toString());
```
This will output the generated filter query.
Explore Further with Examples
For additional examples, feel free to visit our [CodeSandbox demo page](https://codesandbox.io/s/demo-yp3mgd).
<p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- Documentation -->
## Documentation
All classes have a toString method. So you can convert any Object of these classes to string easily.
The library exposes all methods that you will need to create a query:
### Operators
- **`sfAnd([ item, item, ... ])`** - and's one or more expressions
- **`sfOr([ item, item ... ])`** - or's one or more expressions
- **`sfNot(item)`** - not's an expression
- **`sfExists(item)`** - exists expression
### Comparators
- **`sfLike(selector, value)`** - Like comparator
- **`sfEqual(selector, value)`** - Equal comparator
- **`sfNotEqual(selector, value)`** - Not equal comparator
- **`sfGt(selector, value)`** - Greater than comparator
- **`sfGe(selector, value)`** - Greater than or equal comparator
- **`sfLt(selector, value)`** - Less than comparator
- **`sfLe(selector, value)`** - Less than or equal comparator
- **`sfIsNull(selector)`** - Is null comparator
- **`sfIsNotNull(selector)`** - Is not null comparator
- **`sfIsEmpty(selector)`** - Is empty comparator
- **`sfIsNotEmpty(selector)`** - Is not empty comparator
- **`sfIn(selector, [ value, value, ...])`** - In comparator
- **`sfNotIn(selector, [ value, value, ...])`** - Not in comparator
### Functions
- **`sfAbsolute(selector)`** - Absolute function
- **`sfAverage(selector)`** - Average function
- **`sfCeiling(selector)`** - Ceiling function
- **`sfConcat(value, value, ...)`** - Concat function
- **`sfCount(selector)`** - Count function
- **`sfCountDistinct(selector)`** - CountDistinct function
- **`sfCurrentDate()`** - CurrentDate function
- **`sfCurrentTime()`** - CurrentTime function
- **`sfCurrentTimestamp()`** - CurrentTimestamp function
- **`sfMin(selector)`** - Min function
- **`sfMax(selector)`** - Max function
- **`sfSum(selector, selector, ...)`** - Sum function
- **`sfSize(selector)`** - Size function
- **`sfLength(selector)`** - Length function
- **`sfTrim(selector)`** - Trim function
- **`sfUpper(selector)`** - Upper function
- **`sfLower(selector)`** - Lower function
- **`sfCustomFunction(functionName, value, value, ...)`** - Any other custom function
### Customization
Extend any of our predefined abstract classes – [Comparator](src/comparators.ts), [Function](src/functions.ts), and [Operator](src/operator.ts) – to effortlessly craft custom logic tailored to your needs.
For creating custom comparators, refer to [test/custom-comparator.test.ts](test/custom-comparator.test.ts).
For custom functions, explore [test/custom-function.test.ts](test/custom-function.test.ts).
For custom operators, explore [test/custom-operator.test.ts](test/custom-operator.test.ts).
<p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- CONTRIBUTING -->
## Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
<p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- CONTACT -->
## Contact
[![LinkedIn][linkedin-shield]][linkedin-url]
<p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
[contributors-shield]: https://img.shields.io/github/contributors/sisimomo/Spring-Filter-Query-Builder.svg?style=for-the-badge
[contributors-url]: https://github.com/sisimomo/Spring-Filter-Query-Builder/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/sisimomo/Spring-Filter-Query-Builder.svg?style=for-the-badge
[forks-url]: https://github.com/sisimomo/Spring-Filter-Query-Builder/network/members
[stars-shield]: https://img.shields.io/github/stars/sisimomo/Spring-Filter-Query-Builder.svg?style=for-the-badge
[stars-url]: https://github.com/sisimomo/Spring-Filter-Query-Builder/stargazers
[issues-shield]: https://img.shields.io/github/issues/sisimomo/Spring-Filter-Query-Builder.svg?style=for-the-badge
[issues-url]: https://github.com/sisimomo/Spring-Filter-Query-Builder/issues
[license-shield]: https://img.shields.io/github/license/sisimomo/Spring-Filter-Query-Builder.svg?style=for-the-badge
[license-url]: https://github.com/sisimomo/Spring-Filter-Query-Builder/blob/master/LICENSE.txt
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555
[linkedin-url]: https://www.linkedin.com/in/simon-vallieres-358555187/
[typescript-shield]: https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white
[npm-shield]: https://img.shields.io/badge/NPM-%23CB3837.svg?style=for-the-badge&logo=npm&logoColor=white
[jest-shield]: https://img.shields.io/badge/-jest-%23C21325?style=for-the-badge&logo=jest&logoColor=white
[vscode-shield]: https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white
[codesandbox-shield]: https://img.shields.io/badge/Codesandbox-000000?style=for-the-badge&logo=CodeSandbox&logoColor=white