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.

    Keywords

    none

    Install

    npm i simpler-mapper

    DownloadsWeekly Downloads

    0

    Version

    1.0.0-alpha003

    License

    MIT

    Unpacked Size

    37.4 kB

    Total Files

    20

    Last publish

    Collaborators

    • cdibbs