Package Exports
- nestjs-prisma-base
- nestjs-prisma-base/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (nestjs-prisma-base) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
NestJS Prisma Base
A comprehensive NestJS package providing base classes, utilities, and decorators for building CRUD APIs with Prisma ORM integration.
Features
🚀 Core Features
- Base CRUD Operations: Ready-to-use controllers and services
- Enhanced Pagination: Metadata-rich pagination with configurable limits
- Advanced Search & Filtering: Multi-field search with operators and sorting
- Relation Loading: Configurable nested relation includes with validation
- Endpoint Control: Enable/disable specific endpoints with decorators
🛠 DTO System
- Configurable DTOs: Global and per-class configuration
- Swagger Integration: Automatic API documentation
- Minimal DTOs: Maximum control with empty base classes
- Modular Composition: Mix-and-match DTO features with mixins NEW in v1.0.0
⚡ Developer Experience
- Module Factories: Auto-generate complete modules
- Multiple Database Support: Work with multiple Prisma clients
- TypeScript: Full type safety and IntelliSense support
- Validation: Built-in request validation and error handling
Quick Start
Installation
npm install nestjs-prisma-base
1. Setup PrismaModule
import { Module } from '@nestjs/common';
import { PrismaModule } from 'nestjs-prisma-base';
@Module({
imports: [
PrismaModule.forRoot({
prismaClient: new PrismaClient(),
}),
],
})
export class AppModule {}
2. Create Service & Controller
// user.service.ts
import { Injectable } from '@nestjs/common';
import { BaseService, PrismaService } from 'nestjs-prisma-base';
@Injectable()
export class UserService extends BaseService<User, CreateUserDto, UpdateUserDto> {
protected readonly modelName = 'user';
constructor(protected readonly prisma: PrismaService) {
super(prisma);
}
}
// user.controller.ts
import { Controller } from '@nestjs/common';
import { BaseController, EnableAllEndpoints } from 'nestjs-prisma-base';
@Controller('users')
@EnableAllEndpoints() // Enables all CRUD endpoints
export class UserController extends BaseController<User, CreateUserDto, UpdateUserDto> {
constructor(private readonly userService: UserService) {
super(userService);
}
}
3. Define DTOs
import { BaseCreateDto, BaseUpdateDto, BaseResponseDto } from 'nestjs-prisma-base';
import { IsEmail, IsString, IsOptional } from 'class-validator';
export class CreateUserDto extends BaseCreateDto {
@IsString() name: string;
@IsEmail() email: string;
}
export class UpdateUserDto extends BaseUpdateDto {
@IsOptional() @IsString() name?: string;
@IsOptional() @IsEmail() email?: string;
}
export class UserResponseDto extends BaseResponseDto {
name: string;
email: string;
}
That's it! You now have a fully functional CRUD API with pagination, search, and filtering.
Core Concepts
🔍 Search & Filtering
// GET /users?search=john&status=active&page=1&limit=10
// GET /users?search=john&searchFields=name,email&sortBy=name&sortOrder=asc
Configure search behavior:
export class UserService extends BaseService<User, CreateUserDto, UpdateUserDto> {
protected searchConfig = {
defaultSearchFields: ['name', 'email'],
caseSensitive: false,
searchMode: 'contains', // 'contains' | 'startsWith' | 'endsWith'
};
}
🔗 Relation Loading
// GET /users?include=posts,profile
// GET /users/1?include=posts
🎛 Endpoint Control
@Controller('users')
@EnableEndpoint(EndpointType.FIND_ALL)
@EnableEndpoint(EndpointType.CREATE)
@DisableEndpoint(EndpointType.REMOVE)
export class UserController extends BaseController<...> {}
🧩 DTO Mixins (v1.0.0)
Build DTOs with composable mixins:
import { WithTimestamps, WithAuditFields, composeMixins } from 'nestjs-prisma-base';
// Use individual mixins
export class UserDto extends WithTimestamps(BaseDto) {
name: string;
// Includes: createdAt, updatedAt
}
// Combine multiple mixins
export class AuditedUserDto extends composeMixins(BaseDto, WithTimestamps, WithAuditFields, WithVersioning) {
name: string;
// Includes: createdAt, updatedAt, createdBy, updatedBy, version
}
// Use convenience combinations
export class CompleteUserDto extends MixinCombinations.WithCompleteEntity(BaseDto) {
name: string;
// Includes: id, createdAt, updatedAt, createdBy, updatedBy, version, deletedAt, isActive
}
Pagination Response
All findAll
methods return rich pagination metadata:
{
"data": [{ "id": 1, "name": "John", "email": "john@example.com" }],
"meta": {
"total": 150,
"page": 1,
"limit": 10,
"totalPages": 15,
"hasNext": true,
"hasPrev": false
}
}
Advanced Features
🏭 Module Factory
Generate complete modules with one function:
import { createModelModule, EndpointType } from 'nestjs-prisma-base';
export const UserModule = createModelModule({
modelName: 'user',
routePath: 'users',
enableAllEndpoints: true,
});
🎨 DTO Configuration
import { ConfigurableBaseCreateDto, configureDTOs } from 'nestjs-prisma-base';
// Global configuration
configureDTOs({
includeTimestamps: true,
includeId: true,
});
export class CreateUserDto extends ConfigurableBaseCreateDto {
name: string;
email: string;
// Automatically includes configured fields
}
📚 Swagger Integration
import { SwaggerBaseResponseDto, configureSwaggerDTOs } from 'nestjs-prisma-base';
configureSwaggerDTOs({ enabled: true });
export class UserResponseDto extends SwaggerBaseResponseDto {
@ApiProperty() name: string;
@ApiProperty() email: string;
// Automatic Swagger decorators for base fields
}
Documentation
📖 Available Documentation
- Complete Feature Guide - Comprehensive feature documentation with examples
- Migration Guide - Version upgrade guide and compatibility matrix
- Documentation Index - Complete documentation overview
🚀 Get More Help
- Quick Questions: Use the examples in this README
- Advanced Features: Check the Complete Feature Guide
- Version Migration: See the Migration Guide
- Issues & Support: Create an Issue
Version History
- v1.0.0 - Modular DTO composition with mixins
- v0.9.0 - Configurable DTOs and Swagger integration
- v0.8.0 - Relation loading and module factories
- v0.7.0 - Advanced search with operators
- v0.6.0 - Search and filtering capabilities
- v0.5.0 - Enhanced pagination with metadata
License
MIT