@twistezo/ts-dto-mapper
TypeScript icon, indicating that this package has built-in type declarations

1.0.16 • Public • Published

DTO mapper based on TS types

Build and test

Description

Utility for easy mapping between DTO and OM objects based on their data types.

Benefits:

  • no object-oriented approach based on classes
  • no cluttering the code with decorators
  • no need to install a large library for a simple operation
  • only function based on objects types with access to the context inside

Knowledge

DTO - Data Transfer Object

OM - Object Model

Setup

npm install @twistezo/ts-dto-mapper

Tips

  • Always populate generic types <From>, and <To> in mapDTO function. This helps you with debugging and provides IDE IntelliSense.

  • .transform accepts callback with source context so you can put there reusable data transformation and have reusable mapper.

Usage

tldr;

From DTO:

const foo = mapDTO<FooDTO, Foo>({ from: fooDTO }).transform(fooDTO => ({
  // map with access to source context
}))

To DTO:

const fooDTO = mapDTO<Foo, FooDTO>({ from: foo }).transform(foo => ({
  // map with access to source context
}))

Full example

Import:

import { mapDTO } from '@twistezo/ts-dto-mapper'

Prepare OM and DTO shapes:

type Foo = {
  id: string
  firstName: string
  lastName: string
}

type FooDTO = {
  uuid: number
  fullName: string
  unnecessary: object
}

Prepare objects:

const foo: Foo = {
  id: '1001',
  firstName: 'John',
  lastName: 'Smith',
}

const fooDTO: FooDTO = {
  uuid: 1001,
  fullName: 'John Smith',
  unnecessary: {},
}

Map from DTO to OM:

const fooFromFooDTO: Foo = mapDTO<FooDTO, Foo>({ from: fooDTO }).transform(
  (fooDTO: FooDTO): Foo => {
    // map with access to source context

    const { fullName, uuid } = fooDTO
    const [firstName, lastName] = fullName.split(' ')

    return {
      id: uuid.toString(),
      firstName,
      lastName,
    }
  },
)

Map from OM to DTO:

const fooDTOfromFoo: FooDTO = mapDTO<Foo, FooDTO>({ from: foo }).transform(foo => {
  // map with access to source context

  const { firstName, id, lastName } = foo

  return {
    uuid: Number(id),
    fullName: `${firstName} ${lastName}`,
    unnecessary: {},
  }
})

Package Sidebar

Install

npm i @twistezo/ts-dto-mapper

Weekly Downloads

18

Version

1.0.16

License

MIT

Unpacked Size

9.16 kB

Total Files

9

Last publish

Collaborators

  • twistezo