Skip to content

Commit 13577f9

Browse files
authored
Merge pull request #285 from CoderAllan/RoutingRelations
Routing relations
2 parents fd796e3 + 11c978d commit 13577f9

20 files changed

+272
-118
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## Version 1.9.0
4+
5+
- Routing relations between components are now visualized. Notice that routes defined with module destinations are not yet visualized.
6+
37
## Version 1.8.5
48

59
- Security issue fixed: Now using npm package @xmldom/xmldom instead of xmldom

images/ShowComponentHierarchy.gif

404 KB
Loading

package-lock.json

Lines changed: 21 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
"displayName": "AngularTools",
55
"description": "AngularTools is a collection of tools for exploring an Angular project, help you with documenting, reverse engineering a project or help when refactoring.",
66
"icon": "logo.png",
7-
"version": "1.8.5",
7+
"version": "1.9.0",
88
"license": "MIT",
99
"repository": "https://github.com/CoderAllan/vscode-angulartools",
1010
"author": {
1111
"name": "Allan Simonsen",
1212
"url": "https://github.com/CoderAllan"
1313
},
1414
"engines": {
15-
"vscode": "^1.62.0"
15+
"vscode": "^1.63.0"
1616
},
1717
"categories": [
1818
"Other",
@@ -372,6 +372,11 @@
372372
"default": "#0288d1",
373373
"description": "The default color of the edges representing components using other components."
374374
},
375+
"angularTools.edges.routeEdgeColor": {
376+
"type": "string",
377+
"default": "#FF8C00",
378+
"description": "The default color of the edges representing routes."
379+
},
375380
"angularTools.packageJsonMarkdownFilename": {
376381
"type": "string",
377382
"default": "ReadMe-PackagesJson.md",
@@ -419,6 +424,7 @@
419424
"@typescript-eslint/parser": "^5.6.0",
420425
"eslint": "^8.4.1",
421426
"glob": "^7.2.0",
427+
"supports-color": "^9.2.1",
422428
"ts-loader": "^9.2.6",
423429
"typescript": "^4.5.2",
424430
"webpack": "^5.65.0",
@@ -434,4 +440,4 @@
434440
"prettify-xml": "^1.2.0",
435441
"xmlserializer": "^0.6.1"
436442
}
437-
}
443+
}

src/commands/componentHierarchyMarkdown.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { CommandBase } from '@commands';
2-
import { Config, Component, ComponentManager, FileSystemUtils } from '@src';
2+
import { Component } from '@model';
3+
import { Config, ComponentManager, FileSystemUtils } from '@src';
34
import * as path from 'path';
45

