New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

class-mapper

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

class-mapper

Mapper for ES2015 and TypeScript classes

  • 0.2.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

w3tec

Class Mapper

dependency travis appveyor codecov

A easy to use way to map any ugly backend structures into clean TypeScript/ES6 models.
Inspired typestack class-transformer
Made with ❤️ by w3tech


divider

❯ Why

Are you tired of ugly and weird backend structures which makes it challenging to work with in your application 🤯? Here comes a solution 🎉! Just use class-mapper to map all weird structures into TypeScript and ES6 models 👉 YOU 🤗 like to work with in your web frontend or Node.js application and not backend guys 🤪.

Try it!! We are happy to hear your feedback or any kind of new features.

divider

❯ Table of Contents

divider

❯ Installation

Step 1: Get library via npm or yarn

npm install class-mapper --save

or with yarn

yarn add class-mapper

Step 2: Add library to your project

Browser
<html>
   <head>
       <script src="node_modules/class-mapper/dist/class-mapper.js"></script>
   </head>
</html>

❯ Methods

mapClasses

This method maps a source class to your target class

import {mapClasses, MapFromSource, PropertyType} from 'class-mapper';

/**
 * Source classes
 */

abstract class SourcePersonModel {
  public name1: string;
  public name2: string;
}

class SourceCarModel {
  public attribute1: string;
  public attribute2: string;
}

class SourceCustomerModel extends SourcePersonModel {
  public car1!: SourceCarModel[];
}

const sourceUser: SourceCustomerModel = new SourceCustomerModel();

/**
 * Target classes
 */

abstract class TargetPersonModel {
  @MapFromSource((sourceUser: SourcePersonModel) => sourceUser.name1)
  public firstName!: string;

  @MapFromSource((sourceUser: SourcePersonModel) => sourceUser.name2)
  public lastName!: string;
}

class TargetCarModel {
  @MapFromSource((sourceCar: SourceCarModel) => sourceCar.attribute1)
  public manufacturer!: string;

  @MapFromSource(sourceCar: SourceCarModel) => sourceCar.attribute2)
  public model!: string;
}

class TargetCustomerModel extends TargetPersonModel {
  @PropertyType(TargetCarModel)
  @MapFromSource((sourceUser: SourcePersonModel) => sourceUser.car1)
  public cars!: TargetCarModel[];
}

const targetUser: TargetCustomerModel = mapClasses(TargetCustomerModel, sourceUser);

Using groups to exclude properties

With groups array, you can exclude properties from mapping. MapFromSource decorators with no groups option will always be mapped.

import {mapClasses, MapFromSource, PropertyType} from 'class-mapper';

/**
 * Source class
 */

abstract class SourcePersonModel {
  public name1: string;
  public name1: string;
}

/**
 * Target class
 */

const firstNameOnly = 'first-name-only';
const lastNameOnly = 'last-name-only';

abstract class TargetPersonModel {
  @MapFromSource((sourceUser: SourcePersonModel) => sourceUser.name1, { groups: [firstNameOnly] })
  public firstName!: string;

  @MapFromSource((sourceUser: SourcePersonModel) => sourceUser.name2, { groups: [lastNameOnly] })
  public lastName!: string;
}

const targetUser: TargetCustomerModel = mapClasses(TargetCustomerModel, sourceUser, { groups: [lastNameOnly] });

Using enabled to exclude properties

With enabled you can exclude conditionally properties. MapFromSource decorators with no enabled option will always be mapped.

import {mapClasses, MapFromSource, PropertyType} from 'class-mapper';

/**
 * Source class
 */

abstract class SourcePersonModel {
  public name1: string;
  public name1: string;
}

/**
 * Target class
 */

abstract class TargetPersonModel {
  @MapFromSource((sourceUser: SourcePersonModel) => sourceUser.name1, { enabled: (sourceUser: SourcePersonModel) => !!sourceUser.name1 })
  public firstName!: string;

  @MapFromSource(sourceUser => sourceUser.name2, { enabled: (sourceUser: SourcePersonModel) => !!sourceUser.name2 })
  public lastName!: string;
}

const targetUser: TargetCustomerModel = mapClasses(TargetCustomerModel, sourceUser);

❯ License

MIT

Keywords

FAQs

Package last updated on 31 Jan 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc