modelserializer
v1.0.4
Published
Javascript model serializer
Downloads
33
Readme
ModelSerializer
This projects contains a simple serializer for Javascript objects written in just a few lines of code and minimum dependencies. It's aim is to simply apply transformations on various Javascript objects (e.g. before you return them to user via REST API).
Installation
You can simply install the ModelSerializer by running
npm install modelserializer
Then you require the package as follows
const ModelSerializer = require('modelserializer');
Run tests
You can run tests for this package by running npm test
.
Example usages
The following examples show on how to use this package.
Basic usage
Simple serialization consists of pure field picking from objects
const serializer = new ModelSerializer({
attributes: [
{ field: 'a' },
{ field: 'b' }
]
});
console.log(serializer.serialize({ a: 1, b: 2, c: 3 }));
// { a: 1, b: 2 }
You can also pick nested fields
const serializer = new ModelSerializer({
attributes: [
{ field: 'x.a' },
{ field: 'b' }
]
});
console.log(serializer.serialize({ a: 1, b: 2, x: { a: 1, b: 2, c: 3 } }));
// { x: { a: 1 }, b: 2 }
Or use field aliases
const serializer = new ModelSerializer({
attributes: [
{ field: 'a', alias: 'x' },
{ field: 'b', alias: 'y.a' }
]
});
console.log(serializer.serialize({ a: 1, b: 2, c: 3 }));
// { x: 1, y: { a: 2 } }
Advanced usage
Serializers can be nested as follows
const nestedSerializer = new ModelSerializer({
attributes: [
{ field: 'a' }
]
});
const serializer = new ModelSerializer({
attributes: [
{ field: 'x', alias: 'y', serializer: nestedSerializer }
]
});
console.log(serializer.serialize({ x: { a: 1, b: 2 } }));
// { y: { a: 1 } }
Or you can pass a function as a serializer for particular value
const serializer = new ModelSerializer({
attributes: [
{ field: 'a', serializer: (value) => value + 10 },
// You can also access the original object (source.b === value)
{ field: 'b', serializer: (value, source) => source.a + value }
]
});
console.log(serializer.serialize({ a: 1, b: 2 }));
// { a: 11, b: 3 }
And that's it!
Contributions
Feel free to open an issue or send me a pull request in case you have any idea on how to improve this package.