import type { ReactElementFiber } from '../element/types'; import { appContainerMap } from '../global'; import { parseUIData, UIDataFrame, UIPage } from './uidata'; function findApp(node: ReactElementFiber): ReactElementFiber | undefined { if (!node) { return undefined; } if (node.memoizedProps.rootTag) { return node; } return findApp(node.child); } export default function parsePage(rootTag: number, info: any): Promise { const appContainer = appContainerMap.get(rootTag); if (!appContainer) { return Promise.reject('AppContainer should not be null'); } const node = appContainer._reactInternals; if (!node) { return Promise.reject('AppContainer fiber node should not be null'); } let app = findApp(node.child); if (!app) { app = node; } const windowFrame: UIDataFrame = { x: info.x || 0, y: info.y || 0, width: info.width || 0, height: info.height || 0, }; return parseUIData(app, windowFrame).then(); }