Morphism

Helps you to transform any object structure to another
Communication
Installation
$ npm install --save morphism
What does it do?
Morphism uses a semantic configuration to go through the collection of graph objects you have to process. Then it extracts and computes the value from the specified path(s). Finally, it sets this value to the destination property from the schema.
Usage
Morphism is curried function that allows a partial application with a semantic configuration. You can use it in 2 ways:
As a Mapper factory
var Morphism = require('morphism');
let mapping = { ... }
let collectionOfObjects = [ ... ]
let anotherCollection = [ ... ]
let myAwesomeMapper = Morphism(mapping);
myAwesomeMapper(collectionOfObjects);
myAwesomeMapper(anotherCollection);
As a Static instance
var Morphism = require('morphism');
let mapping = { ... }
let collectionOfObjects = [ ... ]
let results = Morphism(mapping, collectionOfObjects);
Dataset sample
let data = [{
'firstName': 'John',
'lastName': 'Smith',
'address':
{
'city': 'New York',
'country': 'USA'
},
'phoneNumber':
[
{
'type': 'home',
'number': '212 555-1234'
},
{
'type': 'fax',
'number': '646 555-4567'
}
]
}];
Simple mapping
let data = [ ... ];
let mapping = {
pseudo: 'firstName',
lastName: 'lastName',
city: 'address.city'
};
let results = Morphism(mapping, data);
console.log(results[0]) ==>
{
pseudo: 'John',
lastName: 'Smith',
city: 'New York'
}
Value transformation
let data = [ ... ];
let mapping = {
pseudo: 'firstName',
lastName: 'lastName',
city: {
path: 'address.city',
fn: (city) => city.toLowerCase()
},
nbContacts: (object) => object.phoneNumber.length
};
let mapper = Morphism(mapping);
let results = mapper(data);
console.log(results[0]) ==>
{
pseudo: 'John',
lastName: 'Smith',
city: 'new york',
nbContacts: 2
}
Values Aggregation
let data = [ ... ];
let mapping = {
user: ['firstName','lastName']
city: 'address.city'
};
let results = Morphism(mapping, data);
console.log(results[0]) ==>
{
user: {
'firstName': 'John',
'lastName': 'Smith'
},
city: 'New York'
}
License
MIT © Yann Renaudin