1.3.1 • Published 6 years ago
node-mapper-tool v1.3.1
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!