UNPKG

es-grid-template

Version:

es-grid-template

53 lines (52 loc) 1.49 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = makeRecursiveMapper; var _isLeafNode = _interopRequireDefault(require("./isLeafNode")); function makeRecursiveMapper(fn) { return tree => { return dfs(tree, 0, []).result; function dfs(nodes, parentStartIndex, path) { let flatCount = 0; const result = []; for (const node of nodes) { path.push(node); const startIndex = parentStartIndex + flatCount; let subResult; if ((0, _isLeafNode.default)(node)) { subResult = fn(node, { startIndex, endIndex: startIndex + 1, path: path.slice(), isLeaf: true }); flatCount += 1; } else { const dfsResult = dfs(node.children, startIndex, path); subResult = fn({ ...node, children: dfsResult.result }, { startIndex, endIndex: startIndex + dfsResult.flatCount, path: path.slice(), isLeaf: false }); flatCount += dfsResult.flatCount; } if (Array.isArray(subResult)) { result.push(...subResult); } else if (subResult != null) { result.push(subResult); } path.pop(); } return { result, flatCount }; } }; }