JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 139
  • Score
    100M100P100Q87824F
  • License MIT

A comprehensive NestJS package providing base classes, utilities, and decorators for building CRUD APIs with Prisma ORM integration, featuring pagination, search, filtering, relation loading, configurable DTOs, and modular composition capabilities.

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.

npm version License: MIT

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

🚀 Get More Help

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