8000 GitHub - digitregroup/object-mapper: Animorph your JS objects
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
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

About

Animorph your JS objects

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

0