0.0.5 • Published 1 year ago

typeorm-qry v0.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

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
    • simple filtering (all ands)
    • nested relation filtering
    • complex filtering with or, and and not keywords.
    • write additional regexlike operators
    • writing tests
  • Pagination
    • feature
    • writing tests
  • Sorting
    • simple sort
    • multiple sorts
    • sort by relation (also multiple)
    • writing tests
  • Relation includes
    • simple relation include
    • dot separated nested relation includes
    • 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:

  1. Installation: Install the package via npm or pnpm or yarn.
  npm install typeorm-qry
  # or
  pnpm add typeorm-qry
  # or
  yarn add typeorm-qry
  1. 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.

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago