simpler-mapper
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-alpha003 • Public • Published

npm version Build Status dependencies Status devDependencies Status codecov Greenkeeper badge

Simpler Mapper

A recursive, object-to-object mapper with optional mapping profiles.

  • For straight name-for-name mapping, no profile is needed.
  • Use a profile for:
    • specifying different source or destination names,
    • value transformations,
    • beforeMap or afterMap callbacks.

Usage

Basic usage with a mapping profile:

import { Mapper } from 'simpler-mapper';

// assumes class Accountant { ... } exists:
let mappingProfile = { exceptions: { homePhone: "cellPhone", fullname: p => p.First + " " + p.Last } };
let mapper = new Mapper();
let accountant = mapper.map(person, Accountant, mappingProfile);

Or, you can implement the MapperProfile<TSource, TDest> interface to improve maintainability:

class MyProfile implements MapperProfile<Person, Accountant> {
    exceptions = {
        homePhone: "cellPhone" as keyof Person,
        fullName: (p: Person) => p.First + " " + p.Last
    };

    beforeMap(src: Person): Accountant {
        const a = new Accountant(src);
        // ...super custom stuff...
        return a;
    }
}
let mappingProfile = new MyProfile();

In fact, a project can have many such mapping profiles, and they can inherit from (or be composed of) each other to ease your workload.

Beyond lambdas and property name overrides, you can also specify beforeMap and afterMap callbacks:

let mapper = new Mapper();
let mappingProfile = { afterMap: (src, dest, p) => dest["key"] = "val" };
let accountant = mapper.map(person, Accountant, mappingProfile);

That's about it. Personally, this is all I've needed. Just how much simpler is Simpler Mapper? It's one class, and its supporting interfaces, and type definitions.

Installation

npm install --save-dev simpler-mapper

History

Q: Didn't you already make a mapper?

A: Yes, but it wasn't simple/effective enough. It relied on annotations and wasn't very flexible.

Readme

Keywords

none

Package Sidebar

Install

npm i simpler-mapper

Weekly Downloads

1

Version

1.0.0-alpha003

License

MIT

Unpacked Size

37.4 kB

Total Files

20

Last publish

Collaborators

  • cdibbs