two-way-object-mapper

1.1.0 • Public • Published

Two way object mapper

Mapper that allows you transform one object to another (and back) using defined rules.

Install

npm install two-way-object-mapper

Simple usage

var ObjectMapper = require('two-way-object-mapper');
 
var mapper = new ObjectMapper();
mapper
    .addPropertyMapping({
        from: 'firstName',
        to: 'name'
    })
    .addPropertyMapping({
        from: 'lastName',
        to: 'surname'
    });
    
var result = mapper.map({
    firstName: 'Tommy',
    lastName: 'Lee Jones'
}); // {name: 'Tommy', surname: 'Lee Jones'}
 
 
mapper.reverseMap(result); // {firstName: 'Tommy', lastName: 'Lee Jones' }
 

Mapping properties

For very simple mapping properties of the same name use "addSimplePropertiesAssignments".

var mapper = new ObjectMapper();
mapper.addSimplePropertiesAssignments(['name', 'surname']);
 
mapper.map({
    name: 'Tommy', 
    surname: 'Lee Jones', 
    age: 18
}); // {name: 'Tommy', surname: 'Lee Jones'}
 

For renaming use "addPropertyMapping".

var mapper = new ObjectMapper();
mapper.addPropertyMapping({
    from: 'name',
    to: 'firstName'
});
 
mapper.map({
    name: 'Tommy', 
    surname: 'Lee Jones', 
    age: 18
}); // {firstName: 'Tommy'}

You can also transform mapped value.

 
var mapper = new ObjectMapper();
mapper.addPropertyMapping({
    from: 'name',
    to: 'firstName',
    transform: function(value) {
        return value.toUpperCase();
    }
});
 
mapper.addPropertyMapping({
    from: 'surname',
    to: 'lastName',
    reverseTransform: function(value) {
        return value.toLowerCase();
    }
})
 
var result = mapper.map({
    name: 'Tommy',
    surname: 'Lee Jones',
    age: 18
}); // {firstName: 'TOMMY', lastName: 'Lee Jones'}
 
mapper.reverseMap(result); // {name: 'TOMMY', surname: 'lee jones'}
 

Default values are also supported.

var mapper = new ObjectMapper();
mapper.addPropertyMapping({
    from: 'name',
    to: 'firstName',
    default: 'Anonymous'
});
 
mapper.map({}); // {firstName: 'Anonymous'}

Custom function mapping

You can extend mapping process by applying additional functions.

var mapper = new ObjectMapper();
// for reverse mapping function use "addReverseMapping"
mapper.addMapping(function(source, target) {
    target.fullName = source.firstName + ' ' + source.lastName;
    return target; 
});
 
mapper.map({
    firstName: 'Tommy', 
    lastName: 'Lee Jones'
}); // {fullName: 'Tommy Lee Jones'}

Deep properties mapping

The tool uses object-path for accessing properties.

var mapper = new ObjectMapper();
mapper
    .addPropertyMapping({
        from: 'author.name',
        to: 'authorName'
    })
    .addPropertyMapping({
        from: 'tags.0',
        to: 'lastTag'
    });
 
mapper.map({
    author: {
        name: 'Lukasz',
        surname: 'Kuzynski'
    },
    
    tags: ['rpc', 'http', 'api']
}); // { authorName: 'Lukasz', lastTag: 'rpc' }
 

Reference

Just read JSDoc

Changelog

1.1.0

  • Ability to read inherited properties

Readme

Keywords

none

Package Sidebar

Install

npm i two-way-object-mapper

Weekly Downloads

3

Version

1.1.0

License

MIT

Last publish

Collaborators

  • wookieb