1.3.1 • Published 6 years ago

node-mapper-tool v1.3.1

Weekly downloads
1
License
ISC
Repository
-
Last release
6 years ago

Mapper module

Data mapping tool - a convenient way to map/transform between data structures

Installation

In your project folder run:

npm install --save node-mapper-tool

Note: The module code uses few ES6 features, so at least 4.4.5 version of Node is required.

Usage

Use the mapper tool to map data from one structure to another:

// (mapping.js)
export const schema = {
    // target: source

    // direct mapping
    "name": "username",

    // path mapping
    "user.uuid": "social.id",

    // functional mapping
    "user.nick": ["social.nickname", "social.id", (nick, id) => {
        return nick.toUpperCase() + id;
    }],

    // functional mapping/sanitizing
    "date": ["datetime", dateSanitizer],

    // general functional mapping
    "hash": createHash,

    // default value mapping
    "tags": () => ["newbie", "level1"],

    // optional target mapping - target is skipped if value is undefined
    "friends?": "social.friends",

    // optional value mapping - value is skipped if undefined
    "friends": "social.friends?",

    // preset mapping - mapper must be initialized with presets: { injected: any }
    "preset": "@injected"
};

// schema helper functions:

function dateSanitizer (value) {
    return new Date(value).toISOString();
}

function createHash = (source) => {
    const crypto = require("crypto");
    return crypto.createHash("md5")
        .update(source.username)
        .update(source.datetime)
        .digest("hex");
}

Note: Paths may be marked as optional by appending ? either to the target path or source path. Returning undefined by mapping function also makes path optional and won"t throw an error.

// include the tool
import { Mapper } from "node-mapper-tool";
// load the mapping definition
import { schema } from "./mapping.js";

// basic factory
const mapper = Mapper.create();
const result = mapper.map(source, schema);

// or

// instantiate with options
const mapper = new Mapper({
    mapping: schema,
    presets: { injected: 1 }
});

// source data
const source = {
    username: "Jon",
    datetime: 1473427298097,
    social: {
        id: "user0325",
        nickname: "Jonnas"
    }
};

// mapped data
const result = mapper.map(source);

Issues

Since the github repo is not ready yet, please use my email address in profile to contact me. Cheers!

1.3.1

6 years ago

1.3.0

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.5

8 years ago

1.0.4

8 years ago

1.0.3

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago