https://github.com/sospedra/tsil
Flatten and deflatten objects. Work with lists 📝
https://github.com/sospedra/tsil
easy-to-use flat flatten list object optimization transform
Last synced: 6 days ago
JSON representation
Flatten and deflatten objects. Work with lists 📝
- Host: GitHub
- URL: https://github.com/sospedra/tsil
- Owner: sospedra
- License: mit
- Created: 2017-08-12T15:03:13.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-09-02T19:34:10.000Z (almost 9 years ago)
- Last Synced: 2026-07-13T02:53:36.254Z (6 days ago)
- Topics: easy-to-use, flat, flatten, list, object, optimization, transform
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/tsil
- Size: 60.5 KB
- Stars: 14
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/sospedra/tsil)
[](https://coveralls.io/github/sospedra/tsil?branch=master)
[](https://david-dm.org/sospedra/tsil)
[](https://standardjs.com)
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:
```js
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:
```js
const flat = tsil.flatten(characters)
// [
// { byHouse: ... },
// { name: ... },
// ...
// ]
```
Then we modify whatever we need without worrying about structures:
```js
const withChanges = tsil.modify(flat, (node) => {
return !node.name ? node : Object.assign(node, {
isBastard: node.name === 'Jon'
})
})
```
(Or a simplified version)
```js
const withChanges = tsil.merge(flat, (value) => {
return !value.name ? {} : { isBastard: node.name === 'Jon' }
})
```
And finally we deflatten the resulting list
```js
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.
