tsil
v3.0.0
Published
Flatten and deflatten objects. Work with lists 📝
Downloads
3
Maintainers
Readme
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.