Skip to content

Mapper configuration

Simone Bembi edited this page Jan 27, 2018 · 1 revision

Mapper configuration

It is a set of configuration for the entire mapper object.
It can be used using the withConfiguration function after mapper initialization.

e.g.

const mapper = new Mapper()
    .withConfiguration(
        configuration => 
            configuration
                .shouldRequireExplicitlySetProperties(true)
                .shouldIgnoreSourcePropertiesIfNotInDestination(true)
    );

The methods of the mapper configuration are:

  • shouldRequireExplicitlySetProperties(value: boolean)
  • shouldIgnoreSourcePropertiesIfNotInDestination(value: boolean)
  • shouldAutomaticallyMapArrays(value: boolean)
  • shouldAutomaticallyApplyImmutability(value: boolean)
  • maxDepth(value: number)

Explicitly set properties

Default: false

The shouldRequireExplicitlySetProperties method lets you define if defined properties ONLY should be mapped.

e.g.

class SourceClass {
    a: string;
    b: string;
}
class DestinationClass {
    a: string;
    b: string;
}

// Map signature require to recognized types at runtime
const sign = {
    source: Symbol('s'),
    destination: Symbol('d')
};

const sourceObject = new SourceClass();
sourceObject.a = 'a';
sourceObject.b = 'b';

const mapper = new Mapper()
    .withConfiguration(conf => conf.shouldRequireExplicitlySetProperties(true));

mapper.createMap<SourceClass, DestinationClass>(sign, DestinationClass)
    .forMember('a', opt => opt.mapFrom(source => source.a));

const destinationObject = mapper.map<SourceClass, DestinationClass>(sign, sourceObject);

console.log(destinationObject.a); // 'a'
console.log(destinationObject.b); // undefined

The property b of the source is not copied because it is not explicitly specified in the map ruleset.


Ignore source properties if not in destination

Default: false

The shouldIgnoreSourcePropertiesIfNotInDestination method lets you define if properties present in source object should be mapped in destination object.
Notice that a source property is defined as present if it is not undefined.


Automatically map arrays

Default: true

The shouldAutomaticallyMapArrays method lets you define if the mapper should automatically map arrays.

i.e. A call to the map() method of the mapper class can map a source object if it is a single object or an array.

Notice that this method works detecting if the source object is an array.

Notice also that the map() method return type is a single destination class, even if it is an array of destination objects.
To get the right return type you should call the mapMany() method.


Automatically apply immutability

Default: false

The shouldAutomaticallyApplyImmutability method lets you define if the mapper should automatically apply immutability for everything.

It is disabled by default due to performance reasons:

  • to automatically apply immutability, the mapper checks if the new mapped value is an object or an array each time a property is mapped
  • to apply immutability, a spread operator is used, so the reallocation of the new object/array is slower than using its reference

Max depth

Default: -1

The maxDepth methods lets you define at which level of depth a nested mapping execution should stop.