README
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
Changelog
1.1.0
- Ability to read inherited properties