A serializer is responsible for transforming a data in a specific format into a data in another format/schema.
For example, the serializer can be used to map client-side models and back-end side objects by checking all the properties of a model to generate an object for which the values are understandable for the back-end service.
+--------+ ----- serialize -----> +----------+
| Client | | Back-End |
+--------+ <---- deserialize ---- +----------+
Note that JavaScript does not support interfaces per se. By "Interface" is meant that this class should not implement any method but provide the skeleton for child classes instead.
- Installation
- Usage
- Advanced documentation
- Resources
- Credits
- License
npm install --save serializerjs
import SerializerFactory from 'serializerjs';
// access to the other elements of the package:
import SerializerInterface from 'serializerjs'.SerializerInterface;
// or
const SerializerInterface = SerializerFactory.SerializerInterface;
// or
import SerializerInterface from 'serializerjs/lib/Serializer/SerializerInterface';
var SerializerFactory = require('serializerjs');
// access to the other elements of the package:
var SerializerInterface = SerializerFactory.SerializerInterface;
// or
var SerializerInterface = require('serializerjs/lib/Serializer/SerializerInterface');
The two key classes of this library are Serializer
and SerializerInterface
. To use it, you just have to
write your own serializers (simple class implementing SerializerInterface
). Once done, create a Serializer
instance serializer
to aggregate all your serializers. You will then be able to use serializer
to (de-)serialize
any kind of data supported by the registered serializers.
Example: For some reason, we are fetching data where instead of having booleans true
and false
in our JSON response,
we have integers 0
or 1
. Let us write a simple BooleanSerializer
that will be responsible for deserializing them
into proper booleans.
// app/Serializer/BooleanSerializer.js
import SerializerFactory from 'serializerjs';
export default class BooleanSerializer extends SerializerFactory.SerializerInterface {
/**
* @inheritDoc
*/
supportsSerialize(data, format = null) {
return false;
}
/**
* @inheritDoc
*
* @param {number|boolean|null} data
*
* @return {boolean}
*/
deserialize(data, className, format = null, context = null) {
if ('boolean' === typeof data || null === data) {
return data;
}
return Boolean(data);
}
/**
* @inheritDoc
*/
supportsDeserialize(data, className, format = null) {
if ('boolean' !== className) {
return false;
}
if ('boolean' === typeof data || null === data) {
return true;
}
if (0 === data || 1 === data) {
return true;
}
return false;
}
}
Then create the serializer
service with all the serializers you which to register. In our case we only have
BooleanSerializer
:
// app/Serializer/Serializer.js
import SerializerFactory from 'serializerjs';
import BooleanSerializer from './BooleanSerializer';
export default SerializerFactory(new Map([
['BooleanSerializer', booleanSerializer],
]));
You can then use it like so:
// app/index.js
import serializer from './Serializer/Serializer';
serializer.supportsDeserialize(1, 'boolean')); // => true
serializer.deserialize(1, 'boolean'); // => true
serializer.supportsSerialize(true); // => true
serializer.serialize(true); // => true
Project made by Théo FIDRY and sponsored by HAIRCVT.
Copyright © 2015 HAIRCVT Licensed under the MIT license.