Skip to content

hermandavid/modelserializer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Javascript model serializer.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published