Presentation and transformation layer for data output in RESTful APIs.
•• Vicis Documentation •• JavaScript Repository •• Deno Repository ••
This is Node.js analogue to these libraries:
-
🐘 Fractal for PHP
-
💎 Roar for Ruby
-
🍢 Marshmallow for Python
-
⚡ FastAPI - Response Model for Python FastAPI framework.
Code:
import { Vicis } from "vicis";
const configuration = {
cast: {
// convert `_id` to integer
_id: Vicis.INTEGER,
// convert `registered` to boolean
registered: Vicis.FLAG,
},
nullish: {
// if not set `confirmed` set to `false`
confirmed: false,
},
exclude: [
// exclude fields with names like `password`
/(?:password)/gi, /^(?:_)(?:_)?/,
],
omit: [
// remove fields that may be personal
"createdAt", "updatedAt", "deletedAt",
],
rename: {
// rename `_id` to `id`
_id: "id",
// rename `email` to `login`
email: "login",
},
replace: {
// always replace field value with `null`
url: null,
},
order: [
// `id` and `login` goes first, then everyone else
"id", "login",
],
};
const model = {
_id: "54759309034942804",
email: "johnwick@gmail.com",
userPassword: "36e80092ff7f1ed72903cda9409b9d2c",
registered: "1",
url: "example.com",
createdAt: "2020-01-01 01:23:45",
__v: 1
};
const serializer = new Vicis(configuration);
serializer.data(model);
console.log(serializer.getData());
Output:
{
"id": 54759309034942800,
"login": "johnwick@gmail.com",
"confirmed": false,
"registered": true,
"url": null
}