import { APIClient } from "../ApiClient"; export type SpaceHierarchy = Map; export class MatrixApiSpace { /** * Request Matrix space hierarchy */ static async Hierarchy(): Promise { const hierarchy = new Map( Object.entries( ( await APIClient.exec({ method: "GET", uri: "/matrix/space/hierarchy", }) ).data as { [s: string]: string[] } ) ) as SpaceHierarchy; // Simplify hierarchy while (true) { let changed = false; for (const [roomid, children] of hierarchy) { for (const child of children) { if (!hierarchy.has(child)) continue; hierarchy.set(roomid, [ ...hierarchy.get(roomid)!, ...hierarchy.get(child)!, ]); hierarchy.delete(child); changed = true; } } if (!changed) break; } return hierarchy; } }