GitHunt
SO

Flatten and deflatten objects. Work with lists ๐Ÿ“

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.

Languages

JavaScript100.0%

Contributors

MIT License
Created August 12, 2017
Updated November 9, 2023