-
Notifications
You must be signed in to change notification settings - Fork 21
/
dependencyTree.js
116 lines (101 loc) · 2.75 KB
/
dependencyTree.js
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
"use strict";
function initializeScript()
{
return [new host.apiVersionSupport(1, 7)];
}
function __getModByName(modName)
{
modName = modName.toLowerCase();
var matches = host.currentProcess.Modules.Where(function (x) { return x.Name.toLowerCase() == modName; });
if (matches.Count() == 0)
{
matches = host.currentProcess.Modules.Where(function (x) { return x.Name.toLowerCase().includes(modName); });
}
if (matches.Count() == 0)
{
return undefined;
}
return matches.First();
}
class dependencyWalker
{
constructor(modName)
{
this.__modName = modName;
}
*[Symbol.iterator]()
{
var rootMod = __getModByName(this.__modName);
if (rootMod === undefined)
{
return;
}
for (var mod of rootMod.Contents.Imports)
{
yield new dependencyWalker(mod.ModuleName);
}
}
toString()
{
return this.__modName;
}
}
class reverseDependencyWalker
{
constructor(modName)
{
this.__modName = modName;
}
getModByName(modName)
{
modName = modName.toLowerCase();
var matches = host.currentProcess.Modules.Where(function (x) { return x.Name.toLowerCase() == modName; });
if (matches.Count() == 0)
{
matches = host.currentProcess.Modules.Where(function (x) { return x.Name.toLowerCase().includes(modName); });
}
if (matches.Count() == 0)
{
return undefined;
}
return matches.First();
}
*[Symbol.iterator]()
{
var rootMod = this.getModByName(this.__modName);
if (rootMod === undefined)
{
return;
}
var cleanModName = rootMod.Name;
if (cleanModName.includes("\\"))
{
cleanModName = cleanModName.substring(cleanModName.lastIndexOf("\\") + 1);
}
cleanModName = cleanModName.toLowerCase();
var matches = host.currentProcess.Modules.Where(function (x)
{
return x.Contents.Imports.Any(function (y)
{
//host.diagnostics.debugLog(y.ModuleName.toLowerCase() + "<>" + cleanModName + "\r\n");
return y.ModuleName == cleanModName;
});
});
for (var mod of matches)
{
yield new reverseDependencyWalker(mod.Name);
}
}
toString()
{
return this.__modName;
}
}
function dependencyTree(modName)
{
return new dependencyWalker(modName);
}
function inverseDependencyTree(modName)
{
return new reverseDependencyWalker(modName);
}