type NodeLike = { id: string | number; nodes?: NodeLike[]; [key: string]: any; }; /** Create a hierarchical tree from a flat array. */ export function toHierarchy< T extends NodeLike, K extends keyof Omit, >( flatArray: T[] | readonly T[], /** * Function that returns the parent ID for a given node. * @example * toHierarchy(flatArray, (node) => node.parentId); */ getParentId: (node: T) => T[K] | null, ): (T & { nodes?: (T & { nodes?: T[] })[] })[]; export default toHierarchy;