UNPKG

vite-uni-dev-tool

Version:

vite-uni-dev-tool, debug, uni-app, 一处编写,到处调试

76 lines (67 loc) 2.46 kB
/** * 将树结构扁平化并添加层级及闭合层级信息(包含闭合节点) * 这个函数会为每个节点添加开始和结束标记,形成类似括号匹配的结构 * @param tree - 生成的树结构 * @param level - 当前层级,默认为0 * @param parentUid - 父节点UID,默认为undefined * @returns 扁平化的节点数组(包含闭合节点) */ export function flattenTreeWithEndMarkers( tree: InstanceTree.TreeNode | null, level: number = 0, parentUid?: number, ): InstanceTree.FlattenedNodeWithEnd[] { if (!tree) { return []; } let result: InstanceTree.FlattenedNodeWithEnd[] = []; // 创建当前节点的开始标记 const startNode: InstanceTree.FlattenedNodeWithEnd = { type: tree.type, level: level, ...(tree.uid !== undefined && { uid: tree.uid }), ...(tree.content !== undefined && { content: '' }), ...(parentUid !== undefined && { parentUid: parentUid }), isStartNode: true, // 标记为开始节点 }; let hasStart = false; if (startNode.type || startNode.content) { hasStart = true; result.push(startNode); } // 如果当前节点有 content,将其作为单独的层级处理 if ( tree.content !== undefined && tree.content !== null && tree.content !== '' ) { const contentNode: InstanceTree.FlattenedNodeWithEnd = { type: '', // 内容节点类型为 level: level + (hasStart ? 1 : 0), // content 作为子层级 content: tree.content, parentUid: tree.uid, // 父节点UID isContentNode: true, // 标记为内容节点 }; result.push(contentNode); } // 如果当前节点有子节点,则递归处理子节点 if (tree.children && tree.children.length > 0) { for (const child of tree.children) { const childNodes = flattenTreeWithEndMarkers(child, level + 1, tree.uid); result = result.concat(childNodes); } } // 添加当前节点的结束标记(闭合节点) const endNode: InstanceTree.FlattenedNodeWithEnd = { type: tree.type, level: level, ...(tree.uid !== undefined && { uid: tree.uid }), ...(tree.content !== undefined && { content: '' }), ...(parentUid !== undefined && { parentUid: parentUid }), isEndNode: true, // 标记为结束节点 }; if (endNode.type || endNode.content) { result.push(endNode); } return result; }