UNPKG

ts-neo4j-parser

Version:

Typescript Neo4j parser to JSON

119 lines 6.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Graph = void 0; const Queue_1 = require("./Queue"); /** * Graph class * * @export * @class Graph * @template T * @template V */ class Graph { /** * Creates an instance of Graph. * @param {boolean} [allowCyclic=false] * @memberof Graph */ constructor(allowCyclic = false) { this._adjacencies = new Map(); this._allowCyclic = allowCyclic; this._nodes = []; } /** * Adds a node * * @param {Node<T, V>} node * @memberof Graph */ addNode(node) { this._adjacencies.set(node.id, []); this._nodes.push(node); } /** * Adds an edge * * @param {Node<T, V>} nodeA * @param {Node<T, V>} nodeB * @memberof Graph */ addEdge(nodeA, nodeB) { if (!this._allowCyclic && nodeA.id === nodeB.id) { throw Error('Graph cannot be cyclical'); } const a = this._adjacencies.get(nodeA.id); const b = this._adjacencies.get(nodeB.id); if (!a || !b) { throw new Error('One or both nodes not found'); } a.push(nodeB); b.push(nodeA); } /** * Prints the graph to a string * * @return {*} {string} * @memberof Graph */ printGraph() { let str = ''; for (const [key, val] of this._adjacencies) { str += `${key} -> ${val.map((x) => x.id).join(', ')} \n`; } return str; } /** * Breath first search from the given node * * @param {Node<T, V>} startNode * @param {IProcess<T, V>} [callBack] * @return {*} {Map<T, V>} * @memberof Graph */ breadthFirstSearch(startNode, callBack) { const visitedNodes = new Map(); const q = new Queue_1.Queue(); q.enqueue(startNode); while (!q.empty) { const node = q.dequeue(); if (callBack && node) { const result = callBack.process(node); if (result) { break; } } if (node && !visitedNodes.get(node.id)) { const adja = this._adjacencies.get(node.id) || []; q.enqueue(...adja); visitedNodes.set(node.id, node.data); } } return visitedNodes; } /** * Depth first search from the given node * * @param {Node<T, V>} startNode * @return {*} {Map<T, V>} * @memberof Graph */ depthFirstSearch(startNode) { const visitedNodes = new Map(); this.dfsUtil(startNode, visitedNodes); return visitedNodes; } // Recursive function which process and explore // all the adjacent vertex of the vertex with which it is called dfsUtil(vert, visitedNodes) { visitedNodes.set(vert.id, vert.data); const neighbours = this._adjacencies.get(vert.id) || []; for (const neighbour of neighbours) { if (!visitedNodes.get(neighbour.id)) { this.dfsUtil(neighbour, visitedNodes); } } } } exports.Graph = Graph; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS9HcmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBZ0M7QUFJaEM7Ozs7Ozs7R0FPRztBQUNILE1BQWEsS0FBSztJQU1oQjs7OztPQUlHO0lBQ0gsWUFBWSxjQUF1QixLQUFLO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTyxDQUFDLElBQWdCO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE9BQU8sQ0FBQyxLQUFpQixFQUFFLEtBQWlCO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxNQUFNLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQs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