import TreeModel, { type Model } from 'tree-model'; import { NodeRenderView } from './NodeRenderView.js'; import { RenderTree } from './RenderTree.js'; export type TreeNode = TreeModel.Node; export type SearchPredicate = (node: TreeNode) => boolean; export interface NodeData { id: string; raw: { [prop: string]: any; }; children: TreeNode[]; atomic: boolean; nestedNodes?: TreeNode[]; subtreeId?: number; renderView?: NodeRenderView | null; instanced?: boolean; color?: number; } export declare class WorldTree { private renderTreeInstances; private nodeMaps; private readonly supressWarnings; static readonly ROOT_ID = "ROOT"; private subtreeId; constructor(); /** The root render tree will always be non-null because it will always contain the root */ getRenderTree(): RenderTree; getRenderTree(subtreeId: string): RenderTree | null; private tree; _root: TreeNode; get root(): TreeNode; private get nextSubtreeId(); get nodeCount(): number; isRoot(node: TreeNode): boolean; isSubtreeRoot(node: TreeNode): boolean; parse(model: Model): TreeNode; addSubtree(node: TreeNode): void; addNode(node: TreeNode, parent: TreeNode | null): void; removeNode(node: TreeNode, removeChildren: boolean): void; hasNodeId(id: string, subtreeId?: number): boolean; hasInstanceId(id: string, subtreeId?: number): boolean; hasId(id: string, subtreeId?: number): boolean; findAll(predicate: SearchPredicate, node?: TreeNode): Array; findId(id: string, subtreeId?: number): TreeNode[] | null; /** TODO: Would rather not have this */ findSubtree(id: string): TreeNode | null; getAncestors(node: TreeNode): Array; getInstances(subtreeId: string): { [id: string]: Record; }; getDuplicates(subtreeId: string): { [id: string]: Record; }; /** TO DO: We might want to add boolean as return type here too */ walk(predicate: SearchPredicate, node?: TreeNode): void; walkAsync(predicate: SearchPredicate, node?: TreeNode): Promise; purge(subtreeId?: string): void; }