npm

dtox

0.4.0 • Public • Published

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

Package Sidebar

Install

npm i dtox

Weekly Downloads

8

Version

0.4.0

License

MIT

Last publish

Collaborators

  • mweibel
  • pstadler