const jsonQuery = require('json-query'); //https://github.com/auditassistant/json-query const merge = require('merge-deep'); //https://github.com/jonschlinkert/merge-deep export default class Converter { //This function is similar to getEdgeGraph //Purpose: convert the edge graph (v1) to Ed's specification (v2) //V1 with edgeName as the key, V2 with the source node as key convertToEdEdgesGraph = (uniqueEdgeNames: Array, edgesJson) => { let source; let uniqueSources = []; let edges = {}; let combinedEdges = {}; let edgeJson = {edges: {}}; for (let uniqueEdgeName of uniqueEdgeNames) { let links = edgesJson['edges'][uniqueEdgeName]; //console.log(links); for (let link of links) { source = link['source']; //console.log(source); if (!uniqueSources.includes(source)) uniqueSources.push(source); } } //console.log("uniqueSources: " + uniqueSources); for (let uniqueEdgeName of uniqueEdgeNames) { let links = []; for (let uniqueSource of uniqueSources) { let result = jsonQuery(`${uniqueEdgeName}[**][*source=${uniqueSource}]`, {data: edgesJson['edges']} ) links = result.value; if (links.length > 0) { edges[uniqueSource] = links; } } //console.log(edges); //using deep merge for merging source nodes from different databases under one key combinedEdges = merge(combinedEdges, edges); edges = {}; } edgesJson.edges = combinedEdges; return edgesJson; } }