Registry / database / nestjs-rest-query

nestjs-rest-query

JSON →
library2.1.0jsnpmunverified

Declarative, whitelist-first REST query params for NestJS (v2.1.0). Parses query strings like ?filter[email][like]=acme&sorts=-createdAt&page=2 into safe, typed database queries for TypeORM, Drizzle, and Prisma. Active development, frequent releases. Key differentiator: zero-config whitelist pattern enforces security by default (unknown params silently ignored). Compared to nestjsx/crud or @nestjsx/crud, this library focuses on type safety, Swagger auto-documentation, and adapter-based multi-ORM support.

npm install nestjs-rest-query
INSTALL
IMPORT
SIG · NESTJS-REST-QUERY
N
nestjs-rest-query
databasejavascriptv2.1.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

DynamicQueryBuilderModule
✓ import { DynamicQueryBuilderModule } from 'nestjs-rest-query'
✗ const DynamicQueryBuilderModule = require('nestjs-rest-query').DynamicQueryBuilderModule
Module is exported as named ESM. For CommonJS use the import syntax above (NestJS requires ESM imports for decorators).
QueryParams
✓ import { QueryParams } from 'nestjs-rest-query'
Type for query params object. Also importable from subpaths: 'nestjs-rest-query/drizzle' etc.
DrizzleAdapter
✓ import { DrizzleAdapter } from 'nestjs-rest-query/drizzle'
✗ import { DrizzleAdapter } from 'nestjs-rest-query'
Subpath exports are required for adapter-specific types. Using the root import for DrizzleAdapter will fail.

Full NestJS module setup with DynamicQueryBuilderModule, controller decorator, and TypeORM service integration.

import { Module } from '@nestjs/common'; import { DynamicQueryBuilderModule } from 'nestjs-rest-query'; import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from './user.entity'; import { UserController } from './user.controller'; import { UserService } from './user.service'; @Module({ imports: [ DynamicQueryBuilderModule.forRoot({ pagination: { defaultPerPage: 20, maxPerPage: 100 }, }), TypeOrmModule.forFeature([User]), ], controllers: [UserController], providers: [UserService], }) export class UserModule {} // user.controller.ts import { Controller, Get } from '@nestjs/common'; import { QueryParams } from 'nestjs-rest-query/query-params'; import { UseQueryBuilder } from 'nestjs-rest-query'; import { UserService } from './user.service'; import { User } from './user.entity'; @Controller('users') export class UserController { constructor(private readonly userService: UserService) {} @Get() @UseQueryBuilder({ allowedFilters: ['email', 'firstName', 'lastName', 'age'], allowedSorts: ['createdAt', 'email', 'firstName'], allowedIncludes: ['posts'], searchFields: ['firstName', 'lastName', 'email'], }) async findAll(@QueryParams() params: any) { return this.userService.findAll(params); } } // user.service.ts import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from './user.entity'; import { FindOptions } from 'nestjs-rest-query'; @Injectable() export class UserService { constructor( @InjectRepository(User) private readonly userRepository: Repository<User>, ) {} async findAll(query: any) { const { data, total, page, perPage, lastPage } = await this.userRepository.find({ ...query.buildFindOptions(), }); return { data, total, page, perPage, lastPage }; } }
Debug
Known issues
breakingv2.0 removed support for Node <20, NestJS <11, and TypeORM <0.3.26.
fix
Upgrade to Node >=20, NestJS >=11, TypeORM >=0.3.26.
affects: >=1.0.0 <2.0.0
deprecatedDynamicQueryBuilderModule.forRoot() no longer accepts a 'type' option for ORM selection; use adapter parameter instead.
fix
Pass adapter instance: DynamicQueryBuilderModule.forRoot({ adapter: new DrizzleAdapter() }).
affects: >=1.0.0
gotchaNull and undefined filter values are silently ignored; to filter null use explicit operator isNull.
fix
Use ?filter[column][isNull]=true instead of ?filter[column]=null.
affects: >=2.0.0
gotchaThe @QueryParams() decorator must be applied to the method parameter, not the class. Applying to class will be ignored.
fix
Apply @QueryParams() decorator to the method parameter in the controller handler.
affects: >=1.0.0
Errors
Common errors & fixes
Cannot find module 'nestjs-rest-query/drizzle' or its corresponding type declarations.
Using root import path for ORM adapter that requires subpath export.
fix
Import from 'nestjs-rest-query/drizzle' (not 'nestjs-rest-query'). Ensure your tsconfig.json includes the moduleResolution: 'node16' or 'bundler'.
DynamicQueryBuilderModule is not a function or class
Incorrect default import; the module is a named export.
fix
Use import { DynamicQueryBuilderModule } from 'nestjs-rest-query';
Type 'FindOptionsOrder<Entity>' is not assignable to type 'FindOptionsOrder<Entity>'.
Incompatible TypeORM version; v0.3.26+ changed FindOptionsOrder shape.
fix
Update TypeORM to ^0.3.26 and nestjs-rest-query to ^2.0.0.
Cannot use @UseQueryBuilder decorator on controller method without proper module registration.
Missing DynamicQueryBuilderModule.forRoot() in root module imports.
fix
Add DynamicQueryBuilderModule.forRoot({}) to the imports array of your root module (or a feature module).
Query parameter 'filter[email][like]=acme' returned an empty result set even though matching records exist.
Case sensitivity or whitespace mismatch; ilike operator is needed for case-insensitive matching.
fix
Use the 'ilike' operator instead of 'like' for case-insensitive filtering: ?filter[email][ilike]=acme
Upgrade
Version history
2.1.0latest on npm
Audit
Dependencies
@nestjs/commonrequiredPeer dependency - NestJS decorators and module system
@nestjs/corerequiredPeer dependency - NestJS module lifecycle
reflect-metadatarequiredPeer dependency - TypeScript decorator metadata
typeormoptionalOptional peer - TypeORM adapter (default)
@nestjs/swaggeroptionalOptional peer - OpenAPI auto-documentation
Agent activity
8 hits · last 30 days
node
8
Resources
nestjs-rest-query — npm install nestjs-rest-query · libregistry