{"version":3,"sources":["../src/tree/forEachTreeByDfs.ts"],"names":["forEachTreeByDfs","treeData","callback","options","startId","childrenKey","idKey","path","maxLevel","assignObject","DefaultTreeOptions","generatePath","buildPathGenerator","isStart","stack","levels","paths","parents","indexs","node","level","parent","index","i","child","ABORT"],"mappings":";;;;AAeQ,SAASA,CAAAA,CAAmEC,EAAyBC,CAA2CC,CAAAA,CAAAA,CAA8B,CAClL,GAAI,CAAE,OAAAC,CAAAA,CAAAA,CAAS,WAAAC,CAAAA,CAAAA,CAAa,MAAAC,CAAM,CAAA,IAAA,CAAAC,EAAK,KAAMC,CAAAA,CAAS,EAAIC,CAAa,CAAA,CACnE,OAAS,CAAA,IAAA,CACT,KAAQ,CAAA,CACZ,EAAGC,GAAoBP,CAAAA,CAAO,EAExBQ,CAAeC,CAAAA,GAAAA,CAAmBL,EAAKD,CAAK,CAAA,CAI9CO,GAAUT,CAAAA,CAAAA,EAAW,IAAO,CAAA,IAAA,CAAQ,OAAQH,CAAa,EAAA,QAAA,CAAW,MAAQA,CAAAA,CAAAA,CAAkBK,CAAK,CAAC,IAAM,MAAOF,CAAAA,CAAO,CAAI,CAAA,KAAA,CAC1HU,CAAS,CAAA,KAAA,CAAM,QAAQb,CAAQ,CAAA,CAAI,CAAC,CAAC,EAAA,CAAG,WAAW,QAASA,CAAAA,CAAQ,CAAC,CAAA,CAAI,CAACA,CAAQ,EAClFc,CAAmB,CAAA,EACnBC,CAAAA,CAAAA,CAAc,EAAC,CACfC,EAAiB,EAAC,CAClBC,CAAgB,CAAA,EAEtB,CAAA,KAAOJ,EAAM,MAAS,CAAA,CAAA,EAAG,CACrB,IAAMK,CAAAA,CAAOL,EAAM,GAAI,EAAA,CACnBM,CAAQ,CAAA,CAAA,CAAGb,CAAM,CAAA,GAAIc,CAAQC,CAAAA,CAAAA,CAAQ,CAQzC,CAAA,GANGH,CAAK,CAAA,EAAA,GAAO,aACXC,CAAQL,CAAAA,CAAAA,CAAO,GAAI,EAAA,EAAK,CACxBR,CAAAA,CAAAA,CAAOS,EAAM,GAAI,EAAA,EAAK,CAACL,CAAaQ,CAAAA,CAAI,CAAC,CACzCE,CAAAA,CAAAA,CAASJ,CAAQ,CAAA,GAAA,EACjBK,CAAAA,CAAAA,CAAQJ,EAAO,GAAI,EAAA,EAAK,CAExBC,CAAAA,CAAAA,CAAAA,CAAKd,CAAW,CAAA,GAAMG,GAAU,CAAKA,EAAAA,CAAAA,CAAU,CAAKY,EAAAA,CAAAA,CAAMZ,CAC1D,CAAA,CAAA,IAAA,IAASe,EAAIJ,CAAKd,CAAAA,CAAW,EAAE,MAAS,CAAA,CAAA,CAAGkB,GAAK,CAAGA,CAAAA,CAAAA,EAAAA,CAAK,CACpD,IAAMC,CAAQL,CAAAA,CAAAA,CAAKd,CAAW,CAAEkB,CAAAA,CAAC,CACjCT,CAAAA,CAAAA,CAAM,IAAKU,CAAAA,CAAK,EAChBT,CAAO,CAAA,IAAA,CAAKK,CAAQ,CAAA,CAAC,CACrBJ,CAAAA,CAAAA,CAAM,KAAK,CAAC,GAAGT,EAAKI,CAAaa,CAAAA,CAAK,CAAC,CAAC,CAAA,CACxCP,CAAQ,CAAA,IAAA,CAAKE,CAAI,CAAA,CACjBD,EAAO,IAAKK,CAAAA,CAAC,EACjB,CAMJ,GAJIV,GAAAA,GAAY,OAAST,CAAW,EAAA,IAAA,GAChCS,GAAU,CAAA,MAAA,CAAOM,CAAKb,CAAAA,CAAK,CAAC,CAAM,GAAA,MAAA,CAAOF,CAAO,CAGhDS,CAAAA,CAAAA,GAAAA,EAAWM,EAAK,EAAO,GAAA,UAAA,EAEnBjB,CAAS,CAAA,CACT,IAAAiB,CAAAA,CAAAA,CACA,MAAAC,CACA,CAAA,MAAA,CAAAC,CACA,CAAA,IAAA,CAAAd,CACA,CAAA,KAAA,CAAAe,CACJ,CAAC,CAAA,GAAMG,GACH,CAAA,KAIZ,CACJ","file":"chunk-W7MLSQBL.mjs","sourcesContent":["import { ABORT } from \"../object/forEachObject\"\nimport { DefaultTreeOptions } from \"./consts\"\nimport type { TreeNode, TreeNodeBase } from \"./types\"\nimport { assignObject } from \"../object/assignObject\";\nimport type { ForEachTreeOptions, IForEachTreeCallback } from \"./forEachTree\";\nimport { buildPathGenerator } from \"./utils\";\n \n\n/**\n * 深度优先的树遍历\n * @param treeData \n * @param callback \n * @param options \n * @returns \n */\n export function forEachTreeByDfs<Node extends TreeNodeBase = TreeNode,Path=string>(treeData: Node[] | Node, callback: IForEachTreeCallback<Node,Path>, options?: ForEachTreeOptions) {\n    let { startId, childrenKey, idKey,path,level:maxLevel } = assignObject({\n        startId: null,\n        level : 0\n    }, DefaultTreeOptions, options) as Required<ForEachTreeOptions>\n    \n    const generatePath = buildPathGenerator(path,idKey)\n\n\n    // 当指定startId时用来标识是否开始调用callback\n    let isStart = startId == null ? true : (typeof (treeData) == 'object' ? String((treeData as Node)[idKey]) === String(startId) : false)\n    const stack = (Array.isArray(treeData) ? [{id:\"__ROOT__\",children:treeData}] : [treeData] ) as Node[]\n    const levels: number[] = [];\n    const paths:any[] = []\n    const parents:Node[] = []\n    const indexs:number[]=[]\n\n    while (stack.length > 0) {\n        const node = stack.pop() as Node;\n        let level = 0, path =[], parent, index = 0\n\n        if(node.id !== \"__ROOT__\"){\n            level = levels.pop() || 1; \n            path = paths.pop() || [generatePath(node)]      \n            parent = parents.pop()  \n            index = indexs.pop() || 0\n        }\n        if (node[childrenKey] && (maxLevel==0 || maxLevel >0 && level<maxLevel)) {  // 处理子节点\n            for (let i = node[childrenKey].length - 1; i >= 0; i--) {\n                const child = node[childrenKey][i]\n                stack.push(child);\n                levels.push(level + 1);\n                paths.push([...path,generatePath(child)])\n                parents.push(node)\n                indexs.push(i)\n            }\n        }\n        if (isStart === false && startId != null) {\n            isStart = String(node[idKey]) === String(startId)\n        }\n        // skip参数决定是否执行跳过节点而不执行callback\n        if (isStart && node.id !== \"__ROOT__\") {\n            //如果在Callback中返回false则\n            if (callback({ \n                node, \n                level, \n                parent,\n                path, \n                index\n            }) === ABORT) {\n                break\n            }\n        }\n        \n    }\n} "]}