This module provides an easy object mapper from a template skeleton.
The definition of the function is:
declare function skeletonMap(
source: {[key: string]: any} | {[key: string]: any}[],
skeleton: {[key: string]: string},
addUndefinedFields = false
): {[key: string]: any} | {[key: string]: any}[]-
sourceis an object, or a collection of objects. -
skeletonis the template to be mapped, its keys should have as value the fields from the source object. If the field is inside an object, you can access it by a dot notation. -
addUndefinedFieldsmaps the undefined fields inside the result object (usually keys undefined are not given).
Map an object
const source = {
name: "Team 1",
shield: "shield.jpg",
university: 5,
players: [
{
name: "Poe",
surname: "Doe",
},
{
name: "John",
surname: "Msk",
},
],
};
const skeleton = {
teamName: "name",
image: "shield",
players: "players",
};
const r = skeletonMap(source, skeleton);
/*
{
teamName: "Team 1",
image: "shield.jpg",
players: [
{
name: "Poe",
surname: "Doe",
},
{
name: "John",
surname: "Msk",
},
],
}
*/Map keys inside keys using dot notation
const source = {
name: "Angel",
surname: "Main",
role: {
id: 1,
name: "Admin",
},
team: {
id: 1,
name: "Team 1",
university: {
id: 1,
name: "University 1",
},
},
};
const skeleton = {
name: "name",
surname: "surname",
roleId: "role.id",
universityName: "team.university.name",
};
const r = skeletonMap(source, skeleton);
/*
{
name: "Angel",
surname: "Main",
roleId: 1,
universityName: "University 1",
}
*/Map an array and give a different shape as output
const source = [
{
name: "Angel",
surname: "Main",
team: {
id: 1,
name: "Team 1",
university: {
id: 1,
name: "University 1",
},
},
},
{
name: "Lisa",
surname: "Maz",
team: {
id: 2,
name: "Team 2",
university: {
id: 2,
name: "University 2",
},
},
},
];
const skeleton = {
athlete: {
name: "name",
},
university: {
name: "team.university.name",
team: {
id: "team.id",
name: "team.name"
}
}
};
const r = skeletonMap(source, skeleton);
/*
[
{
athlete: {
name: "Angel",
},
university: {
name: "University 1",
team: {
id: 1,
name: "Team 1"
}
}
},
{
athlete: {
name: "Lisa",
},
university: {
name: "University 2",
team: {
id: 2,
name: "Team 2"
}
}
}
]
*/