JSPM

@heritsilavo/mapper

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

TypeScript object mapper library with fluent API

Package Exports

  • @heritsilavo/mapper
  • @heritsilavo/mapper/dist/index.esm.js
  • @heritsilavo/mapper/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 (@heritsilavo/mapper) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

πŸ—ΊοΈ @heritsilavo/Mapper

TypeScript object mapper library with fluent API, inspired by AutoMapper (.NET) and MapStruct (Java).

✨ Features

  • 🎯 Fluent API - Chain configurations with .forMember()
  • πŸ”„ Auto-mapping - Automatically maps properties with identical names
  • 🎨 Custom transformations - Define complex mapping rules
  • πŸ“¦ Reverse mapping - Create bidirectional mappings with .reverseMap()
  • 🧩 Mapping profiles - Organize mappings by domain
  • πŸš€ Type-safe - Full TypeScript support with generics
  • πŸ“ Array mapping - Map collections with .mapArray()

πŸ“¦ Installation

npm install @heritsilavo/mapper

πŸš€ Quick Start

import { Mapper } from '@heritsilavo/mapper';

// Define your classes
class User {
  id!: number;
  firstName!: string;
  lastName!: string;
  age!: number;
}

class UserDto {
  id!: number;
  fullName!: string;
  ageCategory!: string;
}

// Create mapper instance
const mapper = new Mapper();

// Configure mapping
mapper.createMap(User, UserDto)
  .forMember('fullName', s => `${s.firstName} ${s.lastName}`)
  .forMember('ageCategory', s => s.age >= 18 ? 'Adult' : 'Minor');

// Use the mapper
const user = Object.assign(new User(), {
  id: 1,
  firstName: 'Heritsilavo',
  lastName: 'Andriantsilavina',
  age: 22
});

const dto = mapper.map(user, UserDto);
console.log(dto);
// Output: { id: 1, fullName: 'Heritsilavo Andriantsilavina', ageCategory: 'Adult' }

πŸ“š Documentation

Basic Mapping

// Auto-mapping (properties with same name)
mapper.createMap(Product, ProductDto);

const dto = mapper.map(product, ProductDto);

Custom Transformations

mapper.createMap(User, UserDto)
  .forMember('fullName', s => `${s.firstName} ${s.lastName}`)
  .forMember('displayAge', s => `${s.age} years old`);

Array Mapping

const users: User[] = [...];
const dtos = mapper.mapArray(users, UserDto);

Reverse Mapping

mapper.createMap(User, UserDto)
  .forMember('fullName', s => `${s.firstName} ${s.lastName}`)
  .reverseMap()
  .forMember('firstName', s => s.fullName.split(' ')[0])
  .forMember('lastName', s => s.fullName.split(' ')[1]);

Mapping Profiles

import { MappingProfile } from '@heritsilavo/mapper';

class UserMappingProfile extends MappingProfile {
  configure(mapper: Mapper): void {
    mapper.createMap(User, UserDto)
      .forMember('fullName', s => `${s.firstName} ${s.lastName}`);
    
    mapper.createMap(User, UserSummaryDto)
      .forMember('name', s => s.firstName);
  }
}

mapper.addProfile(new UserMappingProfile());

Custom Mapper

mapper.createCustomMap(User, UserDto, (source) => ({
  id: source.id,
  fullName: `${source.firstName} ${source.lastName}`,
  ageCategory: source.age >= 18 ? 'Adult' : 'Minor'
}));

Disable Auto-mapping

mapper.createMap(User, UserDto)
  .disableAutoMap()
  .forMember('id', s => s.id)
  .forMember('fullName', s => `${s.firstName} ${s.lastName}`);

πŸ”§ API Reference

Mapper

Method Description
createMap(Source, Destination) Create a mapping configuration
.forMember(key, transform) Define custom transformation
.reverseMap() Create reverse mapping
.map(source, Destination) Map single object
.mapArray(sources, Destination) Map array of objects
.addProfile(profile) Add mapping profile
.createCustomMap(Source, Destination, fn) Create fully custom mapper
.clear() Clear all configurations

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

πŸ“„ License

MIT Β© Heritsilavo Andriantsilavina

Made with ❀️ by Heritsilavo