UNPKG

@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
# Nested [![npm](https://img.shields.io/npm/v/@basd/nested?style=flat&logo=npm)](https://www.npmjs.com/package/@basd/nested) [![pipeline](https://gitlab.com/frenware/utils/nested/badges/master/pipeline.svg)](https://gitlab.com/frenware/utils/nested/-/pipelines) [![license](https://img.shields.io/npm/l/@basd/nested)](https://gitlab.com/frenware/utils/nested/-/blob/master/LICENSE) [![downloads](https://img.shields.io/npm/dw/@basd/nested)](https://www.npmjs.com/package/@basd/nested) [![Gitlab](https://img.shields.io/badge/Gitlab%20-%20?logo=gitlab&color=%23383a40)](https://gitlab.com/frenware/utils/nested) [![Github](https://img.shields.io/badge/Github%20-%20?logo=github&color=%23383a40)](https://github.com/basedwon/@basd/nested) [![Twitter](https://img.shields.io/badge/@basdwon%20-%20?logo=twitter&color=%23383a40)](https://twitter.com/basdwon) [![Discord](https://img.shields.io/badge/Basedwon%20-%20?logo=discord&color=%23383a40)](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).