bobs-workshop 0.3.0 → 0.3.1

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.
Files changed (34) hide show
  1. package/Claude.md +30 -4
  2. package/README.md +2 -2
  3. package/dist/index.js +4 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/prompts/architect.js +6 -1
  6. package/dist/prompts/architect.js.map +1 -1
  7. package/dist/prompts/debugger.js +5 -0
  8. package/dist/prompts/debugger.js.map +1 -1
  9. package/dist/prompts/engineer.js +6 -1
  10. package/dist/prompts/engineer.js.map +1 -1
  11. package/dist/prompts/reviewer.js +6 -1
  12. package/dist/prompts/reviewer.js.map +1 -1
  13. package/dist/tools/searchTools.js +55 -2
  14. package/dist/tools/searchTools.js.map +1 -1
  15. package/dist/tools/structural/__tests__/orchestrator.test.js +61 -0
  16. package/dist/tools/structural/__tests__/orchestrator.test.js.map +1 -0
  17. package/dist/tools/structural/cache.js +226 -0
  18. package/dist/tools/structural/cache.js.map +1 -0
  19. package/dist/tools/structural/engines/python/index.js +118 -0
  20. package/dist/tools/structural/engines/python/index.js.map +1 -0
  21. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js +97 -0
  22. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js.map +1 -0
  23. package/dist/tools/structural/engines/typescript/analyzer.js +433 -0
  24. package/dist/tools/structural/engines/typescript/analyzer.js.map +1 -0
  25. package/dist/tools/structural/engines/typescript/index.js +381 -0
  26. package/dist/tools/structural/engines/typescript/index.js.map +1 -0
  27. package/dist/tools/structural/engines/typescript/utils.js +279 -0
  28. package/dist/tools/structural/engines/typescript/utils.js.map +1 -0
  29. package/dist/tools/structural/index.js +248 -0
  30. package/dist/tools/structural/index.js.map +1 -0
  31. package/dist/tools/structural/types.js +18 -0
  32. package/dist/tools/structural/types.js.map +1 -0
  33. package/package.json +5 -1
  34. package/public/.well-known/mcp/manifest.json +6 -5
