'use strict'; const jsonMerger = require("json-merger"); //https://github.com/boschni/json-merger // @ts-ignore import Converter from './utils/Converter'; const Graph = require("./utils/graph-data-structure"); const _ = require('underscore'); export default class MongoDBSchemaGraph { //Get the array of same table names (edges) from two nodes getEdges = (node1, node2) => { let edgeNames = node1.filter(function (val) { return node2.indexOf(val) != -1; }); return edgeNames; } //Get unique edges names from the multiple arrays of edges //Purpose: so one edge as the key can have nested target and source getUniqueEdgeNames = (edgesAndNodesCombined: Array) => { let edgeNames = []; for(let i=0; i { let edgesAndNodes = []; let edgesAndNodesCombined = []; let edgeNames = []; let colNamesTableX = []; let colNamesTableY = []; let tableNames = []; let dbNames = Object.keys(dbTableWithColObject); //console.log(dbNames); for (let dbName of dbNames) { tableNames = Object.keys(dbTableWithColObject[dbName]); for (let i = 0; i < tableNames.length; i++) { for (let j = 0; j < (tableNames.length); j++) { if (i == j) continue; else { colNamesTableX = Object.keys(dbTableWithColObject[dbName][tableNames[i]]); colNamesTableX = _.without(colNamesTableX, '_id', '__v'); colNamesTableY = Object.keys(dbTableWithColObject[dbName][tableNames[j]]); colNamesTableY = _.without(colNamesTableY, '_id', '__v'); edgeNames = this.getEdges(colNamesTableX, colNamesTableY); if (Array.isArray(edgeNames) && edgeNames.length) { edgesAndNodes.push(edgeNames); edgesAndNodes.push(tableNames[i]); edgesAndNodes.push(tableNames[j]); edgesAndNodesCombined.push(edgesAndNodes); edgesAndNodes = []; //console.log(edgeNames + "\t" + tableNames[i] + "\t" + tableNames[j] ); } } } } } return edgesAndNodesCombined; } //Get edges with source node and target node in Json getEdgesGraph = (uniqueEdgeNames:Array, edgesAndNodesCombined: Array) => { let serializedLinks; let edgesJson = {edges: {}}; let sourceNode; let targetNode; let edgeName; let graph = new Graph(); for (let i=0; i