{"version":3,"sources":["../src/tree/fromPidTree.ts"],"names":["fromPidTree","pidNodes","options","opts","DefaultTreeOptions","idKey","childrenKey","mapper","treeObj","getNode","node","toNode","omit","children","pNode","subnode"],"mappings":";;;;AAwBQ,SAASA,CAAAA,CAKXC,EAAoBC,CAAwE,CAAA,CAC9F,IAAMC,CAAO,CAAA,MAAA,CAAO,MAAO,CAAA,EAAIC,CAAAA,CAAAA,CAAoBF,GAAW,EAAE,EAC1D,CAAE,KAAA,CAAAG,EAAO,WAAAC,CAAAA,CAAAA,CAAY,MAAAC,CAAAA,CAAO,CAAIJ,CAAAA,CAAAA,CAClCK,EAAmB,EAAC,CAExB,SAASC,CAAQC,CAAAA,CAAAA,CAAqB,CAClC,IAAIC,CAAAA,CACD,OAAOJ,CAAAA,EAAS,UACfI,EAAAA,CAAAA,CAASJ,EAAOG,CAAI,CAAA,CACnBC,CAAeN,CAAAA,CAAK,CAAIK,CAAAA,CAAAA,CAAKL,CAAK,CAEnCM,EAAAA,CAAAA,CAAS,CACL,GAAGC,GAAKF,CAAAA,CAAAA,CAAK,KAAK,CAClB,CAAA,CAACL,CAAK,EAAGK,CAAAA,CAAKL,CAAK,CACvB,CAAA,CAEJ,IAAIQ,CAAAA,CAAWZ,CAAS,CAAA,MAAA,CAAOa,GAASA,CAAM,CAAA,GAAA,EAAKJ,CAAKL,CAAAA,CAAK,CAAC,CAAA,CAC9D,OAAGQ,CAAS,CAAA,MAAA,CAAO,CACdF,GAAAA,CAAAA,CAAeL,CAAW,CAAA,CAAIO,EAAS,GAAIE,CAAAA,CAAAA,EAASN,EAAQM,CAAO,CAAC,GAElEJ,CACX,CACA,IAAQG,IAAAA,CAAAA,IAASb,CAAS,CAAA,MAAA,CAAOS,GAAMA,CAAK,CAAA,GAAA,EAAK,IAAI,CAAA,CACjDF,CAAQ,CAAA,IAAA,CAAKC,EAAQK,CAAK,CAAC,CAE/B,CAAA,OAAON,CACX","file":"chunk-5MQFIDLS.mjs","sourcesContent":["/**\n * \n *  toPidTree的反向操作\n * \n * 将[{id,pid,...},{id,pid,...},...,{id,pid,...}]形式的树转换为的{id:any,children:[{},{},...,{}]}树结构\n * \n * \n */\n\nimport { DefaultTreeOptions } from \"./consts\";\nimport { TreeNode, TreeNodeBase, TreeNodeOptions } from \"./types\";\nimport { PidTreeNode } from \"./toPidTree\";\nimport { omit } from \"../object/omit\"\n\n export interface FromPidTreeOptions<\n    FromNode extends TreeNodeBase = TreeNode,\n    ToNode extends TreeNodeBase = FromNode,\n    IdKey extends string = 'id',\n    ChildrenKey extends string = 'children'\n> extends TreeNodeOptions{ \n     mapper?:(node:FromNode) => ToNode\n }\n  \n\n export function fromPidTree<\n    FromNode extends PidTreeNode = PidTreeNode,\n    ToNode extends TreeNodeBase = TreeNode<Omit<FromNode,'pid'>>,\n    IdKey extends string = 'id',\n    ChildrenKey extends string = 'children'\n    >(pidNodes:FromNode[],options?:FromPidTreeOptions<FromNode,ToNode,IdKey,ChildrenKey>):ToNode[]{\n    const opts = Object.assign({}, DefaultTreeOptions ,options || {}) as Required<FromPidTreeOptions<FromNode,ToNode,IdKey,ChildrenKey>>     \n    const { idKey, childrenKey,mapper } = opts\n    let treeObj:ToNode[] = [];\n\n    function getNode(node:FromNode):ToNode{\n        let toNode:ToNode \n        if(typeof(mapper)=='function'){\n            toNode = mapper(node);\n            (toNode as any)[idKey] = node[idKey]\n        }else{\n            toNode = {            \n                ...omit(node,'pid'),\n                [idKey]: node[idKey],\n            } as ToNode\n        }        \n        let children = pidNodes.filter(pNode => pNode.pid==node[idKey])\n        if(children.length>0){\n            (toNode as any)[childrenKey] = children.map(subnode=>getNode(subnode))\n        }        \n        return toNode        \n    }\n    for(let pNode of pidNodes.filter(node=>node.pid==null)){\n        treeObj.push(getNode(pNode));\n    }\n    return treeObj\n}\n\n"]}