node-mapper-tool
Data mapper
Last updated 2 years ago by ok3x .
ISC · Original npm · Tarball · package.json
$ cnpm install node-mapper-tool 
SYNC missed versions from official npm registry.

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!

Current Tags

  • 1.3.1                                ...           latest (2 years ago)

12 Versions

  • 1.3.1                                ...           2 years ago
  • 1.3.0                                ...           2 years ago
  • 1.2.1                                ...           3 years ago
  • 1.2.0                                ...           3 years ago
  • 1.1.1                                ...           3 years ago
  • 1.1.0                                ...           3 years ago
  • 1.0.5                                ...           4 years ago
  • 1.0.4                                ...           4 years ago
  • 1.0.3                                ...           4 years ago
  • 1.0.2                                ...           4 years ago
  • 1.0.1                                ...           4 years ago
  • 1.0.0                                ...           4 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 3
Last Day 0
Last Week 0
Last Month 8
Dependencies (0)
None
Dev Dependencies (1)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |