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.
- 🔄 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
npm install @nest-js/generic-mapper
import { MapperModule } from '@nest-js/generic-mapper';
@Module({
imports: [MapperModule],
})
export class AppModule {}
Mapea una propiedad desde un campo con nombre diferente.
export class UserDto {
@MapFrom('firstName')
name: string;
}
Aplica una transformación personalizada al valor.
export class UserDto {
@Transform(value => new Date(value))
createdAt: Date;
@Transform(value => value.join(', '))
tags: string;
}
Excluye una propiedad del proceso de mapeo.
export class UserDto {
@Ignore()
temporaryData: string;
}
Marca una propiedad como obligatoria durante el mapeo.
export class UserDto {
@Required()
id: number;
}
@Injectable()
export class UserService {
constructor(private readonly mapperService: MapperService) {}
async createUser(dto: CreateUserDto): Promise<User> {
return this.mapperService.map(dto, User);
}
}
const userDtos = [dto1, dto2, dto3];
const users = this.mapperService.mapArray(userDtos, User);
@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);
}
}
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[];
}
MIT