const nodes = [
{ id: 1, parentId: null, name: 'A', sort: 2 },
{ id: 2, parentId: 1, name: 'A-1', sort: 1 },
{ id: 3, parentId: 1, name: 'A-2', sort: 2 },
]
const tree = buildTree({ list: nodes, sort: 'sort', levelKey: 'level', emptyChildren: 'array' })
const next = traverseTree({ tree, callback: (node, level) => { node.tag = `L${level}` }, levelKey: 'level', order: 'pre' })
const found = findNode({ tree, predicate: (n) => n.id === 3 })
const path = getNodePath({ tree, findKey: 'id', findValue: 3 })
const childrenOfA = getDescendants({ tree, findKey: 'id', findValue: 1, isSelf: true })
const depth = getTreeDepth({ tree })
buildTree({ list: nodes, emptyChildren: 'array' })
buildTree({ list: nodes, emptyChildren: 'null' })
buildTree({ list: nodes, emptyChildren: 'omit' })