@basd/nested
Version:
Allows you to create deeply nested object structures, while also enabling you to traverse them efficiently.
132 lines (88 loc) • 3.33 kB
Markdown
# Nested
[](https://www.npmjs.com/package/@basd/nested)
[](https://gitlab.com/frenware/utils/nested/-/pipelines)
[](https://gitlab.com/frenware/utils/nested/-/blob/master/LICENSE)
[](https://www.npmjs.com/package/@basd/nested)
[](https://gitlab.com/frenware/utils/nested)
[](https://github.com/basedwon/@basd/nested)
[](https://twitter.com/basdwon)
[](https://discordapp.com/users/basedwon)
Provides nesting capabilities to classes allowing you to create deeply nested object structures, while also enabling you to traverse them efficiently.
## Features
- Simple API for creating nested object hierarchies.
- Built-in `.root` property for accessing the root of the hierarchy.
- `.sub()` method for creating sub-nodes.
## Installation
```bash
npm install @basd/nested
```
## Usage
Import the `Nested` class mixin from the package:
```js
import Nested from '@basd/nested'
```
or
```js
const Nested = require('@basd/nested')
```
Create a nested instance
```js
const nested = new Nested()
```
Extend your own class with the `Nested` mixin:
```js
class MyClass extends Nested {
// Your implementation here
}
const root = new MyClass()
```
### Create a Nested Object
```js
const nodeA = root.sub('nodeA')
const nodeB = nodeA.sub('nodeB')
```
### Access Parent and Root Nodes
```js
console.log(nodeB.parent === nodeA) // true
console.log(nodeB.root === root) // true
```
### Dynamic Options
You can use a function as options to `sub()`:
```js
const dynamicNode = root.sub('dynamic', (node, part) => ({
someOption: `${node.someOption}/${part}`
}))
```
## Documentation
- [API Reference](/docs/api.md)
### `Nested.mixin(childClass)`
Mix the `Nested` functionality into a `childClass`.
### `root()`
Returns the root node of the current hierarchy.
### `sub(path, opts, ...args)`
Creates a sub-node at the specified `path`. You can optionally pass a custom `opts` object or a function for dynamic configuration.
## Tests
In order to run the test suite, simply clone the repository and install its dependencies:
```bash
git clone https://gitlab.com/frenware/utils/nested.git
cd nested
npm install
```
To run the tests:
```bash
npm test
```
## Contributing
Thank you! Please see our [contributing guidelines](/docs/contributing.md) for details.
## Donations
If you find this project useful and want to help support further development, please send us some coin. We greatly appreciate any and all contributions. Thank you!
**Bitcoin (BTC):**
```
1JUb1yNFH6wjGekRUW6Dfgyg4J4h6wKKdF
```
**Monero (XMR):**
```
46uV2fMZT3EWkBrGUgszJCcbqFqEvqrB4bZBJwsbx7yA8e2WBakXzJSUK8aqT4GoqERzbg4oKT2SiPeCgjzVH6VpSQ5y7KQ
```
## License
Nested is [MIT licensed](https://gitlab.com/frenware/utils/nested/-/blob/master/LICENSE).