Options
All
  • Public
  • Public/Protected
  • All
Menu

Deprecation Warning

This package has been moved to https://github.com/nestjsx/automapper. Please use nestjsx-automapper instead of this package as it will not be maintained.

Nest Automapper

A wrapper around automapper-nartc to be used with NestJS as a Module.

Documentations

This module is a wrapper around @nartc/automapper so all usage documentations should be referenced at the link below.

Github Pages https://nartc.github.io/mapper/ Github Repo https://github.com/nartc/mapper

Setup

npm i -s nest-automapper

Note 1: Please make sure that you've read @nartc/automapper documentations to familiarize yourself with AutoMapper's terminology and how to setup your Profile and such.

  1. Import AutomapperModule in AppModule and call .forRoot() method.
@Module({
  imports: [AutomapperModule.forRoot()]
})
export class AppModule {}

AutomapperModule.forRoot() method expects an AutomapperModuleRootOptions. When you call AutomapperModule.forRoot(), a new instance of AutoMapper will be created with the name option. There are two properties on the options that you can pass in:

  • name: Name of this AutoMapper instance. Default to "default".
  • config: A configuration function that will get called automatically.

Both options are optional. If you pass in config and configure your AutoMapper there, that is totally fine, but the following approach is recommended. Refer to @nartc/automapper: usage

  1. AutoMapper has a concept of Profile. A Profile is a class that will house some specific mappings related to a specific domain model. Eg: User mappings will be housed by UserProfile. Refer to @nartc/automapper: usage for more information regarding Profile.

NestJS recommends you to separate features/domains in your application into Modules, in each module you would import/declare other modules/parts that are related to that Module. AutomapperModule also has a static method forFeature which should be used in such a feature module. forFeature accepts an AutomapperModuleFeatureOptions which has:

  • profiles: An array of Profiles related to this module, and this will be added to an AutoMapper instance.
  • name: Decide which AutoMapper instance to add these profiles to. Default to "default"
@Module({
  imports: [AutomapperModule.forFeature({profiles: [new UserProfile()]})]
})
export class UserModule {}

Exceptions:

  • AutomapperModule will throw an Exception if forFeature receives an empty option
  • AutomapperModule will throw an Exception if forFeature is called before any forRoot() calls.
  1. Inject an instance of AutoMapper in your Service:
export class UserService {
  constructor(@InjectMapper() private readonly _mapper: AutoMapper) {}
}

Note: AutoMapper is imported from @nartc/automapper. InjectMapper decorator is imported from nest-automapper.

InjectMapper() accepts an optional argument name which will tell the decorator to inject the right instance of AutoMapper. Default to "default".

  1. Use AutoMapper on your domain models:
...
const result = await newUser.save();
return this._mapper.map(result.toJSON(), UserVm);
...

Caveats

Due to reflection capabilities that TypeScript has, there are some caveats/opinionated problems about using this wrapper (ultimately, @nartc/automapper).

  1. @nartc/automapper only works with Classes. Interfaces won't work because Interfaces will lose its context after transpiled.
  2. Please follow @nartc/automapper example to understand how to setup your models.

Index

Variables

Const AUTOMAPPER

AUTOMAPPER: "nestjs__AUTO_MAPPER" = "nestjs__AUTO_MAPPER"

Const MAPPER_MAP

MAPPER_MAP: "nestjs___MAPPER_MAP" = "nestjs___MAPPER_MAP"

Const MapperMap

MapperMap: Map<string, AutoMapper> = new Map<string, AutoMapper>()

Functions

Const InjectMapper

  • InjectMapper(name?: string): function
  • Inject the AutoMapper intsance with name.

    Parameters

    • Optional name: string

      Name of the AutoMapper instance

    Returns function

      • (target: Object, key: string | symbol, index?: number): void
      • Parameters

        • target: Object
        • key: string | symbol
        • Optional index: number

        Returns void

Const getMapperToken

  • getMapperToken(name?: string): string

Legend

  • Module
  • Object literal
  • Variable
  • Function
  • Function with type parameter
  • Index signature
  • Type alias
  • Type alias with type parameter
  • Enumeration
  • Enumeration member
  • Property
  • Method
  • Interface
  • Interface with type parameter
  • Constructor
  • Property
  • Method
  • Index signature
  • Class
  • Class with type parameter
  • Constructor
  • Property
  • Method
  • Accessor
  • Index signature
  • Inherited constructor
  • Inherited property
  • Inherited method
  • Inherited accessor
  • Protected property
  • Protected method
  • Protected accessor
  • Private property
  • Private method
  • Private accessor
  • Static property
  • Static method

Generated using TypeDoc