Skip to content

This module provides an easy object mapper from a template skeleton.

Notifications You must be signed in to change notification settings

RolandoAndrade/skeleton-mapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SKELETON MAPPER

This module provides an easy object mapper from a template skeleton.

Mapping objects

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}[]
  • source is an object, or a collection of objects.

  • skeleton is 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.

  • addUndefinedFields maps the undefined fields inside the result object (usually keys undefined are not given).

Examples

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"
                }
            }
        }
    ]
*/

About

This module provides an easy object mapper from a template skeleton.

Topics

Resources

Stars

Watchers

Forks