56
export class ComponentHierarchyMarkdown extends CommandBase {
@@ -10,7 +11,7 @@ export class ComponentHierarchyMarkdown extends CommandBase {
1011
this.checkForOpenWorkspace();
1112
const fsUtils = new FileSystemUtils();
1213
var workspaceDirectory: string = fsUtils.getWorkspaceFolder();
13-
const components = ComponentManager.findComponents(workspaceDirectory);
14+
const components = ComponentManager.scanWorkspaceForComponents(workspaceDirectory);
1415

1516
let relations: string = '';
1617
const addRelation = (from: string, to: string) => {

src/commands/generateDependencyInjectionGraph.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,20 @@ export class GenerateDependencyInjectionGraph extends ShowHierarchyBase {
9696
const outputs = component.outputs.map(i => i.name).join(", ");
9797
nodeContent += `\\n<b>Outputs: </b> ${outputs}`;
9898
}
99-
if (component.viewchilds.length > 0) {
100-
const viewchilds = component.viewchilds.map(i => i.name).join(", ");
99+
if (component.viewChilds.length > 0) {
100+
const viewchilds = component.viewChilds.map(i => i.name).join(", ");
101101
nodeContent += `\\n<b>Viewchilds: </b> ${viewchilds}`;
102102
}
103-
if (component.viewchildren.length > 0) {
104-
const viewchildren = component.viewchildren.map(i => i.name).join(", ");
103+
if (component.viewChildren.length > 0) {
104+
const viewchildren = component.viewChildren.map(i => i.name).join(", ");
105105
nodeContent += `\\n<b>Viewchildren: </b> ${viewchildren}`;
106106
}
107-
if (component.contentchilds.length > 0) {
108-
const contentchilds = component.contentchilds.map(i => i.name).join(", ");
107+
if (component.contentChilds.length > 0) {
108+
const contentchilds = component.contentChilds.map(i => i.name).join(", ");
109109
nodeContent += `\\n<b>Contentchilds: </b> ${contentchilds}`;
110110
}
111-
if (component.contentchildren.length > 0) {
112-
const contentchildren = component.contentchildren.map(i => i.name).join(", ");
111+
if (component.contentChildren.length > 0) {
112+
const contentchildren = component.contentChildren.map(i => i.name).join(", ");
113113
nodeContent += `\\n<b>Contentchildren: </b> ${contentchildren}`;
114114
}
115115
return nodeContent;

src/commands/modulesToMarkdown.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import * as vscode from 'vscode';
22
import * as path from 'path';
3-
import { ArrayUtils, Config, FileSystemUtils, ModuleManager, NgModule } from '@src';
3+
import { ArrayUtils, Config, FileSystemUtils, ModuleManager } from '@src';
44
import { CommandBase } from '@commands';
5-
import { Project } from '@model';
5+
import { NgModule, Project } from '@model';
66

77
export class ModulesToMarkdown extends CommandBase {
88
private config = new Config();

src/commands/showComponentHierarchy.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ShowHierarchyBase } from './showHierarchyBase';
2-
import { Component, ComponentManager } from '@src';
3-
import { ArrowType, Edge, GraphState, Node, NodeType } from '@model';
2+
import { ComponentManager } from '@src';
3+
import { ArrowType, Component, Edge, GraphState, Node, NodeType } from '@model';
44
import * as fs from 'fs';
55
import * as path from 'path';
66
import * as vscode from 'vscode';
@@ -54,7 +54,7 @@ export class ShowComponentHierarchy extends ShowHierarchyBase {
5454
this.extensionContext.subscriptions
5555
);
5656

57-
const components = ComponentManager.findComponents(this.directoryPath);
57+
const components = ComponentManager.scanWorkspaceForComponents(this.directoryPath);
5858

5959
this.nodes = [];
6060
this.edges = [];
@@ -88,21 +88,21 @@ export class ShowComponentHierarchy extends ShowHierarchyBase {
8888
}
8989
}
9090

91-
private addNodesAndEdges(componentHash: { [selector: string]: Component; }, appendNodes: (nodeList: Node[]) => void, appendLinks: (edgeList: Edge[]) => void) {
92-
for (let selector in componentHash) {
93-
const component = componentHash[selector];
91+
private addNodesAndEdges(componentDict: { [selector: string]: Component; }, appendNodes: (nodeList: Node[]) => void, appendEdges: (edgeList: Edge[]) => void) {
92+
for (let selector in componentDict) {
93+
const component = componentDict[selector];
9494
if (component.isRoot) {
9595
this.generateDirectedGraphNodes(component.subComponents, component, true, '', appendNodes);
96-
this.generateDirectedGraphEdges(component.subComponents, selector, "", appendLinks);
96+
this.generateDirectedGraphEdges(componentDict, component.subComponents, component, "", appendEdges);
9797
}
9898
}
9999
}
100100

101101
private generateDirectedGraphNodes(components: Component[], component: Component, isRoot: boolean, parentSelector: string, appendNodes: (nodeList: Node[]) => void) {
102-
let componentFilename = component.tsFilename.replace(this.directoryPath, '.');
102+
let componentFilename = component.filename.replace(this.directoryPath, '.');
103103
componentFilename = componentFilename.split('\\').join('/');
104104
const componentPosition = this.graphState.nodePositions[component.selector];
105-
appendNodes([new Node(component.selector, component.selector, componentFilename, component.tsFilename, isRoot, isRoot ? NodeType.rootNode : NodeType.component, componentPosition)]);
105+
appendNodes([new Node(component.selector, component.selector, componentFilename, component.filename, isRoot, isRoot ? NodeType.rootNode : NodeType.component, componentPosition)]);
106106
if (components.length > 0) {
107107
components.forEach((subComponent) => {
108108
if (parentSelector !== subComponent.selector) {
@@ -112,14 +112,20 @@ export class ShowComponentHierarchy extends ShowHierarchyBase {
112112
}
113113
}
114114

115-
private generateDirectedGraphEdges(subComponents: Component[], selector: string, parentSelector: string, appendLinks: (edgeList: Edge[]) => void) {
115+
private generateDirectedGraphEdges(componentDict: { [selector: string]: Component; }, subComponents: Component[], currentComponent: Component, parentSelector: string, appendEdges: (edgeList: Edge[]) => void) {
116116
if (parentSelector.length > 0) {
117117
const id = this.edges.length;
118-
appendLinks([new Edge(id.toString(), parentSelector, selector, ArrowType.uses)]);
118+
appendEdges([new Edge(id.toString(), parentSelector, currentComponent.selector, ArrowType.uses)]);
119119
}
120-
if (subComponents.length > 0 && selector !== parentSelector) {
120+
if (currentComponent.componentsRoutingToThis !== undefined && currentComponent.componentsRoutingToThis.length > 0) {
121+
currentComponent.componentsRoutingToThis.forEach(componentRoutingToThis => {
122+
const id = this.edges.length;
123+
appendEdges([new Edge(id.toString(), componentRoutingToThis.selector, currentComponent.selector, ArrowType.route)]);
124+
});
125+
}
126+
if (subComponents.length > 0 && currentComponent.selector !== parentSelector) {
121127
subComponents.forEach((subComponent) => {
122-
this.generateDirectedGraphEdges(subComponent.subComponents, subComponent.selector, selector, appendLinks);
128+
this.generateDirectedGraphEdges(componentDict, subComponent.subComponents, subComponent, currentComponent.selector, appendEdges);
123129
});
124130
}
125131
}

0 commit comments

Comments
 (0)