8.8.1 • Published 3 months ago

@automapper/classes v8.8.1

Weekly downloads
466
License
MIT
Repository
github
Last release
3 months ago

@automapper/classes

This is the official strategy from @automapper to work with TS/ES6 Class

Installation

npm i @automapper/classes

or with yarn:

yarn add @automapper/classes

peerDependencies

@automapper/classes depends on @automapper/core and reflect-metadata.

npm i @automapper/core reflect-metadata

or with yarn:

yarn add @automapper/core reflect-metadata

Usage

@automapper/classes provides classes as a MappingStrategyInitializer. Pass classes() to createMapper to create a Mapper that uses classes strategy.

import { classes, AutoMap } from '@automapper/classes';
import { createMapper, createMap, forMember, mapFrom } from '@automapper/core';

const mapper = createMapper({
  ...,
  strategyInitializer: classes()
});

class User {
    @AutoMap()
    firstName: string;
    @AutoMap()
    lastName: string;

    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

class UserDto {
  @AutoMap()
  firstName: string;
  @AutoMap()
  lastName: string;
  @AutoMap()
  fullName: string;
}

createMap(
    mapper,
    User,
    UserDto,
    forMember(
        d => d.fullName,
        mapFrom(s => s.firstName + ' ' + s.lastName)
    )
);
mapper.map(new User('Auto', 'Mapper'), User, UserDto);
// UserDto { firstName: 'Auto', lastName: 'Mapper', fullName: 'Auto Mapper' }

Customization

classes() accepts two optional parameters:

  • destinationConstructor: how to construct the Destination. This is the default destinationConstructor that will be used on mapper.mapXXXX() operations. DestinationConstructor is a function with the following signature:

    export type DestinationConstructor<
        TSource extends Dictionary<TSource> = any,
        TDestination extends Dictionary<TDestination> = any
    > = (
        sourceObject: TSource, // the sourceObject used to map to the Destination
        destinationIdentifier: MetadataIdentifier<TDestination> // the Destination model
    ) => TDestination;
    
    // example
    mapper.map(user, User, UserDto);
    // sourceObject will be "user"
    // destinationIdentifier will be "UserDto"
    // This allows you to provide a default constructor that can be based on the Source object data
    • There is a way to provide one-off custom destinationConstructor to any given Mapping when you run createMap. Read more about constructUsing
  • applyMetadata: how the strategy should apply the metadata to a model. The default should work for most cases but if you would like to customize this, you can. ApplyMetadata is a function with the following signature:

    export type ApplyMetadataFn = <TModel extends Dictionary<TModel>>(
        model: MetadataIdentifier<TModel>
    ) => TModel;
    
    export type ApplyMetadata = (
        strategy: MappingStrategy<MetadataIdentifier>
    ) => ApplyMetadataFn;
    
    // for example
    const customApplyMetadata: ApplyMetadata = (strategy: MappingStrategy) => {
        // strategy contains the Mapper which stores all the models' metadata
        return (model) => {
            // based on this model, you can extract the metadata and do as you like
    
            return anObjectThatHasTheMetadataApplied; // { foo: undefined, bar: undefined }
        };
    };

Read more about this strategy on classes documentation

8.8.1

3 months ago

8.8.0

3 months ago

8.7.7

2 years ago

8.7.6

2 years ago

8.6.0

2 years ago

8.5.0-beta.0

2 years ago

8.7.2

2 years ago

8.7.1

2 years ago

8.7.4

2 years ago

8.7.3

2 years ago

8.3.7

2 years ago

8.7.0

2 years ago

8.7.5

2 years ago

8.4.1

2 years ago

8.4.0

2 years ago

8.3.7-beta.0

2 years ago

8.5.0

2 years ago

8.5.1

2 years ago

8.3.6

2 years ago

8.3.5

2 years ago

8.3.4

2 years ago

8.2.3

2 years ago

8.2.2

2 years ago

8.2.4

2 years ago

8.0.0-beta.6

2 years ago

8.0.0-beta.5

2 years ago

8.0.0-beta.8

2 years ago

8.0.0-beta.7

2 years ago

8.0.0-beta.9

2 years ago

8.1.0

2 years ago

8.0.1-beta.0

2 years ago

8.0.0-beta.0

2 years ago

8.0.1-beta.1

2 years ago

8.0.0-beta.2

2 years ago

8.0.0-beta.1

2 years ago

8.0.0-beta.4

2 years ago

8.0.0-beta.3

2 years ago

8.3.2

2 years ago

8.3.1

2 years ago

8.3.3

2 years ago

8.2.1

2 years ago

8.2.0

2 years ago

8.1.0-beta.0

2 years ago

8.3.0

2 years ago

8.0.0-beta.11

2 years ago

8.0.0-beta.10

2 years ago

8.0.0-beta.13

2 years ago

8.0.0-beta.12

2 years ago

8.0.0-beta.15

2 years ago

8.0.0-beta.14

2 years ago

8.0.0-beta.17

2 years ago

8.0.0-beta.16

2 years ago

8.0.0-beta.18

2 years ago

8.0.1

2 years ago

8.0.0

2 years ago

7.3.14

2 years ago

7.3.13

2 years ago

7.3.10

2 years ago

7.3.12

2 years ago

7.3.11

2 years ago

7.3.1

2 years ago

7.3.0

2 years ago

7.3.5

2 years ago

7.3.4

2 years ago

7.3.3

2 years ago

7.3.2

2 years ago

7.3.9

2 years ago

7.3.8

2 years ago

7.3.7

2 years ago

7.3.6

2 years ago

7.1.1

2 years ago

7.1.0

2 years ago

7.2.1

2 years ago

7.0.3

2 years ago

7.2.0

2 years ago

7.0.0

2 years ago

7.0.2

2 years ago

7.0.1

2 years ago

6.3.0

3 years ago

6.3.1

3 years ago

6.2.1

3 years ago

6.2.0

3 years ago

6.1.4

3 years ago

6.1.2

3 years ago

6.1.3

3 years ago

6.1.0

3 years ago

6.1.1

3 years ago

6.0.2

3 years ago

6.0.1

3 years ago

6.0.0

3 years ago

5.0.1

3 years ago

5.0.0

3 years ago

4.2.2

3 years ago

4.2.1

3 years ago

4.2.0

3 years ago

4.1.0

3 years ago

4.0.0

3 years ago

3.5.2

3 years ago

3.5.1

3 years ago

3.5.0

3 years ago

3.4.2

3 years ago

3.4.1

3 years ago

3.4.0

3 years ago

3.3.0

3 years ago

3.2.2

3 years ago

3.2.1

3 years ago

3.2.0

3 years ago

3.1.0

3 years ago

3.0.11

3 years ago

3.0.9

3 years ago

3.0.10

3 years ago

3.0.8

3 years ago

3.0.7

3 years ago

3.0.6

3 years ago

3.0.5

3 years ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.2.1

3 years ago

2.2.0

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.1

3 years ago

1.2.0

3 years ago

2.0.0

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.2

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

1.0.0-beta.9

3 years ago

1.0.0-beta.8

3 years ago

1.0.0-beta.7

3 years ago

1.0.0-beta.6

3 years ago

1.0.0-beta.5

3 years ago

1.0.0-beta.3

3 years ago

1.0.0-beta.4

3 years ago

1.0.0-beta.2

3 years ago

1.0.0-beta.1

3 years ago