Skip to content

sospedra/tsil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

23 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

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.

Releases

No releases published

Packages

No packages published