@web-marketing-hr/azure-devops-mcp 2.3.14 → 2.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools/architecture.js +730 -0
- package/dist/tools/architecture.js.map +1 -0
- package/dist/tools.js +2 -0
- package/dist/tools.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,730 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { logger } from "../logger.js";
|
|
5
|
+
// ─── Tool names ──────────────────────────────────────────────────────────────
|
|
6
|
+
export const ARCHITECTURE_SCAN = "project_architecture_scan";
|
|
7
|
+
export const ARCHITECTURE_READ_FILE = "project_architecture_read_file";
|
|
8
|
+
// ─── Layer heuristics ─────────────────────────────────────────────────────────
|
|
9
|
+
const LAYER_PATTERNS = [
|
|
10
|
+
[/controller/i, "Prezentacijski sloj"],
|
|
11
|
+
[/usercontrol/i, "Prezentacijski sloj"],
|
|
12
|
+
[/pagepart/i, "Prezentacijski sloj"],
|
|
13
|
+
[/usercontrol/i, "Prezentacijski sloj"],
|
|
14
|
+
[/handler/i, "Integracijski sloj"],
|
|
15
|
+
[/api/i, "Integracijski sloj"],
|
|
16
|
+
[/apiextend/i, "Integracijski sloj"],
|
|
17
|
+
[/cubisadapt/i, "Integracijski sloj"],
|
|
18
|
+
[/wienerclient/i, "Integracijski sloj"],
|
|
19
|
+
[/wingclient/i, "Integracijski sloj"],
|
|
20
|
+
[/service/i, "Poslovni sloj"],
|
|
21
|
+
[/engine/i, "Poslovni sloj"],
|
|
22
|
+
[/manager/i, "Poslovni sloj"],
|
|
23
|
+
[/worker/i, "Poslovni sloj"],
|
|
24
|
+
[/scraper/i, "Poslovni sloj"],
|
|
25
|
+
[/ticketing/i, "Poslovni sloj"],
|
|
26
|
+
[/chatbot/i, "Poslovni sloj"],
|
|
27
|
+
[/repository/i, "Sloj podataka"],
|
|
28
|
+
[/data/i, "Sloj podataka"],
|
|
29
|
+
[/context/i, "Sloj podataka"],
|
|
30
|
+
[/migration/i, "Sloj podataka"],
|
|
31
|
+
[/cache/i, "Sloj podataka"],
|
|
32
|
+
[/model/i, "Modeli i entiteti"],
|
|
33
|
+
[/entity/i, "Modeli i entiteti"],
|
|
34
|
+
[/dto/i, "Modeli i entiteti"],
|
|
35
|
+
[/domain/i, "Modeli i entiteti"],
|
|
36
|
+
[/intranet/i, "Modeli i entiteti"],
|
|
37
|
+
[/test/i, "Testovi"],
|
|
38
|
+
[/spec/i, "Testovi"],
|
|
39
|
+
[/uitest/i, "UI Testovi"],
|
|
40
|
+
[/unittest/i, "Unit Testovi"],
|
|
41
|
+
[/util/i, "Pomoćni alati"],
|
|
42
|
+
[/helper/i, "Pomoćni alati"],
|
|
43
|
+
[/extension/i, "Pomoćni alati"],
|
|
44
|
+
[/extender/i, "Pomoćni alati"],
|
|
45
|
+
[/config/i, "Konfiguracija"],
|
|
46
|
+
[/setting/i, "Konfiguracija"],
|
|
47
|
+
[/shared/i, "Dijeljene komponente"],
|
|
48
|
+
[/common/i, "Dijeljene komponente"],
|
|
49
|
+
[/infrastructure/i, "Infrastruktura"],
|
|
50
|
+
[/sso/i, "Infrastruktura"],
|
|
51
|
+
[/auth/i, "Infrastruktura"],
|
|
52
|
+
];
|
|
53
|
+
function inferLayer(name) {
|
|
54
|
+
for (const [pattern, layer] of LAYER_PATTERNS) {
|
|
55
|
+
if (pattern.test(name))
|
|
56
|
+
return layer;
|
|
57
|
+
}
|
|
58
|
+
return "Nesvrstano";
|
|
59
|
+
}
|
|
60
|
+
// ─── Skip logic ───────────────────────────────────────────────────────────────
|
|
61
|
+
// Directories to always skip regardless of depth
|
|
62
|
+
const ALWAYS_SKIP = new Set([
|
|
63
|
+
".git",
|
|
64
|
+
".vs",
|
|
65
|
+
".github",
|
|
66
|
+
"node_modules",
|
|
67
|
+
"TestResults",
|
|
68
|
+
"EasyEditCmsSync", // tool project inside EasyEdit
|
|
69
|
+
]);
|
|
70
|
+
// Directories to skip only at shallow depth (root or one level deep)
|
|
71
|
+
const SHALLOW_SKIP = new Set(["bin", "obj", "packages"]);
|
|
72
|
+
function shouldSkipDir(name, depth) {
|
|
73
|
+
if (name.startsWith("."))
|
|
74
|
+
return true;
|
|
75
|
+
if (ALWAYS_SKIP.has(name))
|
|
76
|
+
return true;
|
|
77
|
+
// bin/obj/packages at depth 0 (root) and depth 1 (e.g. Common/bin)
|
|
78
|
+
// but NOT at depth 2+ (e.g. UiTest/bin/Debug has useful chromedriver info)
|
|
79
|
+
if (SHALLOW_SKIP.has(name) && depth <= 1)
|
|
80
|
+
return true;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
// ─── Filesystem walker ────────────────────────────────────────────────────────
|
|
84
|
+
function walkDirectory(dirPath, rootPath, depth, maxDepth) {
|
|
85
|
+
const name = path.basename(dirPath);
|
|
86
|
+
const node = {
|
|
87
|
+
name,
|
|
88
|
+
relativePath: path.relative(rootPath, dirPath) || ".",
|
|
89
|
+
inferredLayer: inferLayer(name),
|
|
90
|
+
fileCount: 0,
|
|
91
|
+
filesByExtension: {},
|
|
92
|
+
children: [],
|
|
93
|
+
};
|
|
94
|
+
let entries;
|
|
95
|
+
try {
|
|
96
|
+
entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return node;
|
|
100
|
+
}
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
if (entry.name.startsWith("."))
|
|
103
|
+
continue;
|
|
104
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
105
|
+
if (entry.isDirectory()) {
|
|
106
|
+
if (shouldSkipDir(entry.name, depth))
|
|
107
|
+
continue;
|
|
108
|
+
if (depth < maxDepth) {
|
|
109
|
+
const child = walkDirectory(fullPath, rootPath, depth + 1, maxDepth);
|
|
110
|
+
node.fileCount += child.fileCount;
|
|
111
|
+
for (const [ext, count] of Object.entries(child.filesByExtension)) {
|
|
112
|
+
node.filesByExtension[ext] = (node.filesByExtension[ext] ?? 0) + count;
|
|
113
|
+
}
|
|
114
|
+
node.children.push(child);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const ext = path.extname(entry.name) || "(bez ekstenzije)";
|
|
119
|
+
node.filesByExtension[ext] = (node.filesByExtension[ext] ?? 0) + 1;
|
|
120
|
+
node.fileCount++;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return node;
|
|
124
|
+
}
|
|
125
|
+
// ─── File finder ──────────────────────────────────────────────────────────────
|
|
126
|
+
function findFiles(dir, predicate, skipDirFn, depth = 0) {
|
|
127
|
+
const results = [];
|
|
128
|
+
let entries;
|
|
129
|
+
try {
|
|
130
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return results;
|
|
134
|
+
}
|
|
135
|
+
for (const entry of entries) {
|
|
136
|
+
if (entry.name.startsWith("."))
|
|
137
|
+
continue;
|
|
138
|
+
const fullPath = path.join(dir, entry.name);
|
|
139
|
+
if (entry.isDirectory()) {
|
|
140
|
+
const skip = skipDirFn ? skipDirFn(entry.name, depth) : shouldSkipDir(entry.name, depth);
|
|
141
|
+
if (!skip) {
|
|
142
|
+
results.push(...findFiles(fullPath, predicate, skipDirFn, depth + 1));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (predicate(entry.name)) {
|
|
146
|
+
results.push(fullPath);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return results;
|
|
150
|
+
}
|
|
151
|
+
// ─── Project type detector ────────────────────────────────────────────────────
|
|
152
|
+
function detectProjectType(rootPath) {
|
|
153
|
+
const hasSrc = fs.existsSync(path.join(rootPath, "src"));
|
|
154
|
+
const hasServices = fs.existsSync(path.join(rootPath, "src", "Services.Interfaces"));
|
|
155
|
+
if (hasSrc && hasServices)
|
|
156
|
+
return "WEM EasyEditCms Framework";
|
|
157
|
+
const hasEasyEdit = fs.existsSync(path.join(rootPath, "EasyEdit"));
|
|
158
|
+
const hasUserControls = fs.existsSync(path.join(rootPath, "UserControls"));
|
|
159
|
+
if (hasEasyEdit && hasUserControls)
|
|
160
|
+
return "WEM EasyEditCms Site";
|
|
161
|
+
return "Unknown";
|
|
162
|
+
}
|
|
163
|
+
// ─── Key files map ────────────────────────────────────────────────────────────
|
|
164
|
+
function buildKeyFiles(rootPath) {
|
|
165
|
+
const candidates = {
|
|
166
|
+
"Global.asax startup": "Global.asax.cs",
|
|
167
|
+
"DI registracija servisa": "ServicesRegistration.cs",
|
|
168
|
+
"Web konfiguracija": "Web.config",
|
|
169
|
+
"NuGet paketi (root)": "packages.config",
|
|
170
|
+
"NuGet paketi (Common)": path.join("Common", "packages.config"),
|
|
171
|
+
"Common csproj": (() => {
|
|
172
|
+
try {
|
|
173
|
+
const found = fs.readdirSync(path.join(rootPath, "Common")).find((f) => f.endsWith(".csproj"));
|
|
174
|
+
return found ? `Common${path.sep}${found}` : "";
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return "";
|
|
178
|
+
}
|
|
179
|
+
})(),
|
|
180
|
+
};
|
|
181
|
+
const result = {};
|
|
182
|
+
for (const [label, rel] of Object.entries(candidates)) {
|
|
183
|
+
if (rel && fs.existsSync(path.join(rootPath, rel))) {
|
|
184
|
+
result[label] = rel;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// UiTest XML docs
|
|
188
|
+
const uiTestXml = findFiles(rootPath, (n) => n === "WEM.EasyEditCms.Common.UiTest.xml", (name, depth) => shouldSkipDir(name, depth));
|
|
189
|
+
if (uiTestXml.length > 0) {
|
|
190
|
+
result["UiTest BaseUiTest XML dokumentacija"] = path.relative(rootPath, uiTestXml[0]);
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
// ─── .csproj parser ───────────────────────────────────────────────────────────
|
|
195
|
+
function parseCsproj(filePath, rootPath) {
|
|
196
|
+
let content = "";
|
|
197
|
+
try {
|
|
198
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
199
|
+
}
|
|
200
|
+
catch { }
|
|
201
|
+
const projectRefs = [...content.matchAll(/<ProjectReference\s+Include="([^"]+)"/g)].map((m) => path.basename(m[1], ".csproj"));
|
|
202
|
+
const packageRefs = [...content.matchAll(/<PackageReference\s+Include="([^"]+)"[^>]*(?:Version="([^"]*)")?/g)].map((m) => ({ name: m[1], version: m[2] ?? "" }));
|
|
203
|
+
return {
|
|
204
|
+
name: path.basename(filePath, ".csproj"),
|
|
205
|
+
relativePath: path.relative(rootPath, filePath),
|
|
206
|
+
targetFramework: content.match(/<TargetFramework[^>]*>([^<]+)<\/TargetFramework>/)?.[1] ?? null,
|
|
207
|
+
outputType: content.match(/<OutputType[^>]*>([^<]+)<\/OutputType>/)?.[1] ?? null,
|
|
208
|
+
projectReferences: projectRefs,
|
|
209
|
+
packageReferences: packageRefs,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// ─── packages.config parser ───────────────────────────────────────────────────
|
|
213
|
+
function parseAllPackagesConfigs(rootPath) {
|
|
214
|
+
const locations = [
|
|
215
|
+
{ file: path.join(rootPath, "packages.config"), source: "root" },
|
|
216
|
+
{ file: path.join(rootPath, "Common", "packages.config"), source: "Common" },
|
|
217
|
+
{ file: path.join(rootPath, "UnitTest", "packages.config"), source: "UnitTest" },
|
|
218
|
+
];
|
|
219
|
+
const packages = [];
|
|
220
|
+
for (const { file, source } of locations) {
|
|
221
|
+
try {
|
|
222
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
223
|
+
for (const m of content.matchAll(/<package\s+id="([^"]+)"\s+version="([^"]+)"/g)) {
|
|
224
|
+
packages.push({ id: m[1], version: m[2], source });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch { }
|
|
228
|
+
}
|
|
229
|
+
return packages;
|
|
230
|
+
}
|
|
231
|
+
// ─── WEM framework dependency detector ───────────────────────────────────────
|
|
232
|
+
function detectWemFrameworkDeps(rootPath) {
|
|
233
|
+
const sources = [
|
|
234
|
+
{ dir: path.join(rootPath, "bin"), source: "root-bin" },
|
|
235
|
+
{ dir: path.join(rootPath, "Common", "bin"), source: "common-bin" },
|
|
236
|
+
{ dir: path.join(rootPath, "EasyEdit", "bin"), source: "easiedit-bin" },
|
|
237
|
+
];
|
|
238
|
+
const deps = [];
|
|
239
|
+
for (const { dir, source } of sources) {
|
|
240
|
+
try {
|
|
241
|
+
const dlls = fs.readdirSync(dir).filter((f) => f.endsWith(".dll") && f.startsWith("WEM."));
|
|
242
|
+
for (const dll of dlls) {
|
|
243
|
+
deps.push({ dllName: dll.replace(".dll", ""), source });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch { }
|
|
247
|
+
}
|
|
248
|
+
return deps;
|
|
249
|
+
}
|
|
250
|
+
// ─── .cs parser ───────────────────────────────────────────────────────────────
|
|
251
|
+
function parseParameters(raw) {
|
|
252
|
+
if (!raw.trim())
|
|
253
|
+
return [];
|
|
254
|
+
return raw
|
|
255
|
+
.split(",")
|
|
256
|
+
.map((p) => {
|
|
257
|
+
const clean = p.trim().replace(/\s*=\s*[^,]+$/, ""); // strip default values
|
|
258
|
+
const parts = clean.trim().split(/\s+/);
|
|
259
|
+
const name = parts[parts.length - 1]?.replace(/^[@]/, "") ?? "";
|
|
260
|
+
const type = parts.slice(0, -1).join(" ") || "unknown";
|
|
261
|
+
return { name, type };
|
|
262
|
+
})
|
|
263
|
+
.filter((p) => p.name && !["", ")", "("].includes(p.name));
|
|
264
|
+
}
|
|
265
|
+
function parseCsFile(filePath, rootPath) {
|
|
266
|
+
let content = "";
|
|
267
|
+
try {
|
|
268
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
// Strip comments
|
|
274
|
+
const stripped = content.replace(/\/\/[^\n]*/g, " ").replace(/\/\*[\s\S]*?\*\//g, " ");
|
|
275
|
+
// Namespace
|
|
276
|
+
const namespace = stripped.match(/namespace\s+([\w.]+)/)?.[1] ?? "(nepoznat)";
|
|
277
|
+
// Type declaration
|
|
278
|
+
const kindMatch = stripped.match(/\b(public|internal|private|protected)?\s*((?:abstract|sealed|static|partial)\s+)*(class|interface|enum|record|struct)\s+(\w+)/);
|
|
279
|
+
if (!kindMatch)
|
|
280
|
+
return null;
|
|
281
|
+
const accessModifier = kindMatch[1] ?? "internal";
|
|
282
|
+
const modifiers = (kindMatch[2] ?? "").toLowerCase();
|
|
283
|
+
const kind = kindMatch[3];
|
|
284
|
+
const name = kindMatch[4];
|
|
285
|
+
// Base types
|
|
286
|
+
const declLine = stripped.match(new RegExp(`(?:${kind})\\s+${name}\\s*(?:<[^>]*>)?\\s*([^{]*)`))?.[1] ?? "";
|
|
287
|
+
const colonPart = declLine.match(/:\s*([^{where]+)/)?.[1] ?? "";
|
|
288
|
+
const allBaseTypes = colonPart
|
|
289
|
+
.split(",")
|
|
290
|
+
.map((s) => s
|
|
291
|
+
.trim()
|
|
292
|
+
.replace(/\s*where\s.*/s, "")
|
|
293
|
+
.trim())
|
|
294
|
+
.filter(Boolean);
|
|
295
|
+
const interfaces = allBaseTypes.filter((t) => /^I[A-Z]/.test(t));
|
|
296
|
+
const baseTypes = allBaseTypes.filter((t) => !interfaces.includes(t));
|
|
297
|
+
// Class attributes (last 3 before the declaration)
|
|
298
|
+
const declIdx = stripped.indexOf(kindMatch[0]);
|
|
299
|
+
const beforeDecl = stripped.substring(Math.max(0, declIdx - 500), declIdx);
|
|
300
|
+
const classAttributes = [...beforeDecl.matchAll(/\[([^\]]+)\]/g)].slice(-3).map((m) => m[1].trim());
|
|
301
|
+
// Enum values
|
|
302
|
+
const enumValues = [];
|
|
303
|
+
if (kind === "enum") {
|
|
304
|
+
const bodyMatch = stripped.match(/enum\s+\w+[^{]*\{([^}]*)\}/s);
|
|
305
|
+
if (bodyMatch) {
|
|
306
|
+
enumValues.push(...bodyMatch[1]
|
|
307
|
+
.split(",")
|
|
308
|
+
.map((v) => v.trim().split(/[\s=]/)[0].trim())
|
|
309
|
+
.filter(Boolean));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Constructors
|
|
313
|
+
const constructors = [];
|
|
314
|
+
const ctorRegex = new RegExp(`(public|private|protected|internal)\\s+${name}\\s*\\(([^)]*)\\)\\s*(?::\\s*(base|this)\\s*\\(([^)]*)\\))?`, "g");
|
|
315
|
+
let ctorMatch;
|
|
316
|
+
while ((ctorMatch = ctorRegex.exec(stripped)) !== null) {
|
|
317
|
+
constructors.push({
|
|
318
|
+
accessModifier: ctorMatch[1],
|
|
319
|
+
parameters: parseParameters(ctorMatch[2]),
|
|
320
|
+
callsBase: ctorMatch[3] === "base",
|
|
321
|
+
baseArguments: ctorMatch[4] ?? "",
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
// Properties
|
|
325
|
+
const properties = [];
|
|
326
|
+
const propRegex = /(\[[^\]]+\]\s*)*\s*(public|private|protected|internal|protected\s+internal|private\s+protected)\s+((?:static|virtual|override|abstract|new|readonly)\s+)*([\w<>\[\]?,\s]+?)\s+(\w+)\s*\{([^}]*)\}/g;
|
|
327
|
+
let propMatch;
|
|
328
|
+
while ((propMatch = propRegex.exec(stripped)) !== null) {
|
|
329
|
+
const propName = propMatch[5];
|
|
330
|
+
if (["get", "set", "add", "remove", "value", "if", "else", "return"].includes(propName))
|
|
331
|
+
continue;
|
|
332
|
+
const body = propMatch[6];
|
|
333
|
+
const attrBlock = propMatch[1] ?? "";
|
|
334
|
+
const attrs = [...attrBlock.matchAll(/\[([^\]]+)\]/g)].map((m) => m[1].trim());
|
|
335
|
+
properties.push({
|
|
336
|
+
name: propName,
|
|
337
|
+
type: propMatch[4].trim(),
|
|
338
|
+
accessModifier: propMatch[2],
|
|
339
|
+
hasGetter: body.includes("get"),
|
|
340
|
+
hasSetter: body.includes("set"),
|
|
341
|
+
isComputed: body.includes("return") || body.includes("=>"),
|
|
342
|
+
attributes: attrs,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
// Fields
|
|
346
|
+
const fields = [];
|
|
347
|
+
const fieldRegex = /^\s*(public|private|protected|internal|protected\s+internal)\s+(static\s+|readonly\s+|const\s+|static\s+readonly\s+)*([\w<>\[\]?,\s]+?)\s+(_?\w+)\s*(?:=|;)/gm;
|
|
348
|
+
let fieldMatch;
|
|
349
|
+
while ((fieldMatch = fieldRegex.exec(stripped)) !== null) {
|
|
350
|
+
const fieldName = fieldMatch[4];
|
|
351
|
+
if (fieldName === name)
|
|
352
|
+
continue;
|
|
353
|
+
fields.push({
|
|
354
|
+
modifier: (fieldMatch[1] + " " + (fieldMatch[2] ?? "")).trim(),
|
|
355
|
+
type: fieldMatch[3].trim(),
|
|
356
|
+
name: fieldName,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
// Methods
|
|
360
|
+
const methods = [];
|
|
361
|
+
const SKIP_KEYWORDS = new Set(["get", "set", "add", "remove", name, "if", "while", "for", "foreach", "switch", "catch", "using", "return", "new"]);
|
|
362
|
+
const methodRegex = /(\[[^\]]+\]\s*)*\s*(public|private|protected|internal|protected\s+internal)\s+((?:static|virtual|override|abstract|async|sealed|new)\s+)*([\w<>\[\]?,\s]+?)\s+(\w+)\s*\(([^)]*)\)\s*(?:where[^{;]*)?\s*[{;]/g;
|
|
363
|
+
let methodMatch;
|
|
364
|
+
while ((methodMatch = methodRegex.exec(stripped)) !== null) {
|
|
365
|
+
const methodName = methodMatch[5];
|
|
366
|
+
if (SKIP_KEYWORDS.has(methodName))
|
|
367
|
+
continue;
|
|
368
|
+
const modStr = (methodMatch[3] ?? "").toLowerCase();
|
|
369
|
+
const attrBlock = methodMatch[1] ?? "";
|
|
370
|
+
const attrs = [...attrBlock.matchAll(/\[([^\]]+)\]/g)].map((m) => m[1].trim());
|
|
371
|
+
methods.push({
|
|
372
|
+
name: methodName,
|
|
373
|
+
returnType: methodMatch[4].trim(),
|
|
374
|
+
accessModifier: methodMatch[2],
|
|
375
|
+
isStatic: modStr.includes("static"),
|
|
376
|
+
isAsync: modStr.includes("async"),
|
|
377
|
+
isOverride: modStr.includes("override"),
|
|
378
|
+
parameters: parseParameters(methodMatch[6]),
|
|
379
|
+
attributes: attrs,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
return {
|
|
383
|
+
name,
|
|
384
|
+
namespace,
|
|
385
|
+
relativePath: path.relative(rootPath, filePath),
|
|
386
|
+
kind,
|
|
387
|
+
accessModifier,
|
|
388
|
+
isStatic: modifiers.includes("static"),
|
|
389
|
+
isAbstract: modifiers.includes("abstract"),
|
|
390
|
+
isSealed: modifiers.includes("sealed"),
|
|
391
|
+
isPartial: modifiers.includes("partial"),
|
|
392
|
+
baseTypes,
|
|
393
|
+
interfaces,
|
|
394
|
+
classAttributes,
|
|
395
|
+
constructors,
|
|
396
|
+
fields,
|
|
397
|
+
properties,
|
|
398
|
+
methods,
|
|
399
|
+
enumValues,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
// ─── .ashx parser ─────────────────────────────────────────────────────────────
|
|
403
|
+
function parseAshxFile(filePath, rootPath) {
|
|
404
|
+
const name = path.basename(filePath, ".ashx");
|
|
405
|
+
const codeBehindPath = filePath + ".cs";
|
|
406
|
+
let className = null;
|
|
407
|
+
const interfaces = [];
|
|
408
|
+
let hasSessionState = false;
|
|
409
|
+
try {
|
|
410
|
+
const content = fs.readFileSync(codeBehindPath, "utf-8");
|
|
411
|
+
className = content.match(/class\s+(\w+)/)?.[1] ?? null;
|
|
412
|
+
hasSessionState = content.includes("IRequiresSessionState");
|
|
413
|
+
const implMatch = content.match(/class\s+\w+\s*:\s*([^{]+)/);
|
|
414
|
+
if (implMatch) {
|
|
415
|
+
interfaces.push(...implMatch[1]
|
|
416
|
+
.split(",")
|
|
417
|
+
.map((s) => s.trim())
|
|
418
|
+
.filter(Boolean));
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
catch { }
|
|
422
|
+
return {
|
|
423
|
+
name,
|
|
424
|
+
relativePath: path.relative(rootPath, filePath),
|
|
425
|
+
className,
|
|
426
|
+
interfaces,
|
|
427
|
+
hasSessionState,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
// ─── ASPX / ASCX parsers ──────────────────────────────────────────────────────
|
|
431
|
+
function parseAspxFiles(files, rootPath) {
|
|
432
|
+
return files.map((f) => {
|
|
433
|
+
const codeBehind = f + ".cs";
|
|
434
|
+
return {
|
|
435
|
+
name: path.basename(f, ".aspx"),
|
|
436
|
+
relativePath: path.relative(rootPath, f),
|
|
437
|
+
codeBehindRelativePath: fs.existsSync(codeBehind) ? path.relative(rootPath, codeBehind) : null,
|
|
438
|
+
hasCodeBehind: fs.existsSync(codeBehind),
|
|
439
|
+
};
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
function parseAscxFiles(files, rootPath) {
|
|
443
|
+
return files.map((f) => {
|
|
444
|
+
const codeBehind = f + ".cs";
|
|
445
|
+
return {
|
|
446
|
+
name: path.basename(f, ".ascx"),
|
|
447
|
+
relativePath: path.relative(rootPath, f),
|
|
448
|
+
codeBehindRelativePath: fs.existsSync(codeBehind) ? path.relative(rootPath, codeBehind) : null,
|
|
449
|
+
};
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
// ─── Web.config parser ────────────────────────────────────────────────────────
|
|
453
|
+
function parseWebConfig(rootPath) {
|
|
454
|
+
const configPath = path.join(rootPath, "Web.config");
|
|
455
|
+
let content = "";
|
|
456
|
+
try {
|
|
457
|
+
content = fs.readFileSync(configPath, "utf-8");
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
return [];
|
|
461
|
+
}
|
|
462
|
+
const keys = [];
|
|
463
|
+
for (const m of content.matchAll(/<add\s+key="([^"]+)"\s+value="([^"]*)"/g)) {
|
|
464
|
+
keys.push({
|
|
465
|
+
key: m[1],
|
|
466
|
+
hasValue: m[2].length > 0,
|
|
467
|
+
isCrypted: m[1].toLowerCase().includes("crypt"),
|
|
468
|
+
isConnectionString: false,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
for (const m of content.matchAll(/<add\s+name="([^"]+)"\s+connectionString="([^"]*)"/g)) {
|
|
472
|
+
keys.push({
|
|
473
|
+
key: m[1],
|
|
474
|
+
hasValue: m[2].length > 0,
|
|
475
|
+
isCrypted: false,
|
|
476
|
+
isConnectionString: true,
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
return keys;
|
|
480
|
+
}
|
|
481
|
+
// ─── UiTest BaseUiTest API docs ───────────────────────────────────────────────
|
|
482
|
+
function parseUiTestApiDocs(rootPath) {
|
|
483
|
+
const candidates = findFiles(rootPath, (n) => n === "WEM.EasyEditCms.Common.UiTest.xml", (name, depth) => shouldSkipDir(name, depth));
|
|
484
|
+
const methods = [];
|
|
485
|
+
for (const xmlPath of candidates) {
|
|
486
|
+
try {
|
|
487
|
+
const content = fs.readFileSync(xmlPath, "utf-8");
|
|
488
|
+
for (const m of content.matchAll(/<member name="M:([^"]+)">/g)) {
|
|
489
|
+
methods.push(m[1]);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
catch { }
|
|
493
|
+
}
|
|
494
|
+
return methods;
|
|
495
|
+
}
|
|
496
|
+
// ─── Pattern detector ─────────────────────────────────────────────────────────
|
|
497
|
+
function detectPatterns(classes, rootPath) {
|
|
498
|
+
const patterns = [];
|
|
499
|
+
if (classes.some((c) => c.name.endsWith("Controller") || c.baseTypes.some((b) => b.includes("Controller"))))
|
|
500
|
+
patterns.push("MVC / Web Forms Controllers");
|
|
501
|
+
if (classes.some((c) => c.interfaces.some((i) => i.includes("IRequestHandler")) || c.name.endsWith("Handler")))
|
|
502
|
+
patterns.push("HTTP Handler Pattern (ASHX)");
|
|
503
|
+
if (classes.some((c) => c.name.endsWith("Repository") || c.interfaces.some((i) => i.includes("IRepository"))))
|
|
504
|
+
patterns.push("Repository Pattern");
|
|
505
|
+
if (classes.some((c) => c.name.endsWith("Service")))
|
|
506
|
+
patterns.push("Service Layer Pattern");
|
|
507
|
+
if (classes.some((c) => c.name.endsWith("Engine")))
|
|
508
|
+
patterns.push("Engine Pattern");
|
|
509
|
+
if (classes.some((c) => c.name.endsWith("Worker")))
|
|
510
|
+
patterns.push("Worker Pattern");
|
|
511
|
+
if (classes.some((c) => c.name.endsWith("Factory") || c.interfaces.some((i) => i.includes("IFactory"))))
|
|
512
|
+
patterns.push("Factory Pattern");
|
|
513
|
+
if (classes.some((c) => c.classAttributes.some((a) => a.includes("Serializable"))))
|
|
514
|
+
patterns.push("File System Serialization (Cart/Session)");
|
|
515
|
+
if (classes.some((c) => c.interfaces.some((i) => i === "IScraper") || c.name.includes("Scraper")))
|
|
516
|
+
patterns.push("Web Scraper Pattern");
|
|
517
|
+
if (classes.some((c) => c.baseTypes.some((b) => b.includes("CatalogItem")) || c.name.includes("CatalogItemCustom")))
|
|
518
|
+
patterns.push("WEM CatalogItem nasljeđivanje");
|
|
519
|
+
if (classes.some((c) => c.baseTypes.some((b) => b.includes("IntranetUser")) || c.name.includes("IntranetUserCustom")))
|
|
520
|
+
patterns.push("WEM IntranetUser nasljeđivanje");
|
|
521
|
+
if (classes.some((c) => c.baseTypes.some((b) => b.includes("ItemBase"))))
|
|
522
|
+
patterns.push("WEM ItemBase nasljeđivanje");
|
|
523
|
+
if (findFiles(rootPath, (n) => n.endsWith(".razor"), (name, depth) => shouldSkipDir(name, depth)).length > 0)
|
|
524
|
+
patterns.push("Blazor / Razor Components");
|
|
525
|
+
if (fs.existsSync(path.join(rootPath, "Dockerfile")))
|
|
526
|
+
patterns.push("Docker kontejnerizacija");
|
|
527
|
+
return patterns;
|
|
528
|
+
}
|
|
529
|
+
// ─── Main scan handler ────────────────────────────────────────────────────────
|
|
530
|
+
async function handleScan(params) {
|
|
531
|
+
const { rootPath, maxDepth = 5 } = params;
|
|
532
|
+
if (!fs.existsSync(rootPath)) {
|
|
533
|
+
return JSON.stringify({ error: `Putanja ne postoji: ${rootPath}` });
|
|
534
|
+
}
|
|
535
|
+
logger.debug("Pokretanje skeniranja arhitekture", { rootPath, maxDepth });
|
|
536
|
+
// Project type
|
|
537
|
+
const projectType = detectProjectType(rootPath);
|
|
538
|
+
// Folder tree
|
|
539
|
+
const tree = walkDirectory(rootPath, rootPath, 0, maxDepth);
|
|
540
|
+
// .csproj projects
|
|
541
|
+
const csprojFiles = findFiles(rootPath, (n) => n.endsWith(".csproj"), (name, depth) => shouldSkipDir(name, depth));
|
|
542
|
+
const projects = csprojFiles.map((f) => parseCsproj(f, rootPath));
|
|
543
|
+
// NuGet packages (from packages.config files, not NuGet folder)
|
|
544
|
+
const nugetPackages = parseAllPackagesConfigs(rootPath);
|
|
545
|
+
// WEM framework dependencies
|
|
546
|
+
const wemFrameworkDependencies = detectWemFrameworkDeps(rootPath);
|
|
547
|
+
// C# classes — skip Designer files and generated files
|
|
548
|
+
const csFiles = findFiles(rootPath, (n) => n.endsWith(".cs") && !n.endsWith(".Designer.cs") && !n.endsWith(".designer.cs"), (name, depth) => shouldSkipDir(name, depth));
|
|
549
|
+
const classes = csFiles.map((f) => parseCsFile(f, rootPath)).filter((c) => c !== null);
|
|
550
|
+
// HTTP Handlers
|
|
551
|
+
const ashxFiles = findFiles(rootPath, (n) => n.endsWith(".ashx"), (name, depth) => shouldSkipDir(name, depth));
|
|
552
|
+
const httpHandlers = ashxFiles.map((f) => parseAshxFile(f, rootPath));
|
|
553
|
+
// ASPX pages (root level + UserControls, not EasyEdit backend)
|
|
554
|
+
const aspxFiles = findFiles(rootPath, (n) => n.endsWith(".aspx"), (name, depth) => {
|
|
555
|
+
if (name === "EasyEdit" && depth === 0)
|
|
556
|
+
return true; // skip EasyEdit backend aspx
|
|
557
|
+
return shouldSkipDir(name, depth);
|
|
558
|
+
});
|
|
559
|
+
const aspxPages = parseAspxFiles(aspxFiles, rootPath);
|
|
560
|
+
// ASCX controls
|
|
561
|
+
const ascxFiles = findFiles(rootPath, (n) => n.endsWith(".ascx"), (name, depth) => {
|
|
562
|
+
if (name === "EasyEdit" && depth === 0)
|
|
563
|
+
return true;
|
|
564
|
+
return shouldSkipDir(name, depth);
|
|
565
|
+
});
|
|
566
|
+
const ascxControls = parseAscxFiles(ascxFiles, rootPath);
|
|
567
|
+
// Web.config
|
|
568
|
+
const webConfigKeys = parseWebConfig(rootPath);
|
|
569
|
+
// EasyEdit/XML definitions
|
|
570
|
+
const xmlDefPath = path.join(rootPath, "EasyEdit", "XML");
|
|
571
|
+
let xmlDefinitionFiles = [];
|
|
572
|
+
if (fs.existsSync(xmlDefPath)) {
|
|
573
|
+
try {
|
|
574
|
+
xmlDefinitionFiles = fs
|
|
575
|
+
.readdirSync(xmlDefPath)
|
|
576
|
+
.filter((f) => f.endsWith(".xml") || f.endsWith(".json"))
|
|
577
|
+
.sort();
|
|
578
|
+
}
|
|
579
|
+
catch { }
|
|
580
|
+
}
|
|
581
|
+
// UiTest BaseUiTest API docs
|
|
582
|
+
const uiTestBaseApiMethods = parseUiTestApiDocs(rootPath);
|
|
583
|
+
// Detected patterns
|
|
584
|
+
const detectedPatterns = detectPatterns(classes, rootPath);
|
|
585
|
+
// Key files
|
|
586
|
+
const keyFiles = buildKeyFiles(rootPath);
|
|
587
|
+
// Summary
|
|
588
|
+
const hasDocker = fs.existsSync(path.join(rootPath, "Dockerfile"));
|
|
589
|
+
const hasBlazor = findFiles(rootPath, (n) => n.endsWith(".razor"), (name, depth) => shouldSkipDir(name, depth)).length > 0;
|
|
590
|
+
const hasUiTests = fs.existsSync(path.join(rootPath, "UiTest"));
|
|
591
|
+
const hasUnitTests = fs.existsSync(path.join(rootPath, "UnitTest"));
|
|
592
|
+
const hasScraper = classes.some((c) => c.name.includes("Scraper") || c.interfaces.some((i) => i === "IScraper"));
|
|
593
|
+
const configFiles = ["Web.config", "Web.Debug.config", "Web.Release.config", "Web.Sandbox.config", "Web.AutomatedTesting.config", "app.config", "appsettings.json", "packages.config"].filter((f) => fs.existsSync(path.join(rootPath, f)));
|
|
594
|
+
const result = {
|
|
595
|
+
scannedAt: new Date().toISOString(),
|
|
596
|
+
rootPath,
|
|
597
|
+
repoName: path.basename(rootPath),
|
|
598
|
+
projectType,
|
|
599
|
+
summary: {
|
|
600
|
+
totalFiles: tree.fileCount,
|
|
601
|
+
csFiles: csFiles.length,
|
|
602
|
+
csprojFiles: csprojFiles.length,
|
|
603
|
+
ashxFiles: ashxFiles.length,
|
|
604
|
+
aspxFiles: aspxFiles.length,
|
|
605
|
+
ascxFiles: ascxFiles.length,
|
|
606
|
+
xmlDefinitions: xmlDefinitionFiles.length,
|
|
607
|
+
configFiles,
|
|
608
|
+
hasDocker,
|
|
609
|
+
hasBlazor,
|
|
610
|
+
hasUiTests,
|
|
611
|
+
hasUnitTests,
|
|
612
|
+
hasScraper,
|
|
613
|
+
},
|
|
614
|
+
folderTree: tree,
|
|
615
|
+
projects,
|
|
616
|
+
nugetPackages,
|
|
617
|
+
wemFrameworkDependencies,
|
|
618
|
+
classes,
|
|
619
|
+
httpHandlers,
|
|
620
|
+
aspxPages,
|
|
621
|
+
ascxControls,
|
|
622
|
+
webConfigKeys,
|
|
623
|
+
xmlDefinitionFiles,
|
|
624
|
+
uiTestBaseApiMethods,
|
|
625
|
+
detectedPatterns,
|
|
626
|
+
keyFiles,
|
|
627
|
+
};
|
|
628
|
+
logger.debug("Skeniranje završeno", {
|
|
629
|
+
projectType,
|
|
630
|
+
classes: classes.length,
|
|
631
|
+
projects: projects.length,
|
|
632
|
+
handlers: httpHandlers.length,
|
|
633
|
+
nuget: nugetPackages.length,
|
|
634
|
+
});
|
|
635
|
+
return JSON.stringify(result, null, 2);
|
|
636
|
+
}
|
|
637
|
+
// ─── Read file handler ────────────────────────────────────────────────────────
|
|
638
|
+
async function handleReadFile(params) {
|
|
639
|
+
const { rootPath, relativePath, maxLines = 500 } = params;
|
|
640
|
+
const fullPath = path.join(rootPath, relativePath);
|
|
641
|
+
const resolvedRoot = path.resolve(rootPath);
|
|
642
|
+
const resolvedFile = path.resolve(fullPath);
|
|
643
|
+
if (!resolvedFile.startsWith(resolvedRoot)) {
|
|
644
|
+
return JSON.stringify({ error: "Nije dopušten pristup izvan korijenskog direktorija." });
|
|
645
|
+
}
|
|
646
|
+
if (!fs.existsSync(fullPath)) {
|
|
647
|
+
return JSON.stringify({ error: `Datoteka ne postoji: ${relativePath}` });
|
|
648
|
+
}
|
|
649
|
+
const stat = fs.statSync(fullPath);
|
|
650
|
+
if (stat.isDirectory()) {
|
|
651
|
+
return JSON.stringify({ error: `Putanja je direktorij: ${relativePath}` });
|
|
652
|
+
}
|
|
653
|
+
try {
|
|
654
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
655
|
+
const lines = content.split("\n");
|
|
656
|
+
const truncated = lines.length > maxLines;
|
|
657
|
+
return JSON.stringify({
|
|
658
|
+
relativePath,
|
|
659
|
+
totalLines: lines.length,
|
|
660
|
+
truncated,
|
|
661
|
+
truncatedAt: truncated ? maxLines : null,
|
|
662
|
+
content: truncated ? lines.slice(0, maxLines).join("\n") : content,
|
|
663
|
+
});
|
|
664
|
+
}
|
|
665
|
+
catch (e) {
|
|
666
|
+
return JSON.stringify({ error: `Greška pri čitanju: ${e.message}` });
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
// ─── Schemas ──────────────────────────────────────────────────────────────────
|
|
670
|
+
const ScanSchema = z.object({
|
|
671
|
+
rootPath: z.string().describe("Apsolutna putanja do korijenskog direktorija repozitorija (npr. C:/dev/WEM.EasyEditCms.Sites.Default)"),
|
|
672
|
+
maxDepth: z.number().default(5).optional().describe("Maksimalna dubina rekurzivnog prolaska kroz direktorije (default: 5)"),
|
|
673
|
+
});
|
|
674
|
+
const ReadFileSchema = z.object({
|
|
675
|
+
rootPath: z.string().describe("Apsolutna putanja do korijenskog direktorija (ista kao pri skeniranju)"),
|
|
676
|
+
relativePath: z
|
|
677
|
+
.string()
|
|
678
|
+
.describe("Relativna putanja do datoteke unutar repozitorija. " +
|
|
679
|
+
"Primjeri: 'Common/Classes/CatalogItemCustom.cs', 'Web.config', " +
|
|
680
|
+
"'Global.asax.cs', 'ServicesRegistration.cs', " +
|
|
681
|
+
"'EasyEdit/XML/CatalogPage.xml', 'Handlers/CartHandler.ashx.cs'"),
|
|
682
|
+
maxLines: z
|
|
683
|
+
.number()
|
|
684
|
+
.default(500)
|
|
685
|
+
.optional()
|
|
686
|
+
.describe("Maksimalni broj linija za čitanje (default: 500). " + "Povećaj na 1000+ za velike datoteke poput CatalogItemCustom.cs."),
|
|
687
|
+
});
|
|
688
|
+
// ─── Registration ─────────────────────────────────────────────────────────────
|
|
689
|
+
export function configureArchitectureTools(server) {
|
|
690
|
+
server.tool(ARCHITECTURE_SCAN, [
|
|
691
|
+
"Skenira arhitekturu WEM EasyEditCms repozitorija i vraća strukturirani JSON koji sadrži:",
|
|
692
|
+
"",
|
|
693
|
+
"• Tip projekta (WEM EasyEditCms Site / Framework)",
|
|
694
|
+
"• Kompletnu strukturu direktorija s inferiranim slojevima na hrvatskom",
|
|
695
|
+
"• Sve .csproj projekte s ovisnostima",
|
|
696
|
+
"• NuGet pakete iz packages.config (ne iz NuGet foldera)",
|
|
697
|
+
"• WEM framework DLL ovisnosti iz bin/ direktorija",
|
|
698
|
+
"• Sve C# klase, sučelja, enume s potpisima metoda i svojstava",
|
|
699
|
+
"• HTTP handlere (.ashx) s implementiranim sučeljima",
|
|
700
|
+
"• ASPX stranice i ASCX user controle (bez EasyEdit backenda)",
|
|
701
|
+
"• Web.config ključeve (bez vrijednosti)",
|
|
702
|
+
"• XML definicije tipova stranica iz EasyEdit/XML/",
|
|
703
|
+
"• API metode BaseUiTest klase (iz XML dokumentacije)",
|
|
704
|
+
"• Detektirane arhitekturalne obrasce",
|
|
705
|
+
"• Ključne datoteke s relativnim putanjama za brzo čitanje",
|
|
706
|
+
"",
|
|
707
|
+
"NAPOMENA: Tool NE čita tijela metoda. Za logiku, DI registracije, Web.config",
|
|
708
|
+
"vrijednosti i startup sekvencu pozovi project_architecture_read_file.",
|
|
709
|
+
].join("\n"), ScanSchema.shape, async (params) => ({
|
|
710
|
+
content: [{ type: "text", text: await handleScan(params) }],
|
|
711
|
+
}));
|
|
712
|
+
server.tool(ARCHITECTURE_READ_FILE, [
|
|
713
|
+
"Čita sadržaj jedne datoteke iz repozitorija.",
|
|
714
|
+
"Koristi se NAKON project_architecture_scan za detalje koje scan ne pruža:",
|
|
715
|
+
"",
|
|
716
|
+
"• Tijela metoda (getter logika, computed properties, poslovne pravilo)",
|
|
717
|
+
"• Konstruktor logika i DI inicijalizacija polja",
|
|
718
|
+
"• Web.config — sve vrijednosti konfiguracije i connection stringovi",
|
|
719
|
+
"• Global.asax.cs — Application_Start sekvenca i middleware",
|
|
720
|
+
"• ServicesRegistration.cs — redoslijed DI registracija",
|
|
721
|
+
"• Handler .cs datoteke — ProcessRequest logika",
|
|
722
|
+
"• EasyEdit/XML/*.xml — definicije tipova stranica i polja",
|
|
723
|
+
"• Common/Classes/*.cs — pun kod custom klasa",
|
|
724
|
+
"",
|
|
725
|
+
"Relativne putanje dobiveš iz polja 'keyFiles' u scan rezultatu.",
|
|
726
|
+
].join("\n"), ReadFileSchema.shape, async (params) => ({
|
|
727
|
+
content: [{ type: "text", text: await handleReadFile(params) }],
|
|
728
|
+
}));
|
|
729
|
+
}
|
|
730
|
+
//# sourceMappingURL=architecture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/tools/architecture.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
CHANGED
|
@@ -10,6 +10,7 @@ import { configureTestPlanTools } from "./tools/test-plans.js";
|
|
|
10
10
|
import { configureWikiTools } from "./tools/wiki.js";
|
|
11
11
|
import { configureWorkTools } from "./tools/work.js";
|
|
12
12
|
import { configureWorkItemTools } from "./tools/work-items.js";
|
|
13
|
+
import { configureArchitectureTools } from "./tools/architecture.js";
|
|
13
14
|
function configureAllTools(server, tokenProvider, connectionProvider, userAgentProvider, enabledDomains) {
|
|
14
15
|
const configureIfDomainEnabled = (domain, configureFn) => {
|
|
15
16
|
if (enabledDomains.has(domain)) {
|
|
@@ -25,6 +26,7 @@ function configureAllTools(server, tokenProvider, connectionProvider, userAgentP
|
|
|
25
26
|
configureIfDomainEnabled(Domain.TEST_PLANS, () => configureTestPlanTools(server, tokenProvider, connectionProvider));
|
|
26
27
|
configureIfDomainEnabled(Domain.SEARCH, () => configureSearchTools(server, tokenProvider, connectionProvider, userAgentProvider));
|
|
27
28
|
configureIfDomainEnabled(Domain.ADVANCED_SECURITY, () => configureAdvSecTools(server, tokenProvider, connectionProvider));
|
|
29
|
+
configureArchitectureTools(server);
|
|
28
30
|
}
|
|
29
31
|
export { configureAllTools };
|
|
30
32
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,SAAS,iBAAiB,CAAC,MAAiB,EAAE,aAAoC,EAAE,kBAAyC,EAAE,iBAA+B,EAAE,cAA2B;IACzL,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,WAAuB,EAAE,EAAE;QAC3E,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,wBAAwB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC9H,wBAAwB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC3G,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACvI,wBAAwB,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtI,wBAAwB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACxI,wBAAwB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC9H,wBAAwB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrH,wBAAwB,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAClI,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC1H,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const packageVersion = "2.3.
|
|
1
|
+
export const packageVersion = "2.3.15";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED