{"version":3,"sources":["../src/tree/forEachTreeByBfs.ts"],"names":["forEachTreeByBfs","treeData","callback","options","startId","childrenKey","idKey","path","maxLevel","assignObject","DefaultTreeOptions","generatePath","buildPathGenerator","isStart","queue","levels","paths","parents","indexs","node","level","parent","index","i","child","ABORT"],"mappings":";;;;AAeO,SAASA,CAAAA,CAAuDC,EAAyBC,CAAsCC,CAAAA,CAAAA,CAA8B,CAChK,GAAI,CAAE,OAAAC,CAAAA,CAAAA,CAAS,WAAAC,CAAAA,CAAAA,CAAa,MAAAC,CAAO,CAAA,IAAA,CAAAC,EAAK,KAAMC,CAAAA,CAAS,EAAIC,CAAa,CAAA,CACpE,OAAS,CAAA,IAAA,CACT,KAAM,CAAA,CACV,EAAGC,GAAoBP,CAAAA,CAAO,EACxBQ,CAAeC,CAAAA,GAAAA,CAAmBL,EAAKD,CAAK,CAAA,CAG9CO,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,CAE1HU,CAAS,CAAA,KAAA,CAAM,QAAQb,CAAQ,CAAA,CAAI,CAAC,CAAC,EAAA,CAAG,WAAW,QAASA,CAAAA,CAAQ,CAAC,CAAA,CAAI,CAACA,CAAQ,EAElFc,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,KAAM,EAAA,CAErBM,CAAQ,CAAA,CAAA,CAAGb,CAAM,CAAA,GAAIc,CAAQC,CAAAA,CAAAA,CAAQ,CASzC,CAAA,GAPGH,CAAK,CAAA,EAAA,GAAO,aACXC,CAAQL,CAAAA,CAAAA,CAAO,KAAM,EAAA,EAAK,CAC1BR,CAAAA,CAAAA,CAAOS,EAAM,KAAM,EAAA,EAAK,CAACL,CAAaQ,CAAAA,CAAI,CAAC,CAC3CE,CAAAA,CAAAA,CAASJ,CAAQ,CAAA,KAAA,EACjBK,CAAAA,CAAAA,CAAQJ,EAAO,KAAM,EAAA,EAAK,GAG1BC,CAAKd,CAAAA,CAAW,IAAOG,CAAU,EAAA,CAAA,EAAKA,CAAU,CAAA,CAAA,EAAKY,CAAMZ,CAAAA,CAAAA,CAAAA,CAC3D,QAASe,CAAE,CAAA,CAAA,CAAEA,EAAEJ,CAAKd,CAAAA,CAAW,EAAE,MAAOkB,CAAAA,CAAAA,EAAAA,CAAK,CACzC,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,KAGZ,CACJ","file":"chunk-LQPPOU5O.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 */\nexport function forEachTreeByBfs<Node extends TreeNodeBase = TreeNode>(treeData: Node[] | Node, callback: IForEachTreeCallback<Node>, options?: ForEachTreeOptions) {\n    let { startId, childrenKey, idKey, path,level:maxLevel } = assignObject({\n        startId: null,\n        level:0\n    }, DefaultTreeOptions, options) as Required<ForEachTreeOptions>\n    const generatePath = buildPathGenerator(path,idKey)\n\n    // 当指定startId时用来标识是否开始调用callback\n    let isStart = startId == null ? true : (typeof (treeData) == 'object' ? String((treeData as Node)[idKey]) === String(startId) : false)\n\n    const queue = (Array.isArray(treeData) ? [{id:\"__ROOT__\",children:treeData}] : [treeData] ) as Node[]\n\n    const levels: number[] = [];\n    const paths:any[] = []\n    const parents:Node[] = []\n    const indexs:number[]=[]\n\n    while (queue.length > 0) {\n        const node = queue.shift() as Node;\n        \n        let level = 0, path =[], parent, index = 0\n        \n        if(node.id !== \"__ROOT__\"){\n            level = levels.shift() || 1     \n            path = paths.shift() || [generatePath(node)]         \n            parent = parents.shift()  \n            index = indexs.shift() || 0\n        }\n\n        if (node[childrenKey]  && (maxLevel==0 || maxLevel >0 && level<maxLevel)) {\n            for (let i=0;i<node[childrenKey].length;i++) {\n                const child = node[childrenKey][i]\n                queue.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\n "]}