@nest-js/generic-mapper
TypeScript icon, indicating that this package has built-in type declarations

0.0.4 • Public • Published

Generic Mapper Module

npm version License: MIT

Módulo de mapeo automático y flexible para aplicaciones NestJS, diseñado para transformar objetos entre diferentes tipos de manera eficiente y tipo-segura.

Características Principales

  • 🔄 Mapeo automático basado en nombres de propiedades
  • 🎯 Sistema de decoradores para control preciso
  • 🛠 Transformaciones personalizables
  • 📦 Soporte para objetos anidados y arrays
  • ⚡ Alto rendimiento y tipo-seguro

Instalación

npm install @nest-js/generic-mapper

Configuración

import { MapperModule } from '@nest-js/generic-mapper';

@Module({
  imports: [MapperModule],
})
export class AppModule {}

Decoradores Disponibles

@MapFrom(sourceKey: string)

Mapea una propiedad desde un campo con nombre diferente.

export class UserDto {
  @MapFrom('firstName')
  name: string;
}

@Transform(transformFn: (value: any) => any)

Aplica una transformación personalizada al valor.

export class UserDto {
  @Transform(value => new Date(value))
  createdAt: Date;

  @Transform(value => value.join(', '))
  tags: string;
}

@Ignore()

Excluye una propiedad del proceso de mapeo.

export class UserDto {
  @Ignore()
  temporaryData: string;
}

@Required()

Marca una propiedad como obligatoria durante el mapeo.

export class UserDto {
  @Required()
  id: number;
}

Ejemplos de Uso

Mapeo Básico

@Injectable()
export class UserService {
  constructor(private readonly mapperService: MapperService) {}

  async createUser(dto: CreateUserDto): Promise<User> {
    return this.mapperService.map(dto, User);
  }
}

Mapeo de Arrays

const userDtos = [dto1, dto2, dto3];
const users = this.mapperService.mapArray(userDtos, User);

Mapeo Bidireccional

@Injectable()
export class UserMapper {
  constructor(private readonly mapperService: MapperService) {}

  toEntity(dto: UserDto): User {
    return this.mapperService.map(dto, User);
  }

  toDto(entity: User): UserDto {
    return this.mapperService.map(entity, UserDto);
  }
}

Transformaciones Avanzadas

export class ProductDto {
  @Transform(price => {
    if (typeof price === 'string') return parseFloat(price);
    return price;
  })
  price: number;

  @Transform(tags => Array.isArray(tags) ? tags : tags.split(','))
  tags: string[];
}

Licencia

MIT

Package Sidebar

Install

npm i @nest-js/generic-mapper

Weekly Downloads

4

Version

0.0.4

License

MIT

Unpacked Size

115 kB

Total Files

15

Last publish

Collaborators

  • yasniel1408-myorg-123421341