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).
You can simply install the ModelSerializer by running
npm install modelserializer
Then you require the package as follows
const ModelSerializer = require('modelserializer');
You can run tests for this package by running npm test
.
The following examples show on how to use this package.
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 } }
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!
Feel free to open an issue or send me a pull request in case you have any idea on how to improve this package.