UNPKG

@npmstuff/argdown-core

Version:

A pluggable parser for the Argdown argumentation syntax

59 lines 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ClosedGroupPlugin = void 0; const ArgdownPluginError_1 = require("../ArgdownPluginError"); const model_1 = require("../model/model"); class ClosedGroupPlugin { constructor() { this.name = "ClosedGroupPlugin"; this.run = (_request, response) => { if (!response.map) { throw (0, ArgdownPluginError_1.createMissingResponseFieldError)(this, "map"); } for (let node of response.map.nodes) { closeGroupsRecursively(node, response); } }; } } exports.ClosedGroupPlugin = ClosedGroupPlugin; const closeGroupsRecursively = (currentNode, response) => { if ((0, model_1.isGroupMapNode)(currentNode)) { if (currentNode.isClosed) { closeGroup(currentNode, response); } else if (currentNode.children) { for (let child of currentNode.children) { closeGroupsRecursively(child, response); } } } }; const closeGroup = (node, response) => { const descendantsMap = node.children.reduce(reduceToDescendantsMap, {}); node.children = []; response.map.edges = response.map.edges.reduce((acc, curr) => { const fromIsDescendant = !!descendantsMap[curr.from.id]; const toIsDescendant = !!descendantsMap[curr.to.id]; if (fromIsDescendant && !toIsDescendant) { curr.from = node; acc.push(curr); } else if (toIsDescendant && !fromIsDescendant) { curr.to = node; acc.push(curr); } else if (!fromIsDescendant && !toIsDescendant) { acc.push(curr); } return acc; }, []); }; const reduceToDescendantsMap = (acc, curr) => { acc[curr.id] = curr; if ((0, model_1.isGroupMapNode)(curr) && curr.children) { curr.children.reduce(reduceToDescendantsMap, acc); } return acc; }; //# sourceMappingURL=ClosedGroupPlugin.js.map