Skip to content

digitregroup/object-mapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

object-mapper

Makes object-to-object transformation easy.

stars forks

Quick example

const sourceObject = {
  fabfour: { user_count: 4 },
  user: [
    {
      first:       'John',
      last:        'Lennon',
      instruments: [
        { name: 'Guitar', colour: 'Red' },
        { name: 'Bass guitar', colour: 'Blue' }
      ]
    },
    {
      first:   'Paul',
      last:    'McCartney',
      picture: ['picture0.jpg', 'picture1.png', 'picture2.gif' ]
    },
    { first: 'George', last: 'Harrison' },
    { first: 'Ringo', last: 'Starr' }
  ]
};

const mapping = {
  'ringo.last_name':        'user[first=Ringo].last',
  'paul.pictures':          'user.1.picture[]',
  'john.bass.colour':       'user.0.instruments.1.colour',
  'amount_of_band_members': 'fabfour.user_count',
};

const result = ObjectMapper.mapItem(sourceObject, mapping);

//{
//  "ringo": {
//    "last_name": "Starr"
//  },
//  "paul": {
//    "pictures": [
//      "picture0.jpg",
//      "picture1.png",
//      "picture2.gif"
//    ]
//  },
//  "john": {
//    "bass": {
//      "colour": "Blue"
//    }
//  },
//  "amount_of_band_members": 4
//}

Features

Dot notation matching

ObjectMapper.mapItem (
  {parent: {child: {value: 'bar'}}},
  {result: 'parent.child.value'}
);

// {"result":"bar"}

Query matching

ObjectMapper.mapItem (
  {
    children: [
      {name: 'foo', value: 'bar'},
      {name: 'baz', value: 'biz'}
    ]
  },
  {result: 'children[name=baz].value'}
);

// {"result":"biz"}

Data transformation

ObjectMapper.mapItem (
  {
    user: {
      name:      'lennon',
      firstname: 'john'
    }
  },
  {
    'result': [
      'user.name',
      name => name.toUpperCase(),
      uppername => uppername.split('')
    ]
  }
);

// {"result":["L","E","N","N","O","N"]}

Dot notation object conversion

ObjectMapper.mapItem (
  {foo: 'bar'},
  {'target.name.can.be.anything.0': 'foo'}
);

// {"target":{"name":{"can":{"be":{"anything":["bar"]}}}}}

Install

npm install --save @digitregroup/object-mapper

Dependencies

Package Version Dev
flat ^4.1.0
chai ^4.2.0
cross-env ^5.2.0
laravel-mix ^4.0.14
mocha ^6.0.2
nyc ^13.3.0
vue-template-compiler ^2.6.7

Contributing

Contributions welcome; Please submit all pull requests against the develop branch. If your pull request contains JavaScript patches or features, you should include relevant unit tests. Thanks!

Author

DigitRE Group

License