Tree Utilities
A set of utility functions frequently used while working with tree-like structures
API
Tree Generator
Thare are 2 tree generation utility functions here:
generateTree
- Helper function. Provided with options, it returns flat array of tree items. Works on top of the generator.treeGenerator
- Generator function. Provided with options, allows to generate random tree, yielding each tree item.
Usage Example:
itemCreator
- Both generateTree
and treeGenerator
rely on creator function used to generate particular tree item.
import { defaultItemCreatorFactory, TreeItemMeta } from '@fsdk/tree-utils';
import { nanoid } from 'nanoid'
type FlatTreeItem = {
id: string;
parentId?: string;
name: string;
depth: number;
}
const flatItemCreator = (parent: FlatTreeItem | undefined, meta: TreeItemMeta) => ({
id: nanoid(),
parentId: parent?.id,
name: `Item ${id}`,
depth: meta.level,
});
type NestedTreeItem = {
id: string;
children: NestedTreeItem[];
}
const nestedItemCreator = (parent: NestedTreeItem | undefined, meta: TreeItemMeta) => {
const item: NestedTreeItem = {
id: nanoid(),
children: [],
};
parent?.children.push(item);
return item;
};
const itemCreator = defaultItemCreatorFactory();
generateTree
:
import { generateTree } from '@fsdk/tree-utils';
const treeItems = generateTree({
itemCreator,
maxDepth: 5,
minSiblings: 2,
maxSiblings: 15,
maxItems: 1000,
});
const [root] = generateTree({
itemCreator: nestedItemCreator,
});
treeGenerator
:
import { treeGenerator } from '@fsdk/tree-utils';
const generator = treeGenerator({
itemCreator,
maxDepth: 10,
minSiblings: 3,
maxSiblings: 7,
});
const treeItem = generator.next().value;