Skip to content
Flatten and deflatten objects. Work with lists πŸ“
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
test
.gitignore
.npmignore
.travis.yml
LICENSE
README.md
package-lock.json
package.json

README.md

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.

You can’t perform that action at this time.