NestJSX Automapper
A wrapper around @nartc/automapper to be used with NestJS as a Module
.
Announcement
@nartc/automapper
(which is what this wrapper wraps around) has been broken up into a monorepo and released as under the scope @automapper/*
. With that change, NestJS wrapper is also under that same scope as @automapper/nestjs
. Please take a look at the documentations for Migration Guide.
Migrations
Migrate to v3
forRoot()
method will be deprecated soon (still available in v3). Please use withMapper()
instead.
Documentations
This module is a wrapper around @nartc/automapper
so all usage documentations should be referenced at the link below.
Github Pages https://automapper.netlify.com/ Github Repo https://github.com/nartc/mapper
Features
- Mapping between two classes
- Mapping for nested classes
- Array/List Mapping
- Flattening
- Basic ReverseMap
- Value Converters
- Value Resolvers
- Async
- Before/After Callback
- Naming Conventions (PascalCase and camelCase)
Contributions are appreciated.
Setup
npm i -s nestjsx-automapper
Installing nestjsx-automapper
will also install @nartc/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.
Setup
- Import
AutomapperModule
inAppModule
and call.withMapper()
method
@Module({
imports: [AutomapperModule.withMapper()],
})
export class AppModule {}
AutomapperModule.withMapper()
has the following overloads:
static withMapper(name?: string, options?: AutoMapperGlobalSettings);
static withMapper(options?: AutoMapperGlobalSettings);
name
: Name of theAutoMapper
instance being created withwithMapper()
. Default to"default"
options
: Check AutoMapperGlobalSettings for more information
nestjsx-automapper
exposes a@Profile()
decorator to decorate yourProfile
classes.
@Profile()
class UserProfile extends ProfileBase {}
@Profile()
takes in an optional name
argument. This is the name
if the AutoMapper
instance you use to create the instance with withMapper()
. Default to "default"
Usually, NestJS
will have many Feature Modules for each of the Domain Models. Hence, a Profile
should stay in close to where the feature module is.
If you want to separate Profile
out to a separate file, then you need to make sure that file gets executed by importing it somewhere (again, the module is a good place).
- Inject the
AutoMapper
instance in yourInjectable
@Injectable()
export class UserService {
constructor(@InjectMapper() private readonly mapper: AutoMapper) {}
}
@InjectMapper()
takes in an optional name
argument which will tell the decorator which AutoMapper
instance to inject. Default to "default"
InjectMapper
is imported fromnestjsx-automapper
.AutoMapper
is imported from@nartc/automapper
- Use
AutoMapper
on your models
// ...
const result = await newUser.save();
return this.mapper.map(result.toJSON(), UserVm, User);