@rasgo/text-tree
Version:
Parsing trees from text files
79 lines • 2.99 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNode = function (data, parent, config) {
var getId = config.getId, transformId = config.transformId;
var treeNode = {
data: data,
id: transformId(getId(data)),
parentId: parent ? parent.id : null,
children: []
};
if (parent)
parent.children = __spreadArrays(parent.children, [treeNode]);
return treeNode;
};
exports.nodePath = function (node, tree) {
var subTree = [];
var parentNodeId = node.parentId;
while (parentNodeId) {
var parentNode = exports.findNode(parentNodeId, tree);
if (!parentNode)
throw Error("can't find parentNode of " + node.id);
subTree.unshift(parentNode);
parentNodeId = parentNode.parentId;
}
return subTree;
};
exports.flattenNode = function (node, tree, config) {
var flatIdSeparator = config.flatIdSeparator, transformId = config.transformId;
var children = node.children, parentId = node.parentId, flatNode = __rest(node, ["children", "parentId"]);
delete node.data;
var subTree = exports.nodePath(node, tree);
var ids = subTree.length > 0 ? [subTree[subTree.length - 1].id, node.id] : [node.id];
var materializedId = transformId(ids.join(flatIdSeparator));
node.id = materializedId;
flatNode.id = materializedId;
return flatNode;
};
exports.forEachNode = function (nodes, fn) {
if (!nodes)
return;
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
var node = nodes_1[_i];
fn(node);
if (node.children)
exports.forEachNode(node.children, fn);
}
};
exports.findNode = function (id, tree) {
for (var _i = 0, tree_1 = tree; _i < tree_1.length; _i++) {
var node = tree_1[_i];
if (node.id === id)
return node;
if (node.children) {
var found = exports.findNode(id, node.children);
if (found)
return found;
}
}
return null;
};
//# sourceMappingURL=tree.js.map