Skip to content

Creekmind/class-mapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@cmind/class-mapper

Class mapper consist of several decorators and two functions: box(), unbox(). You use box to convert your class to raw JS object. And unbox() to convert JS object and its nested properties to the instances of specified classes.

Install

npm i --save @cmind/class-mapper

Usage

class Person {
  @number()
  id: number;
  @string()
  name: string;
  @boolean()
  enabled: boolean;

  displayName: string;

  constructor(id: number, name: string, enabled = true) {
    this.id = id;
    this.name = name;
    this.enabled = enabled;
  }
}

class Organization {
  @number()
  id: number;

  @array(Person)
  employees: Person[];
}
const raw = {
  id: '3591',
  employees: [{
    id: 1,
    name: 'John',
    enabled: true
  }, {
    id: 2,
    name: 'Jack',
    enabled: true
  }]
};

const organization = unbox<Organization>(raw, Organization);

console.log(organization instanceof Organization); //true
console.log(organization.id === 3591); //true
console.log(organization.employees[0] instanceof Person); //true

const rawOrganization = box<Organization>(organization);

Decorators:

any();                     // no conversion
number();                  // convert input value to number (+value) 
string();                  // convert input value to string (value.toString())
boolean();                 // convert input value to boolean (!!value)
object(cls: new() => any); // unbox input value to cls
array(cls: new() => any);  // create array and unbox input each element of input value to cls

skipBoxing();              // Skip field on boxing
skipUnboxing();            // Skip field on unboxing 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published