rsql-filter
v1.1.7
Published
Implementation of RSQL adapter for NodeJs ORM like TypeORM
Maintainers
Readme
RSQL Filter
Rslq-filter is a library that offers an effortless way to dynamically filter entities for Node.js ORM. At moment is aviable for TypeORM and Prisma.
Getting started
Install rsql-filter
npm i rsql-filterUsage
In case of TypeOrm:
import {EntityManager, QueryBuilder } from 'typeorm';
import { User, Phone } from './entities';
import { rsqlTypeOrmFilter } from "rsql-filter";
async function findAllUsers(userId: number, filter: string): Promise<User> {
const queryBuilder = entityManager.createQueryBuilder(User);
queryBuilder.leftJoinAndSelect("q.phone","phone")
rsqlTypeOrmFilter(filter, queryBuilder)
return queryBuilder.getMany();
}In case of Prisma:
async function findAllUsers(filter) {
return this.prisma.user.findMany(where: {rsqlPrismaFilter<UserWhereInput>(filter) })
}
The filter parameter could contain the RSQL language string, passed by the frontend, needed for the desired filter. You can use https://www.npmjs.com/package/rsql-filter-builder as frontend builder.
Operations
The list of supported RSQL operations:
|Operation | Meaning | |------------- | --------------- | | == | Equals | | > | Greater | | >= | Greater than | < | Less | <= | less than | != | Not Equals | =in= | in list | =out= | not in list | ; | AND | , | OR |
Example
In case of TypeOrm
//Equals operation
rsqlTypeOrmFilter("name==Larry", queryBuilder)
//Like operation
rsqlTypeOrmFilter("name==*arry", queryBuilder)
//Less than operation
rsqlTypeOrmFilter("age<=5", queryBuilder)
//In list operation
rsqlTypeOrmFilter("age=in=(5,7,8) ", queryBuilder)
//Complex query
rsqlTypeOrmFilter("name==Larry;(lastName==Mason,(latName==Richmond;age>=20));adress=='4567 Evergreen Terrace'", queryBuilder)
//on one to many
rsqlTypeOrmFilter("name==Larry;phone.number==789107890", queryBuilder)
In case of Prisma
rsqlPrismaFilter<UserWhereInput>("name==Larry")
//on one to many or many to many is necessary to put - character before the property name.
rsqlPrismaFilter("name==Larry;-RelProjectOwner.projectId != 'project1'")
