typeorm-qry
v0.0.5
Published
Simple yet powerful TypeORM query builder.
Downloads
2
Readme
TypeORM QueryBuilder
typeorm-qry
provides a fluent interface for building complex TypeORM queries using TypeScript. It aims to simplify the process of constructing queries.
This package IS NOT production ready!
Features
- Complex filter building: Easily construct TypeORM queries using a intuitive query object.
- Dynamic Query Building: Construct queries dynamically based on runtime conditions and user input.
- Compatibility: Seamlessly integrates with existing TypeORM projects and entities.
- Zero Dependencies: Minimal yet powerful QueryBuilder!
TODO
- Filtering
- [x] simple filtering (all ands)
- [x] nested relation filtering
- [x] complex filtering with
or
,and
andnot
keywords. - [ ] write additional regexlike operators
- [ ] writing tests
- Pagination
- [x] feature
- [x] writing tests
- Sorting
- [x] simple sort
- [x] multiple sorts
- [x] sort by relation (also multiple)
- [x] writing tests
- Relation includes
- [x] simple relation include
- [x] dot separated nested relation includes
- [x] writing tests
- Field selects
- [ ] simple field select
- [ ] fields select by relation
- [ ] writing tests
- [ ] write more examples
Getting Started
To get started with TypeORM QueryBuilder, follow these steps:
- Installation: Install the package via npm or pnpm or yarn.
npm install typeorm-qry
# or
pnpm add typeorm-qry
# or
yarn add typeorm-qry
- Write service: I used
NestJS
as playground. You can use whatever supports TypeORM.
import { Repository } from "typeorm";
import { FilterOperand, QueryBuilder, QueryParams } from "typeorm-qry";
@Injectable()
export class UserService {
constructor(@InjectRepository(User) private repository: Repository<User>) {}
getAll() {
const query: QueryParams = {
filter: [
{
or: [
{ name: "name", op: FilterOperand.like, val: "matthew" },
{
name: "workplaces.name",
op: FilterOperand.like,
val: "technician",
},
],
},
{ name: "partner.id", op: FilterOperand.eq, val: 2 },
],
paginate: {
page: 1,
perPage: 10, // Return paginated result
},
include: "workplaces.users,partner", // Includes relations workplaces, workplaces.users and partner into result.
sort: "name,-workplaces.name", // Sort by name ASC and sort relation workplaces by name DESC.
};
const qb = new QueryBuilder(query, this.repository);
return qb.queryBuilder.getMany();
}
}
License
This package is licensed under the MIT License. See the LICENSE file for more information.