{"version":3,"sources":["../src/tree/getTreeNodeRelation.ts"],"names":["TreeNodeRelation","getTreeNodeRelation","treeObj","nodeId","refNodeId","options","relation","opts","DefaultTreeOptions","idKey","nodes","forEachTreeByDfs","curNode","level","parent","path","fullpath","getFullPath","id","parentId","basePath","ABORT"],"mappings":";;;;AAiBYA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GACRA,IAAA,IAAO,CAAA,CAAA,CAAA,CAAP,OACAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAQ,GAAR,OACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,OAAS,CAAT,CAAA,CAAA,QAAA,CACAA,IAAA,WAAc,CAAA,CAAA,CAAA,CAAd,cACAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAY,GAAZ,WACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,QAAU,CAAV,CAAA,CAAA,SAAA,CACAA,IAAA,OAAU,CAAA,CAAA,CAAA,CAAV,UAPQA,CAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAUL,SAASC,CAAsFC,CAAAA,CAAAA,CAAsBC,EAAmBC,CAAsBC,CAAAA,CAAAA,CAAqD,CACtN,IAAIC,CAAAA,CAAe,EAEbC,GAAM,CAAA,MAAA,CAAO,OAAO,EAAC,CAAGC,EAAoBH,CAAW,EAAA,EAAE,CACzD,CAAA,CAAE,MAAAI,CAAM,CAAA,CAAIF,IAClB,GAAGJ,CAAAA,EAAUC,EAAW,OAAO,CAAA,CAE/B,IAAIM,CAAsB,CAAA,GAE1B,OAAAC,GAAAA,CAAuBT,EAAQ,CAAC,CAAC,KAAKU,CAAQ,CAAA,KAAA,CAAAC,EAAM,MAAAC,CAAAA,CAAAA,CAAO,KAAAC,CAAI,CAAA,GAAI,CAC/D,IAAMC,CAAAA,CAAWC,EAAYF,CAAKN,CAAAA,CAAK,EACvC,GAAGC,CAAAA,CAAM,QAAQ,CACb,CAAA,CAAA,GAAGE,EAAQH,CAAK,CAAA,EAAGN,EAAQ,CACvBO,CAAAA,CAAQ,CAAC,CAACP,CAAAA,CAAOU,EAAMC,CAAUA,EAAAA,CAAAA,CAAOL,CAAK,CAAEO,CAAAA,CAAQ,EAAEZ,CAAS,CAAA,CAClE,MACJ,CAASQ,KAAAA,GAAAA,CAAAA,CAAQH,CAAK,CAAGL,EAAAA,CAAAA,CAAU,CAC/BM,CAAQ,CAAA,CAAC,CAACN,CAAUS,CAAAA,CAAAA,CAAMC,GAAUA,CAAOL,CAAAA,CAAK,EAAEO,CAAQ,CAAA,CAAEb,CAAM,CAClE,CAAA,MACJ,EAEJ,GAAGO,CAAAA,CAAM,QAAQ,CACdE,EAAAA,CAAAA,CAAQH,CAAK,CAAGC,EAAAA,CAAAA,CAAM,CAAC,CAAE,CAAA,CACxB,GAAM,CAACQ,CAAAA,CAAGL,EAAMM,CAASC,CAAAA,CAAQ,EAAIV,CAAM,CAAA,CAAC,EAC5C,OAAGI,CAAAA,EAAQ,IAAMK,CACbb,CAAAA,CAAAA,CAAW,EACNQ,CAAQ,EAAA,EAAA,EAAMI,EACnBZ,CAAW,CAAA,CAAA,CACNU,EAAS,UAAWI,CAAAA,CAAQ,IACjCd,CAAW,CAAA,CAAA,CAAA,CAERe,GACX,CACJ,CAAA,CAAEd,GAAI,CAEHG,CAAAA,CAAAA,CAAM,CAAC,CAAE,CAAA,CAAC,GAAKP,CACXG,GAAAA,CAAAA,EAAY,IAA8BA,CAAW,CAAA,CAAA,CAAA,CACrDA,GAAY,CAAwBA,GAAAA,CAAAA,CAAW,IAE/CA,CACX","file":"chunk-A32MHDT5.mjs","sourcesContent":["/**\n * \n *  获取节点之间的关系\n * \n */\n\nimport { DefaultTreeOptions } from \"./consts\";\nimport { TreeNode, TreeNodeBase, TreeNodeOptions } from \"./types\";\nimport { ABORT } from '../object/forEachObject';\nimport { forEachTreeByDfs } from \"./forEachTreeByDfs\";\nimport { getFullPath } from \"./utils\";\n\n \nexport interface GetTreeNodeRelationOptions extends TreeNodeOptions{\n    \n}\n\nexport enum TreeNodeRelation{\n    Same = 0,                               // 相同节点\n    Child = 1,                              // 子节点\n    Parent = 2,                             // 父节点     \n    Descendants = 3,                        // 后代    \n    Ancestors = 4,                          // 祖先\n    Sibling = 5,                            // 兄弟节点    \n    Unknown = 9                             // 未知\n}\n\nexport function getTreeNodeRelation<Node extends TreeNodeBase = TreeNode,IdKey extends string = 'id'>(treeObj:Node | Node[],nodeId:Node[IdKey],refNodeId:Node[IdKey],options?:GetTreeNodeRelationOptions):TreeNodeRelation{\n    let relation:any = 9;\n\n    const opts= Object.assign({}, DefaultTreeOptions ,options || {}) as Required<GetTreeNodeRelationOptions>     \n    const { idKey } = opts\n    if(nodeId == refNodeId) return TreeNodeRelation.Same     \n\n    let nodes: string | any[]=[] \n    \n    forEachTreeByDfs<Node>(treeObj,({node:curNode,level,parent,path})=>{\n        const fullpath = getFullPath(path,idKey)\n        if(nodes.length==0){\n            if(curNode[idKey]==nodeId) {\n                nodes = [[nodeId,level,parent && parent[idKey],fullpath],refNodeId]\n                return\n            }else if(curNode[idKey]==refNodeId){\n                nodes = [[refNodeId,level,parent && parent[idKey],fullpath],nodeId]\n                return\n            } \n        }\n        if(nodes.length==0) return \n        if(curNode[idKey]==nodes[1]){\n            const [id,level,parentId,basePath] = nodes[0]\n            if(parent?.id == parentId){\n                relation = TreeNodeRelation.Sibling\n            }else if(parent?.id == id ){\n                relation = TreeNodeRelation.Child\n            }else if(fullpath.startsWith(basePath)){\n                relation = TreeNodeRelation.Descendants\n            }\n            return ABORT \n        }\n    },opts)  \n\n    if(nodes[0][0] == nodeId){\n        if(relation == TreeNodeRelation.Descendants) relation = TreeNodeRelation.Ancestors \n        if(relation == TreeNodeRelation.Child) relation = TreeNodeRelation.Parent\n    }\n    return relation as TreeNodeRelation\n}\n"]}