dtox

Lightweight, extensible data transfer object library

Usage no npm install needed!

<script type="module">
  import dtox from 'https://cdn.skypack.dev/dtox';
</script>

README

dtox Build Status Build Status

Lightweight, extensible data transfer object (DTO) library for Node.js and browser environments.

Install

$ npm install dtox --save

Usage

const { BaseDTO, BaseListDTO, fields } = require('dtox')

// Define user mapping
const USER_MAPPING = {
  id:          fields.number(),
  name:        fields.string(),
  validated:   fields.boolean({ default: false }),
  roles:       fields.list({ default: [], key: 'groups' }),
  hasRoles:    fields.generic({ callback: (data) => {
    return data.groups.length > 0;
  }}),
  dateCreated: fields.date()
};

// Define a DTO which represents a single user
class UserDTO extends BaseDTO {
  constructor(data) {
    super(data, USER_MAPPING);
  }
}

const user = new UserDTO({
  id: 123,
  name: 'john_doe',
  validated: true,
  groups: ['administrator'],
  dateCreated: '1997-07-16T19:20:30Z'
});

console.log('Hello ' + user.name); // "Hello john_doe"
console.log('User ' + user.hasRoles ? 'has roles' : 'has no roles'); // "User has roles"

// Define a DTO which represents a list of users
class UserListDTO extends BaseListDTO {
  constructor(data) {
    super(data, UserDTO);
  }
}

const users = new UserListDTO([
  {
    id: 123,
    name: 'john_doe',
    groups: ['owner'],
    validated: true,
    dateCreated: '1997-07-16T19:20:30Z'
  },
  {
    id: 124,
    name: 'jane_doe',
    groups: ['administrator'],
    validated: false,
    dateCreated: '2015-12-15T07:36:25Z'
  }
]);

const userNames = users.map((user) => {
  return user.name;
});

console.log(userNames.join(', ')); // "john_doe, jane_doe"

// or also possible:
for (const userName of users) {
  console.log(userName);
}

console.log(JSON.stringify(users)); // will print the items in JSON form