tsil

3.0.0 • Public • Published

Build Status Coverage Status dependencies Status JavaScript Style Guide

Tsil can flatten any object into a flat tsil list. Allowing you to easily and efficiently modify your data. And then deflatten the list into the original structure.

Example

Starting with the following object:

const characters = {
  byHouse: {
    stark: [
      {
        name: 'Jon',
        age: 23
      },
      {
        name: 'Arya',
        age: 12
      }
    ],
    martell: [
      {
        name: 'Oberyn',
        age: 33
      }
    ]
  }
}

We can deep flatten all the nodes into:

const flat = tsil.flatten(characters)
 
// [
//  { byHouse: ... },
//  { name: ... },
//  ...
// ]

Then we modify whatever we need without worrying about structures:

const withChanges = tsil.modify(flat, (node) => {
  return !node.name ? node : Object.assign(node, {
    isBastard: node.name === 'Jon'
  })
})

(Or a simplified version)

const withChanges = tsil.merge(flat, (value) => {
  return !value.name ? {} : { isBastard: node.name === 'Jon' }
})

And finally we deflatten the resulting list

tsil.deflatten(withChanges)
 
// evaluates to
{
  byHouse: {
    stark: [
      {
        name: 'Jon',
        age: 22,
        isBastard: true
      },
      {
        name: 'Arya',
        age: 17,
        isBastard: false
      }
    ],
    martell: [
      {
        name: 'Oberyn',
        age: 37,
        isBastard: false
      }
    ]
  }
}

API

tsil.flatten(String)

Given any object returns a flatten list of nodes.

tsil.deflatten(TsilArray)

Given a tsil list of nodes returns the original structure.

tsil.modify(TsilArray, Function)

Given a tsil list of nodes iterate over all the nodes and apply the provided callback.

tsil.merge(TsilArray, Function)

Given a tsil list of nodes iterate over all the nodes and apply the provided callback merging callback function return with the node value.

tsil.VAL (Advanced)

Constant containing the Tsil value key. Use it if you need to implement a .modify function of your own.

Package Sidebar

Install

npm i tsil

Weekly Downloads

0

Version

3.0.0

License

MIT

Last publish

Collaborators

  • sospedra