@@ -0,0 +1,97 @@
1
+ import { TypeScriptEngine } from '../index.js';
2
+ import { describe, it, expect, beforeEach } from '@jest/globals';
3
+ describe('TypeScriptEngine', () => {
4
+ let engine;
5
+ beforeEach(() => {
6
+ engine = new TypeScriptEngine();
7
+ });
8
+ describe('findReferences', () => {
9
+ it('should find references to a symbol', async () => {
10
+ // This is a placeholder test - in production, you'd use a test fixture
11
+ const results = await engine.findReferences('TypeScriptEngine', __dirname, { maxResults: 10 });
12
+ expect(Array.isArray(results)).toBe(true);
13
+ }, 30000); // 30 second timeout for AST parsing
14
+ it('should respect maxResults limit', async () => {
15
+ const results = await engine.findReferences('TypeScriptEngine', __dirname, { maxResults: 5 });
16
+ expect(results.length).toBeLessThanOrEqual(5);
17
+ }, 30000);
18
+ it('should handle non-existent symbols gracefully', async () => {
19
+ const results = await engine.findReferences('NonExistentSymbolXYZ123', __dirname, { maxResults: 10 });
20
+ expect(Array.isArray(results)).toBe(true);
21
+ expect(results.length).toBe(0);
22
+ }, 30000);
23
+ });
24
+ describe('findDefinition', () => {
25
+ it('should find definition of a symbol', async () => {
26
+ const result = await engine.findDefinition('TypeScriptEngine', __dirname);
27
+ // Result can be null if symbol not found in scope
28
+ expect(result === null || typeof result === 'object').toBe(true);
29
+ }, 30000);
30
+ it('should return null for non-existent symbols', async () => {
31
+ const result = await engine.findDefinition('NonExistentSymbolXYZ123', __dirname);
32
+ expect(result).toBeNull();
33
+ }, 30000);
34
+ });
35
+ describe('getDependencies', () => {
36
+ it('should get dependencies for a file', async () => {
37
+ const results = await engine.getDependencies(__filename, { maxResults: 20 });
38
+ expect(Array.isArray(results)).toBe(true);
39
+ }, 30000);
40
+ it('should return import information', async () => {
41
+ const results = await engine.getDependencies(__filename, { maxResults: 20 });
42
+ if (results.length > 0) {
43
+ expect(results[0]).toHaveProperty('file');
44
+ expect(results[0]).toHaveProperty('symbol');
45
+ expect(results[0]).toHaveProperty('kind');
46
+ }
47
+ }, 30000);
48
+ });
49
+ describe('findArchitecturalIssues', () => {
50
+ it('should return an array of issues', async () => {
51
+ const issues = await engine.findArchitecturalIssues(__dirname);
52
+ expect(Array.isArray(issues)).toBe(true);
53
+ }, 30000);
54
+ it('should identify circular dependencies if present', async () => {
55
+ const issues = await engine.findArchitecturalIssues(__dirname);
56
+ // Issues array can be empty if no problems found
57
+ issues.forEach(issue => {
58
+ expect(issue).toHaveProperty('type');
59
+ expect(issue).toHaveProperty('severity');
60
+ expect(issue).toHaveProperty('message');
61
+ expect(issue).toHaveProperty('location');
62
+ });
63
+ }, 30000);
64
+ });
65
+ describe('findUnusedExports', () => {
66
+ it('should return an array of unused exports', async () => {
67
+ const unused = await engine.findUnusedExports(__dirname);
68
+ expect(Array.isArray(unused)).toBe(true);
69
+ }, 30000);
70
+ it('should include symbol name and location', async () => {
71
+ const unused = await engine.findUnusedExports(__dirname);
72
+ unused.forEach(item => {
73
+ expect(item).toHaveProperty('name');
74
+ expect(item).toHaveProperty('kind');
75
+ expect(item).toHaveProperty('location');
76
+ expect(item).toHaveProperty('exportedFrom');
77
+ });
78
+ }, 30000);
79
+ });
80
+ describe('getRefactorImpact', () => {
81
+ it('should calculate refactor impact', async () => {
82
+ const impact = await engine.getRefactorImpact('TypeScriptEngine', __dirname);
83
+ expect(impact).toHaveProperty('symbol');
84
+ expect(impact).toHaveProperty('referenceCount');
85
+ expect(impact).toHaveProperty('affectedFiles');
86
+ expect(impact).toHaveProperty('testFiles');
87
+ expect(Array.isArray(impact.affectedFiles)).toBe(true);
88
+ expect(Array.isArray(impact.testFiles)).toBe(true);
89
+ }, 30000);
90
+ it('should return zero references for non-existent symbol', async () => {
91
+ const impact = await engine.getRefactorImpact('NonExistentSymbolXYZ123', __dirname);
92
+ expect(impact.referenceCount).toBe(0);
93
+ expect(impact.affectedFiles.length).toBe(0);
94
+ }, 30000);
95
+ });
96
+ });
97
+ //# sourceMappingURL=typescript-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-engine.test.js","sourceRoot":"","sources":["../../../../../../src/tools/structural/engines/typescript/__tests__/typescript-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,433 @@
1
+ import { Node, SyntaxKind, ts } from "ts-morph";
2
+ import { nodeToLocation, getSymbolKind, getTypeString, positionToOffset } from "./utils.js";
3
+ export function extractSymbolInfo(node, includePrivate = false, includeDefinition = false) {
4
+ const symbol = node.getSymbol();
5
+ if (!symbol)
6
+ return null;
7
+ const name = symbol.getName();
8
+ if (!includePrivate && name.startsWith("_"))
9
+ return null;
10
+ const kind = getSymbolKind(node);
11
+ const type = node.getType();
12
+ const modifiers = [];
13
+ if (Node.isModifierable(node)) {
14
+ if (node.hasModifier(SyntaxKind.PublicKeyword))
15
+ modifiers.push("public");
16
+ if (node.hasModifier(SyntaxKind.PrivateKeyword))
17
+ modifiers.push("private");
18
+ if (node.hasModifier(SyntaxKind.ProtectedKeyword))
19
+ modifiers.push("protected");
20
+ if (node.hasModifier(SyntaxKind.StaticKeyword))
21
+ modifiers.push("static");
22
+ if (node.hasModifier(SyntaxKind.AsyncKeyword))
23
+ modifiers.push("async");
24
+ if (node.hasModifier(SyntaxKind.ReadonlyKeyword))
25
+ modifiers.push("readonly");
26
+ if (node.hasModifier(SyntaxKind.AbstractKeyword))
27
+ modifiers.push("abstract");
28
+ }
29
+ const documentation = symbol.getJsDocTags().map(tag => `@${tag.getName()}${tag.getText() ? ` ${tag.getText()}` : ""}`).join("\n");
30
+ const location = nodeToLocation(node);
31
+ let definition;
32
+ if (includeDefinition) {
33
+ definition = getSymbolDefinition(symbol);
34
+ }
35
+ return {
36
+ name,
37
+ kind,
38
+ type: getTypeString(type),
39
+ location: {
40
+ file: location.file,
41
+ line: location.position.line
42
+ },
43
+ documentation: documentation || undefined,
44
+ modifiers: modifiers.length > 0 ? modifiers : undefined,
45
+ relationships: extractRelationships(node),
46
+ definition
47
+ };
48
+ }
49
+ function extractRelationships(node) {
50
+ const relationships = {};
51
+ if (Node.isClassDeclaration(node) || Node.isInterfaceDeclaration(node)) {
52
+ const heritage = node.getHeritageClauses();
53
+ const extendsClause = heritage.find(h => h.getToken() === SyntaxKind.ExtendsKeyword);
54
+ if (extendsClause) {
55
+ const extendsNodes = extendsClause.getTypeNodes();
56
+ if (extendsNodes.length > 0) {
57
+ relationships.extends = extendsNodes.map(expr => ({
58
+ name: expr.getText(),
59
+ kind: "class"
60
+ }));
61
+ }
62
+ }
63
+ if (Node.isClassDeclaration(node)) {
64
+ const implementsNodes = node.getImplements() || [];
65
+ if (implementsNodes.length > 0) {
66
+ relationships.implements = implementsNodes.map(expr => ({
67
+ name: expr.getText(),
68
+ kind: "interface"
69
+ }));
70
+ }
71
+ }
72
+ }
73
+ return Object.keys(relationships).length > 0 ? relationships : undefined;
74
+ }
75
+ function getSymbolDefinition(symbol) {
76
+ const declarations = symbol.getDeclarations();
77
+ if (declarations.length === 0) {
78
+ // Try to get the aliased symbol if this is an alias
79
+ const aliasedSymbol = symbol.getAliasedSymbol();
80
+ if (aliasedSymbol && aliasedSymbol !== symbol) {
81
+ return getSymbolDefinition(aliasedSymbol);
82
+ }
83
+ return undefined;
84
+ }
85
+ // Sort declarations by preference
86
+ const sortedDeclarations = declarations.slice().sort((a, b) => {
87
+ const aFile = a.getSourceFile().getFilePath();
88
+ const bFile = b.getSourceFile().getFilePath();
89
+ // 1. Prefer non-.d.ts files (actual source)
90
+ const aIsDts = aFile.endsWith('.d.ts');
91
+ const bIsDts = bFile.endsWith('.d.ts');
92
+ if (aIsDts !== bIsDts) {
93
+ return aIsDts ? 1 : -1;
94
+ }
95
+ // 2. If both are .d.ts, prefer node_modules over @types
96
+ const aIsNodeModules = aFile.includes('node_modules') && !aFile.includes('node_modules/@types');
97
+ const bIsNodeModules = bFile.includes('node_modules') && !bFile.includes('node_modules/@types');
98
+ if (aIsNodeModules !== bIsNodeModules) {
99
+ return aIsNodeModules ? -1 : 1;
100
+ }
101
+ // 3. Prefer shorter paths (closer to root)
102
+ return aFile.length - bFile.length;
103
+ });
104
+ const primaryDeclaration = sortedDeclarations[0];
105
+ const sourceFile = primaryDeclaration.getSourceFile();
106
+ const startPos = sourceFile.getLineAndColumnAtPos(primaryDeclaration.getStart());
107
+ return {
108
+ file: sourceFile.getFilePath(),
109
+ line: startPos.line - 1 // Convert to 0-based indexing
110
+ };
111
+ }
112
+ export function analyzeSourceFile(sourceFile, analysisType, depth = 2, includePrivate = false, includeDefinition = false) {
113
+ const symbols = [];
114
+ const imports = [];
115
+ const exports = [];
116
+ if (analysisType === "symbols" || analysisType === "all") {
117
+ sourceFile.forEachDescendant(node => {
118
+ if (isDeclarationNode(node)) {
119
+ const symbolInfo = extractSymbolInfo(node, includePrivate, includeDefinition);
120
+ if (symbolInfo) {
121
+ symbols.push(symbolInfo);
122
+ }
123
+ }
124
+ });
125
+ }
126
+ if (analysisType === "dependencies" || analysisType === "all") {
127
+ sourceFile.getImportDeclarations().forEach(importDecl => {
128
+ const moduleSpecifier = importDecl.getModuleSpecifierValue();
129
+ const namedImports = importDecl.getNamedImports().map(ni => ni.getName());
130
+ const defaultImport = importDecl.getDefaultImport()?.getText();
131
+ const namespaceImport = importDecl.getNamespaceImport()?.getText();
132
+ const allImports = [
133
+ ...(defaultImport ? [defaultImport] : []),
134
+ ...(namespaceImport ? [namespaceImport] : []),
135
+ ...namedImports
136
+ ];
137
+ if (allImports.length > 0) {
138
+ imports.push({
139
+ moduleSpecifier,
140
+ symbols: allImports,
141
+ isTypeOnly: importDecl.isTypeOnly()
142
+ });
143
+ }
144
+ });
145
+ sourceFile.getExportDeclarations().forEach(exportDecl => {
146
+ const namedExports = exportDecl.getNamedExports().map(ne => ne.getName());
147
+ exports.push(...namedExports);
148
+ });
149
+ sourceFile.getExportedDeclarations().forEach((declarations, name) => {
150
+ exports.push(name);
151
+ });
152
+ }
153
+ const diagnostics = sourceFile.getPreEmitDiagnostics().map(diag => ({
154
+ message: diag.getMessageText().toString(),
155
+ severity: getDiagnosticSeverity(diag.getCategory()),
156
+ code: diag.getCode()?.toString()
157
+ }));
158
+ return {
159
+ symbols,
160
+ diagnostics,
161
+ imports,
162
+ exports
163
+ };
164
+ }
165
+ function isDeclarationNode(node) {
166
+ return Node.isClassDeclaration(node) ||
167
+ Node.isInterfaceDeclaration(node) ||
168
+ Node.isFunctionDeclaration(node) ||
169
+ Node.isVariableDeclaration(node) ||
170
+ Node.isTypeAliasDeclaration(node) ||
171
+ Node.isEnumDeclaration(node) ||
172
+ Node.isMethodDeclaration(node) ||
173
+ Node.isPropertyDeclaration(node) ||
174
+ Node.isGetAccessorDeclaration(node) ||
175
+ Node.isSetAccessorDeclaration(node);
176
+ }
177
+ function getDiagnosticSeverity(category) {
178
+ switch (category) {
179
+ case ts.DiagnosticCategory.Error:
180
+ return "error";
181
+ case ts.DiagnosticCategory.Warning:
182
+ return "warning";
183
+ default:
184
+ return "info";
185
+ }
186
+ }
187
+ export function findSymbolAtPosition(sourceFile, position) {
188
+ const offset = positionToOffset(sourceFile, position);
189
+ return sourceFile.getDescendantAtPos(offset);
190
+ }
191
+ export function findSymbolOnLine(sourceFile, line, maxSearchAttempts = 3) {
192
+ const lines = sourceFile.getFullText().split("\n");
193
+ // Try the specified line first, then expand search
194
+ for (let attempt = 0; attempt < maxSearchAttempts; attempt++) {
195
+ const searchLines = [];
196
+ if (attempt === 0) {
197
+ // First attempt: only the specified line
198
+ searchLines.push(line);
199
+ }
200
+ else {
201
+ // Subsequent attempts: expand radius
202
+ for (let offset = -attempt; offset <= attempt; offset++) {
203
+ const searchLine = line + offset;
204
+ if (searchLine >= 0 && searchLine < lines.length && !searchLines.includes(searchLine)) {
205
+ searchLines.push(searchLine);
206
+ }
207
+ }
208
+ }
209
+ for (const searchLine of searchLines) {
210
+ const lineText = lines[searchLine];
211
+ if (!lineText || lineText.trim().length === 0)
212
+ continue;
213
+ // Find all identifiers on this line by looking for word characters
214
+ const identifierMatches = Array.from(lineText.matchAll(/\b[a-zA-Z_$][a-zA-Z0-9_$]*\b/g));
215
+ for (const match of identifierMatches) {
216
+ if (match.index !== undefined) {
217
+ const position = { line: searchLine, character: match.index };
218
+ const node = findSymbolAtPosition(sourceFile, position);
219
+ if (node && node.getSymbol()) {
220
+ return node;
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }
226
+ return undefined;
227
+ }
228
+ export function getTypeHierarchy(node, direction, maxDepth = 5) {
229
+ const hierarchy = [];
230
+ const visited = new Set();
231
+ function processType(type, depth) {
232
+ if (depth > maxDepth)
233
+ return;
234
+ const symbol = type.getSymbol();
235
+ if (!symbol)
236
+ return;
237
+ const name = symbol.getName();
238
+ if (visited.has(name))
239
+ return;
240
+ visited.add(name);
241
+ const declarations = symbol.getDeclarations();
242
+ if (declarations.length === 0)
243
+ return;
244
+ const declaration = declarations[0];
245
+ const typeInfo = {
246
+ name,
247
+ kind: getTypeKind(declaration),
248
+ location: nodeToLocation(declaration),
249
+ generics: getGenericParameters(declaration)
250
+ };
251
+ hierarchy.push(typeInfo);
252
+ if (direction === "ancestors" || direction === "both") {
253
+ const baseTypes = type.getBaseTypes();
254
+ baseTypes.forEach(baseType => processType(baseType, depth + 1));
255
+ }
256
+ if (direction === "descendants" || direction === "both") {
257
+ // Finding descendants requires project-wide analysis
258
+ // This would need to be implemented by searching all files
259
+ }
260
+ }
261
+ const type = node.getType();
262
+ processType(type, 0);
263
+ return hierarchy;
264
+ }
265
+ function getTypeKind(node) {
266
+ if (Node.isClassDeclaration(node))
267
+ return "class";
268
+ if (Node.isInterfaceDeclaration(node))
269
+ return "interface";
270
+ if (Node.isEnumDeclaration(node))
271
+ return "enum";
272
+ return "type";
273
+ }
274
+ function getGenericParameters(node) {
275
+ if (!Node.isTypeParametered(node))
276
+ return undefined;
277
+ const params = node.getTypeParameters();
278
+ if (params.length === 0)
279
+ return undefined;
280
+ return params.map(p => p.getName());
281
+ }
282
+ export function extractMembers(node) {
283
+ const members = [];
284
+ if (Node.isClassDeclaration(node) || Node.isInterfaceDeclaration(node)) {
285
+ const type = node.getType();
286
+ const properties = type.getProperties();
287
+ properties.forEach(prop => {
288
+ const propDecl = prop.getValueDeclaration();
289
+ if (!propDecl)
290
+ return;
291
+ let kind = "property";
292
+ let visibility = "public";
293
+ let isStatic = false;
294
+ if (Node.isMethodDeclaration(propDecl)) {
295
+ kind = "method";
296
+ }
297
+ else if (Node.isGetAccessorDeclaration(propDecl)) {
298
+ kind = "getter";
299
+ }
300
+ else if (Node.isSetAccessorDeclaration(propDecl)) {
301
+ kind = "setter";
302
+ }
303
+ if (Node.isModifierable(propDecl)) {
304
+ if (propDecl.hasModifier(SyntaxKind.PrivateKeyword))
305
+ visibility = "private";
306
+ else if (propDecl.hasModifier(SyntaxKind.ProtectedKeyword))
307
+ visibility = "protected";
308
+ isStatic = propDecl.hasModifier(SyntaxKind.StaticKeyword);
309
+ }
310
+ members.push({
311
+ name: prop.getName(),
312
+ kind,
313
+ visibility,
314
+ type: getTypeString(prop.getTypeAtLocation(propDecl)),
315
+ static: isStatic
316
+ });
317
+ });
318
+ }
319
+ return members;
320
+ }
321
+ export function analyzeSymbolDeclaration(node, maxTypeLength = Number.MAX_SAFE_INTEGER) {
322
+ const symbol = node.getSymbol();
323
+ if (!symbol)
324
+ return null;
325
+ const name = symbol.getName();
326
+ const kind = getSymbolKind(node);
327
+ const type = node.getType();
328
+ const location = nodeToLocation(node);
329
+ const result = {
330
+ name,
331
+ kind,
332
+ type: getTypeString(type, maxTypeLength),
333
+ location
334
+ };
335
+ // Extract function/method parameters
336
+ if (Node.isFunctionDeclaration(node) || Node.isMethodDeclaration(node) || Node.isArrowFunction(node)) {
337
+ const params = node.getParameters();
338
+ result.parameters = params.map(param => ({
339
+ name: param.getName(),
340
+ type: getTypeString(param.getType(), maxTypeLength),
341
+ optional: param.hasQuestionToken(),
342
+ defaultValue: param.getInitializer()?.getText()
343
+ }));
344
+ const returnType = node.getReturnType();
345
+ result.returnType = getTypeString(returnType, maxTypeLength);
346
+ result.signature = node.getText();
347
+ }
348
+ // Extract class/interface members
349
+ if (Node.isClassDeclaration(node) || Node.isInterfaceDeclaration(node)) {
350
+ result.members = [];
351
+ // Get properties
352
+ node.getProperties().forEach(prop => {
353
+ const propType = prop.getType();
354
+ result.members.push({
355
+ name: prop.getName(),
356
+ type: getTypeString(propType, maxTypeLength),
357
+ kind: "property",
358
+ visibility: getVisibility(prop),
359
+ static: prop.hasModifier(SyntaxKind.StaticKeyword),
360
+ optional: prop.hasQuestionToken()
361
+ });
362
+ });
363
+ // Get methods
364
+ node.getMethods().forEach(method => {
365
+ const methodType = method.getType();
366
+ const isStatic = Node.isMethodDeclaration(method) ? method.hasModifier(SyntaxKind.StaticKeyword) : false;
367
+ result.members.push({
368
+ name: method.getName(),
369
+ type: getTypeString(methodType, maxTypeLength),
370
+ kind: "method",
371
+ visibility: getVisibility(method),
372
+ static: isStatic,
373
+ optional: false
374
+ });
375
+ });
376
+ // Get getters/setters
377
+ node.getGetAccessors().forEach(getter => {
378
+ const getterType = getter.getType();
379
+ result.members.push({
380
+ name: getter.getName(),
381
+ type: getTypeString(getterType, maxTypeLength),
382
+ kind: "getter",
383
+ visibility: getVisibility(getter),
384
+ static: getter.hasModifier(SyntaxKind.StaticKeyword),
385
+ optional: false
386
+ });
387
+ });
388
+ node.getSetAccessors().forEach(setter => {
389
+ const setterType = setter.getType();
390
+ result.members.push({
391
+ name: setter.getName(),
392
+ type: getTypeString(setterType, maxTypeLength),
393
+ kind: "setter",
394
+ visibility: getVisibility(setter),
395
+ static: setter.hasModifier(SyntaxKind.StaticKeyword),
396
+ optional: false
397
+ });
398
+ });
399
+ }
400
+ // Extract generics
401
+ if (Node.isTypeParametered(node)) {
402
+ const typeParams = node.getTypeParameters();
403
+ if (typeParams.length > 0) {
404
+ result.generics = typeParams.map(tp => tp.getName());
405
+ }
406
+ }
407
+ // Extract enum members
408
+ if (Node.isEnumDeclaration(node)) {
409
+ result.members = node.getMembers().map(member => ({
410
+ name: member.getName(),
411
+ type: getTypeString(member.getType(), maxTypeLength),
412
+ kind: "property",
413
+ visibility: "public",
414
+ static: false,
415
+ optional: false
416
+ }));
417
+ }
418
+ // Extract type alias details
419
+ if (Node.isTypeAliasDeclaration(node)) {
420
+ result.signature = node.getText();
421
+ }
422
+ return result;
423
+ }
424
+ function getVisibility(node) {
425
+ if (Node.isModifierable(node)) {
426
+ if (node.hasModifier(SyntaxKind.PrivateKeyword))
427
+ return "private";
428
+ if (node.hasModifier(SyntaxKind.ProtectedKeyword))
429
+ return "protected";
430
+ }
431
+ return "public";
432
+ }
433
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../../../src/tools/structural/engines/typescript/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,IAAI,EAGJ,UAAU,EACV,EAAE,EAOH,MAAM,UAAU,CAAC;AAYlB,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,iBAAiB,CAC/B,IAAU,EACV,iBAA0B,KAAK,EAC/B,oBAA6B,KAAK;IAElC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE5B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACpD,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,UAAsD,CAAC;IAC3D,IAAI,iBAAiB,EAAE,CAAC;QACtB,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;SAC7B;QACD,aAAa,EAAE,aAAa,IAAI,SAAS;QACzC,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACvD,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACzC,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAU;IACtC,MAAM,aAAa,GAAgC,EAAE,CAAC;IAEtD,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,cAAc,CAAC,CAAC;QACrF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;YAClD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,aAAa,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChD,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;oBACpB,IAAI,EAAE,OAAgB;iBACvB,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;YACnD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,aAAa,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtD,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;oBACpB,IAAI,EAAE,WAAoB;iBAC3B,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,oDAAoD;QACpD,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAChD,IAAI,aAAa,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC9C,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kCAAkC;IAClC,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC;QAE9C,4CAA4C;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,wDAAwD;QACxD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAChG,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAChG,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,2CAA2C;QAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEjF,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE;QAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,8BAA8B;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,UAAsB,EACtB,YAAgD,EAChD,QAAgB,CAAC,EACjB,iBAA0B,KAAK,EAC/B,oBAA6B,KAAK;IAOlC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QACzD,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YAClC,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;gBAC9E,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,KAAK,cAAc,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC9D,UAAU,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACtD,MAAM,eAAe,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;YAC7D,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC;YAC/D,MAAM,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC;YAEnE,MAAM,UAAU,GAAG;gBACjB,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,YAAY;aAChB,CAAC;YAEF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC;oBACX,eAAe;oBACf,OAAO,EAAE,UAAU;oBACnB,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACtD,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE;YAClE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,MAAM,WAAW,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE;QACzC,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE;KACjC,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,OAAO;QACP,WAAW;QACX,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAU;IACnC,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA+B;IAC5D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK;YAC9B,OAAO,OAAO,CAAC;QACjB,KAAK,EAAE,CAAC,kBAAkB,CAAC,OAAO;YAChC,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAsB,EACtB,QAA6C;IAE7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,UAAsB,EACtB,IAAY,EACZ,oBAA4B,CAAC;IAE7B,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnD,mDAAmD;IACnD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,yCAAyC;YACzC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,KAAK,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;gBACxD,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;gBACjC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAExD,mEAAmE;YACnE,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAEzF,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC9D,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAExD,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;wBAC7B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAU,EACV,SAA+C,EAC/C,WAAmB,CAAC;IAEpB,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,WAAW,CAAC,IAAU,EAAE,KAAa;QAC5C,IAAI,KAAK,GAAG,QAAQ;YAAE,OAAO;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElB,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;QAC9C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEtC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAa;YACzB,IAAI;YACJ,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;YAC9B,QAAQ,EAAE,cAAc,CAAC,WAAW,CAAC;YACrC,QAAQ,EAAE,oBAAoB,CAAC,WAAW,CAAC;SAC5C,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACxD,qDAAqD;YACrD,2DAA2D;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAErB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,IAAU;IAC7B,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAU;IACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAU;IACvC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,IAAI,IAAI,GAAuB,UAAU,CAAC;YAC1C,IAAI,UAAU,GAA6B,QAAQ,CAAC;YACpD,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;YAED,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,IAAI,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC;oBAAE,UAAU,GAAG,SAAS,CAAC;qBACvE,IAAI,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;oBAAE,UAAU,GAAG,WAAW,CAAC;gBACrF,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;gBACpB,IAAI;gBACJ,UAAU;gBACV,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACrD,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAU,EAAE,gBAAwB,MAAM,CAAC,gBAAgB;IAuBlG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,MAAM,GAsBR;QACF,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;QACxC,QAAQ;KACT,CAAC;IAEF,qCAAqC;IACrC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACrG,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;YACrB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC;YACnD,QAAQ,EAAE,KAAK,CAAC,gBAAgB,EAAE;YAClC,YAAY,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE;SAChD,CAAC,CAAC,CAAC;QAEJ,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE7D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QAEpB,iBAAiB;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;gBACpB,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;gBAC5C,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;gBAC/B,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC;gBAClD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;aAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,cAAc;QACd,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzG,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,IAAI,EAAE,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC;gBAC9C,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC;gBACjC,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,IAAI,EAAE,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC;gBAC9C,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC;gBACpD,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;gBACtB,IAAI,EAAE,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC;gBAC9C,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC;gBACpD,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;YACtB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC;YACpD,IAAI,EAAE,UAAmB;YACzB,UAAU,EAAE,QAAiB;YAC7B,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,IAAU;IAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,SAAS,CAAC;QAClE,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAAE,OAAO,WAAW,CAAC;IACxE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}