Skip to main content

@helix/shared/pipes

Shared NestJS pipes for validation and transformation.

Overview

Provides common validation and transformation logic:

  • UuidValidationPipe - Validates UUID format
  • PaginationPipe - Validates and normalizes pagination parameters

Installation

import { UuidValidationPipe, PaginationPipe } from '@helix/shared/pipes';

Available Pipes

UuidValidationPipe

Validates that a parameter is a valid UUID format.

@Get(':id')
async getResource(
@Param('id', UuidValidationPipe) id: string,
@TenantId() tenantId: string,
) {
return this.service.findById(tenantId, id);
}

// Valid: GET /api/resources/550e8400-e29b-41d4-a716-446655440000
// Invalid: GET /api/resources/invalid-id → 400 Bad Request

Error Response:

{
"statusCode": 400,
"message": "Invalid UUID format: invalid-id",
"error": "Bad Request"
}

PaginationPipe

Validates and transforms pagination query parameters with sensible defaults.

@Get()
async findAll(
@Query(PaginationPipe) pagination: PaginationParams,
@TenantId() tenantId: string,
) {
return this.service.findAll(tenantId, pagination);
}

// GET /api/users?page=2&pageSize=25&sortBy=email&sortOrder=asc
// pagination = { page: 2, pageSize: 25, sortBy: 'email', sortOrder: 'asc' }

Features:

  • Page: Minimum 1, defaults to 1
  • Page size: Minimum 1, maximum 100, defaults to 10
  • Sort by: Alphanumeric + underscore only, defaults to 'createdAt'
  • Sort order: Must be 'asc' or 'desc', defaults to 'desc'

Usage Patterns

UUID + Pagination

@Get()
async findAll(
@Query(PaginationPipe) pagination: PaginationParams,
) {
return this.service.findAll(pagination);
}

@Get(':id')
async findOne(
@Param('id', UuidValidationPipe) id: string,
) {
return this.service.findById(id);
}

With Decorators

@Get()
async findAll(
@CurrentUser() auth: any,
@TenantId() tenantId: string,
@Query(PaginationPipe) pagination: PaginationParams,
) {
return this.service.findAll(tenantId, auth.userId, pagination);
}

Configuration

PaginationPipe Defaults

DEFAULT_PAGE = 1
DEFAULT_PAGE_SIZE = 10
MAX_PAGE_SIZE = 100

To customize, extend the pipe:

export class CustomPaginationPipe extends PaginationPipe {
private MAX_PAGE_SIZE = 200; // Custom max
}

License

Proprietary - CleverChain Limited