-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.ts
59 lines (51 loc) · 1.88 KB
/
main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { findServices, getReferences, getServiceNameFromFile } from "./files";
import { createGraph } from "./graph";
import { Renderer } from "./renderer";
const fs = require("fs");
const path = require("path");
export function analyze(serviceDirectories: string[], renderGraph: Renderer) {
serviceDirectories = serviceDirectories.map((serviceDirectory) => {
return serviceDirectory.endsWith("/")
? serviceDirectory
: serviceDirectory + "/";
});
const serviceMap: { [key: string]: string[] } = {};
const serviceFiles = serviceDirectories
.map((serviceDirectory) => findServices(serviceDirectory))
.flat();
serviceFiles.forEach((serviceFile) => {
let serviceName = getServiceNameFromFile(serviceFile);
if (!!serviceMap[serviceName]) {
console.error(`Duplicate service name ${serviceName} found: ${serviceFile}`);
serviceName = `${path
.dirname(serviceFile)
.split("/")
.pop()}-${serviceName}`;
console.log(serviceFiles);
process.exit(1);
}
serviceName = serviceName.replace(/-/g, "_");
serviceMap[serviceName] = [
getReferences(serviceName, serviceFile, /([a-zA-Z]+Repository)/g),
getReferences(serviceName, serviceFile, /([a-zA-Z]+Service)/g),
getReferences(serviceName, serviceFile, /([a-zA-Z]+Facade)/g),
].flatMap((x) => x);
});
console.log("serviceMap");
console.log(serviceMap);
const repositoryMap: { [key: string]: string[] } = {};
for (const [key, value] of Object.entries(serviceMap)) {
value
.filter((e) => e.indexOf("Repository") > -1)
.forEach((element) => {
if (!repositoryMap[element]) {
repositoryMap[element] = [];
}
repositoryMap[element].push(key);
});
}
console.log("repositoryMap");
console.log(repositoryMap);
const graph = createGraph(serviceMap, repositoryMap);
renderGraph(graph);
}