@girardelli/architect 1.2.0 → 1.3.0
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/README.md +3 -3
- package/dist/html-reporter.d.ts +18 -2
- package/dist/html-reporter.d.ts.map +1 -1
- package/dist/html-reporter.js +366 -32
- package/dist/html-reporter.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -7
- package/dist/index.js.map +1 -1
- package/dist/scorer.d.ts +12 -0
- package/dist/scorer.d.ts.map +1 -1
- package/dist/scorer.js +61 -17
- package/dist/scorer.js.map +1 -1
- package/package.json +1 -1
- package/src/html-reporter.ts +380 -33
- package/src/index.ts +69 -8
- package/src/scorer.ts +63 -17
package/README.md
CHANGED
|
@@ -250,9 +250,9 @@ npm run lint # ESLint
|
|
|
250
250
|
**Camilo Girardelli**
|
|
251
251
|
IEEE Senior Member | Senior Software Architect | CTO at Girardelli Tecnologia
|
|
252
252
|
|
|
253
|
-
- GitHub: [@
|
|
254
|
-
- LinkedIn: [Camilo Girardelli](https://www.linkedin.com/in/
|
|
255
|
-
- Company: [Girardelli Tecnologia](https://
|
|
253
|
+
- GitHub: [@camilooscargbaptista](https://github.com/camilooscargbaptista)
|
|
254
|
+
- LinkedIn: [Camilo Girardelli](https://www.linkedin.com/in/camilooscargirardellibaptista/)
|
|
255
|
+
- Company: [Girardelli Tecnologia](https://www.girardellitecnologia.com)
|
|
256
256
|
|
|
257
257
|
## Contributing
|
|
258
258
|
|
package/dist/html-reporter.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AnalysisReport } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Generates premium visual HTML reports from AnalysisReport.
|
|
4
|
+
* Features: D3.js force graph, bubble charts, radar chart, animated counters.
|
|
4
5
|
*/
|
|
5
6
|
export declare class HtmlReportGenerator {
|
|
6
7
|
generateHtml(report: AnalysisReport): string;
|
|
@@ -12,12 +13,27 @@ export declare class HtmlReportGenerator {
|
|
|
12
13
|
private groupSuggestions;
|
|
13
14
|
private renderHeader;
|
|
14
15
|
private renderScoreHero;
|
|
16
|
+
/**
|
|
17
|
+
* Radar chart for the 4 score components
|
|
18
|
+
*/
|
|
19
|
+
private renderRadarChart;
|
|
15
20
|
private renderStats;
|
|
16
21
|
private renderLayers;
|
|
22
|
+
/**
|
|
23
|
+
* Interactive D3.js force-directed dependency graph
|
|
24
|
+
*/
|
|
25
|
+
private renderDependencyGraph;
|
|
26
|
+
/**
|
|
27
|
+
* Bubble chart for anti-patterns — bigger = more severe
|
|
28
|
+
*/
|
|
29
|
+
private renderAntiPatternBubbles;
|
|
17
30
|
private renderAntiPatterns;
|
|
18
|
-
private renderDiagram;
|
|
19
31
|
private renderSuggestions;
|
|
20
32
|
private renderFooter;
|
|
33
|
+
/**
|
|
34
|
+
* All JavaScript for D3.js visualizations, animated counters, and radar chart
|
|
35
|
+
*/
|
|
36
|
+
private getScripts;
|
|
21
37
|
private getStyles;
|
|
22
38
|
}
|
|
23
39
|
//# sourceMappingURL=html-reporter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-reporter.d.ts","sourceRoot":"","sources":["../src/html-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"html-reporter.d.ts","sourceRoot":"","sources":["../src/html-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IA+B5C,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,eAAe;IAwCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,YAAY;IA4BpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+C7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoChC,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,UAAU;IA4PlB,OAAO,CAAC,SAAS;CAqLlB"}
|
package/dist/html-reporter.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Generates premium visual HTML reports from AnalysisReport.
|
|
3
|
+
* Features: D3.js force graph, bubble charts, radar chart, animated counters.
|
|
3
4
|
*/
|
|
4
5
|
export class HtmlReportGenerator {
|
|
5
6
|
generateHtml(report) {
|
|
@@ -12,22 +13,22 @@ export class HtmlReportGenerator {
|
|
|
12
13
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
13
14
|
<title>Architect Report — ${this.escapeHtml(report.projectInfo.name)}</title>
|
|
14
15
|
${this.getStyles()}
|
|
15
|
-
<script src="https://cdn.jsdelivr.net/npm/
|
|
16
|
+
<script src="https://cdn.jsdelivr.net/npm/d3@7"><\/script>
|
|
16
17
|
</head>
|
|
17
18
|
<body>
|
|
18
19
|
${this.renderHeader(report)}
|
|
19
20
|
<div class="container">
|
|
20
21
|
${this.renderScoreHero(report)}
|
|
22
|
+
${this.renderRadarChart(report)}
|
|
21
23
|
${this.renderStats(report)}
|
|
22
24
|
${this.renderLayers(report)}
|
|
25
|
+
${this.renderDependencyGraph(report)}
|
|
26
|
+
${this.renderAntiPatternBubbles(report, grouped)}
|
|
23
27
|
${this.renderAntiPatterns(report, grouped)}
|
|
24
|
-
${this.renderDiagram(report)}
|
|
25
28
|
${this.renderSuggestions(sugGrouped)}
|
|
26
29
|
</div>
|
|
27
30
|
${this.renderFooter()}
|
|
28
|
-
|
|
29
|
-
mermaid.initialize({ theme: 'default', startOnLoad: true });
|
|
30
|
-
<\/script>
|
|
31
|
+
${this.getScripts(report)}
|
|
31
32
|
</body>
|
|
32
33
|
</html>`;
|
|
33
34
|
}
|
|
@@ -132,7 +133,7 @@ ${this.renderFooter()}
|
|
|
132
133
|
stroke-dashoffset="${offset}" />
|
|
133
134
|
</svg>
|
|
134
135
|
<div class="score-value">
|
|
135
|
-
<div class="number" style="color: ${this.scoreColor(overall)}"
|
|
136
|
+
<div class="number score-counter" data-target="${overall}" style="color: ${this.scoreColor(overall)}">0</div>
|
|
136
137
|
<div class="label">/ 100</div>
|
|
137
138
|
<div class="grade">${this.scoreLabel(overall)}</div>
|
|
138
139
|
</div>
|
|
@@ -140,25 +141,36 @@ ${this.renderFooter()}
|
|
|
140
141
|
<div class="score-breakdown">
|
|
141
142
|
${breakdownItems}
|
|
142
143
|
</div>
|
|
144
|
+
</div>`;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Radar chart for the 4 score components
|
|
148
|
+
*/
|
|
149
|
+
renderRadarChart(report) {
|
|
150
|
+
const entries = Object.entries(report.score.breakdown);
|
|
151
|
+
return `
|
|
152
|
+
<h2 class="section-title">🎯 Health Radar</h2>
|
|
153
|
+
<div class="card" style="display: flex; justify-content: center;">
|
|
154
|
+
<svg id="radar-chart" width="350" height="350" viewBox="0 0 350 350"></svg>
|
|
143
155
|
</div>`;
|
|
144
156
|
}
|
|
145
157
|
renderStats(report) {
|
|
146
158
|
return `
|
|
147
159
|
<div class="stats-grid">
|
|
148
160
|
<div class="stat-card">
|
|
149
|
-
<div class="value"
|
|
161
|
+
<div class="value stat-counter" data-target="${report.projectInfo.totalFiles}">0</div>
|
|
150
162
|
<div class="label">Files Scanned</div>
|
|
151
163
|
</div>
|
|
152
164
|
<div class="stat-card">
|
|
153
|
-
<div class="value"
|
|
165
|
+
<div class="value stat-counter" data-target="${report.projectInfo.totalLines}">0</div>
|
|
154
166
|
<div class="label">Lines of Code</div>
|
|
155
167
|
</div>
|
|
156
168
|
<div class="stat-card">
|
|
157
|
-
<div class="value"
|
|
169
|
+
<div class="value stat-counter" data-target="${report.antiPatterns.length}">0</div>
|
|
158
170
|
<div class="label">Anti-Patterns</div>
|
|
159
171
|
</div>
|
|
160
172
|
<div class="stat-card">
|
|
161
|
-
<div class="value"
|
|
173
|
+
<div class="value stat-counter" data-target="${report.dependencyGraph.edges.length}">0</div>
|
|
162
174
|
<div class="label">Dependencies</div>
|
|
163
175
|
</div>
|
|
164
176
|
</div>`;
|
|
@@ -188,7 +200,55 @@ ${this.renderFooter()}
|
|
|
188
200
|
<h2 class="section-title">📐 Architectural Layers</h2>
|
|
189
201
|
<div class="layers-grid">${cards}</div>`;
|
|
190
202
|
}
|
|
191
|
-
|
|
203
|
+
/**
|
|
204
|
+
* Interactive D3.js force-directed dependency graph
|
|
205
|
+
*/
|
|
206
|
+
renderDependencyGraph(report) {
|
|
207
|
+
if (report.dependencyGraph.edges.length === 0)
|
|
208
|
+
return '';
|
|
209
|
+
// Build node data with connection counts
|
|
210
|
+
const connectionCount = {};
|
|
211
|
+
for (const edge of report.dependencyGraph.edges) {
|
|
212
|
+
connectionCount[edge.from] = (connectionCount[edge.from] || 0) + 1;
|
|
213
|
+
connectionCount[edge.to] = (connectionCount[edge.to] || 0) + 1;
|
|
214
|
+
}
|
|
215
|
+
const layerMap = {};
|
|
216
|
+
for (const layer of report.layers) {
|
|
217
|
+
for (const file of layer.files) {
|
|
218
|
+
layerMap[file] = layer.name;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const nodes = report.dependencyGraph.nodes.map(n => ({
|
|
222
|
+
id: n,
|
|
223
|
+
name: n.split('/').pop() || n,
|
|
224
|
+
connections: connectionCount[n] || 0,
|
|
225
|
+
layer: layerMap[n] || 'Other',
|
|
226
|
+
}));
|
|
227
|
+
const links = report.dependencyGraph.edges.map(e => ({
|
|
228
|
+
source: e.from,
|
|
229
|
+
target: e.to,
|
|
230
|
+
}));
|
|
231
|
+
return `
|
|
232
|
+
<h2 class="section-title">🔗 Dependency Graph</h2>
|
|
233
|
+
<div class="card graph-card">
|
|
234
|
+
<div class="graph-legend">
|
|
235
|
+
<span class="legend-item"><span class="legend-dot" style="background: #ec4899"></span> API</span>
|
|
236
|
+
<span class="legend-item"><span class="legend-dot" style="background: #3b82f6"></span> Service</span>
|
|
237
|
+
<span class="legend-item"><span class="legend-dot" style="background: #10b981"></span> Data</span>
|
|
238
|
+
<span class="legend-item"><span class="legend-dot" style="background: #f59e0b"></span> UI</span>
|
|
239
|
+
<span class="legend-item"><span class="legend-dot" style="background: #8b5cf6"></span> Infra</span>
|
|
240
|
+
<span class="legend-item"><span class="legend-dot" style="background: #64748b"></span> Other</span>
|
|
241
|
+
</div>
|
|
242
|
+
<div id="dep-graph" style="width:100%; min-height:400px;"></div>
|
|
243
|
+
<div class="graph-hint">🖱️ Drag nodes to explore • Node size = number of connections</div>
|
|
244
|
+
</div>
|
|
245
|
+
<script type="application/json" id="graph-nodes">${JSON.stringify(nodes)}<\/script>
|
|
246
|
+
<script type="application/json" id="graph-links">${JSON.stringify(links)}<\/script>`;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Bubble chart for anti-patterns — bigger = more severe
|
|
250
|
+
*/
|
|
251
|
+
renderAntiPatternBubbles(report, grouped) {
|
|
192
252
|
if (report.antiPatterns.length === 0) {
|
|
193
253
|
return `
|
|
194
254
|
<h2 class="section-title">✅ Anti-Patterns</h2>
|
|
@@ -196,6 +256,29 @@ ${this.renderFooter()}
|
|
|
196
256
|
<p>No significant anti-patterns detected. Excellent architecture!</p>
|
|
197
257
|
</div>`;
|
|
198
258
|
}
|
|
259
|
+
const severityWeight = {
|
|
260
|
+
CRITICAL: 80, HIGH: 60, MEDIUM: 40, LOW: 25,
|
|
261
|
+
};
|
|
262
|
+
const severityColor = {
|
|
263
|
+
CRITICAL: '#ef4444', HIGH: '#f59e0b', MEDIUM: '#60a5fa', LOW: '#22c55e',
|
|
264
|
+
};
|
|
265
|
+
const bubbles = Object.entries(grouped).map(([name, data]) => ({
|
|
266
|
+
name,
|
|
267
|
+
count: data.count,
|
|
268
|
+
severity: data.severity,
|
|
269
|
+
radius: (severityWeight[data.severity] || 30) + data.count * 8,
|
|
270
|
+
color: severityColor[data.severity] || '#64748b',
|
|
271
|
+
}));
|
|
272
|
+
return `
|
|
273
|
+
<h2 class="section-title">🫧 Anti-Pattern Impact Map</h2>
|
|
274
|
+
<div class="card" style="display:flex; justify-content:center;">
|
|
275
|
+
<div id="bubble-chart" style="width:100%; min-height:300px;"></div>
|
|
276
|
+
</div>
|
|
277
|
+
<script type="application/json" id="bubble-data">${JSON.stringify(bubbles)}<\/script>`;
|
|
278
|
+
}
|
|
279
|
+
renderAntiPatterns(report, grouped) {
|
|
280
|
+
if (report.antiPatterns.length === 0)
|
|
281
|
+
return '';
|
|
199
282
|
const rows = Object.entries(grouped)
|
|
200
283
|
.sort((a, b) => b[1].count - a[1].count)
|
|
201
284
|
.map(([name, data]) => `
|
|
@@ -211,7 +294,7 @@ ${this.renderFooter()}
|
|
|
211
294
|
</tr>`)
|
|
212
295
|
.join('');
|
|
213
296
|
return `
|
|
214
|
-
<h2 class="section-title">⚠️ Anti-
|
|
297
|
+
<h2 class="section-title">⚠️ Anti-Pattern Details (${report.antiPatterns.length})</h2>
|
|
215
298
|
<div class="card">
|
|
216
299
|
<table>
|
|
217
300
|
<thead>
|
|
@@ -225,17 +308,6 @@ ${this.renderFooter()}
|
|
|
225
308
|
</thead>
|
|
226
309
|
<tbody>${rows}</tbody>
|
|
227
310
|
</table>
|
|
228
|
-
</div>`;
|
|
229
|
-
}
|
|
230
|
-
renderDiagram(report) {
|
|
231
|
-
if (!report.diagram.mermaid)
|
|
232
|
-
return '';
|
|
233
|
-
return `
|
|
234
|
-
<h2 class="section-title">📊 Architecture Diagram</h2>
|
|
235
|
-
<div class="card">
|
|
236
|
-
<div class="mermaid-container">
|
|
237
|
-
<pre class="mermaid">${this.escapeHtml(report.diagram.mermaid)}</pre>
|
|
238
|
-
</div>
|
|
239
311
|
</div>`;
|
|
240
312
|
}
|
|
241
313
|
renderSuggestions(suggestions) {
|
|
@@ -273,9 +345,263 @@ ${this.renderFooter()}
|
|
|
273
345
|
renderFooter() {
|
|
274
346
|
return `
|
|
275
347
|
<div class="footer">
|
|
276
|
-
<p>Generated by <a href="https://github.com/
|
|
277
|
-
<p>By <strong>Camilo Girardelli</strong> · <a href="https://
|
|
348
|
+
<p>Generated by <a href="https://github.com/camilooscargbaptista/architect">🏗️ Architect</a> — AI-powered architecture analysis</p>
|
|
349
|
+
<p>By <strong>Camilo Girardelli</strong> · <a href="https://www.girardellitecnologia.com">Girardelli Tecnologia</a></p>
|
|
278
350
|
</div>`;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* All JavaScript for D3.js visualizations, animated counters, and radar chart
|
|
354
|
+
*/
|
|
355
|
+
getScripts(report) {
|
|
356
|
+
const breakdown = report.score.breakdown;
|
|
357
|
+
return `<script>
|
|
358
|
+
// ── Animated Counters ──
|
|
359
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
360
|
+
const counters = document.querySelectorAll('.score-counter, .stat-counter');
|
|
361
|
+
const observer = new IntersectionObserver((entries) => {
|
|
362
|
+
entries.forEach(entry => {
|
|
363
|
+
if (entry.isIntersecting) {
|
|
364
|
+
const el = entry.target;
|
|
365
|
+
const target = parseInt(el.dataset.target || '0');
|
|
366
|
+
animateCounter(el, target);
|
|
367
|
+
observer.unobserve(el);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
}, { threshold: 0.5 });
|
|
371
|
+
|
|
372
|
+
counters.forEach(c => observer.observe(c));
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
function animateCounter(el, target) {
|
|
376
|
+
const duration = 1500;
|
|
377
|
+
const start = performance.now();
|
|
378
|
+
const update = (now) => {
|
|
379
|
+
const elapsed = now - start;
|
|
380
|
+
const progress = Math.min(elapsed / duration, 1);
|
|
381
|
+
const ease = 1 - Math.pow(1 - progress, 3);
|
|
382
|
+
el.textContent = Math.round(target * ease).toLocaleString();
|
|
383
|
+
if (progress < 1) requestAnimationFrame(update);
|
|
384
|
+
};
|
|
385
|
+
requestAnimationFrame(update);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// ── Radar Chart ──
|
|
389
|
+
(function() {
|
|
390
|
+
const data = [
|
|
391
|
+
{ axis: 'Modularity', value: ${breakdown.modularity} },
|
|
392
|
+
{ axis: 'Coupling', value: ${breakdown.coupling} },
|
|
393
|
+
{ axis: 'Cohesion', value: ${breakdown.cohesion} },
|
|
394
|
+
{ axis: 'Layering', value: ${breakdown.layering} },
|
|
395
|
+
];
|
|
396
|
+
|
|
397
|
+
const svg = d3.select('#radar-chart');
|
|
398
|
+
const w = 350, h = 350, cx = w/2, cy = h/2, maxR = 120;
|
|
399
|
+
const levels = 5;
|
|
400
|
+
const total = data.length;
|
|
401
|
+
const angleSlice = (Math.PI * 2) / total;
|
|
402
|
+
|
|
403
|
+
// Grid circles
|
|
404
|
+
for (let i = 1; i <= levels; i++) {
|
|
405
|
+
const r = (maxR / levels) * i;
|
|
406
|
+
svg.append('circle')
|
|
407
|
+
.attr('cx', cx).attr('cy', cy).attr('r', r)
|
|
408
|
+
.attr('fill', 'none').attr('stroke', '#334155').attr('stroke-width', 0.5)
|
|
409
|
+
.attr('stroke-dasharray', '4,4');
|
|
410
|
+
|
|
411
|
+
svg.append('text')
|
|
412
|
+
.attr('x', cx + 4).attr('y', cy - r + 4)
|
|
413
|
+
.text(Math.round(100 / levels * i))
|
|
414
|
+
.attr('fill', '#475569').attr('font-size', '10px');
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Axis lines
|
|
418
|
+
data.forEach((d, i) => {
|
|
419
|
+
const angle = angleSlice * i - Math.PI/2;
|
|
420
|
+
const x = cx + Math.cos(angle) * (maxR + 20);
|
|
421
|
+
const y = cy + Math.sin(angle) * (maxR + 20);
|
|
422
|
+
|
|
423
|
+
svg.append('line')
|
|
424
|
+
.attr('x1', cx).attr('y1', cy).attr('x2', cx + Math.cos(angle) * maxR).attr('y2', cy + Math.sin(angle) * maxR)
|
|
425
|
+
.attr('stroke', '#334155').attr('stroke-width', 1);
|
|
426
|
+
|
|
427
|
+
svg.append('text')
|
|
428
|
+
.attr('x', x).attr('y', y)
|
|
429
|
+
.attr('text-anchor', 'middle').attr('dominant-baseline', 'middle')
|
|
430
|
+
.attr('fill', '#94a3b8').attr('font-size', '12px').attr('font-weight', '600')
|
|
431
|
+
.text(d.axis);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
// Data polygon
|
|
435
|
+
const points = data.map((d, i) => {
|
|
436
|
+
const angle = angleSlice * i - Math.PI/2;
|
|
437
|
+
const r = (d.value / 100) * maxR;
|
|
438
|
+
return [cx + Math.cos(angle) * r, cy + Math.sin(angle) * r];
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
const pointsStr = points.map(p => p.join(',')).join(' ');
|
|
442
|
+
|
|
443
|
+
svg.append('polygon')
|
|
444
|
+
.attr('points', pointsStr)
|
|
445
|
+
.attr('fill', 'rgba(129, 140, 248, 0.15)')
|
|
446
|
+
.attr('stroke', '#818cf8').attr('stroke-width', 2);
|
|
447
|
+
|
|
448
|
+
// Data dots
|
|
449
|
+
points.forEach((p, i) => {
|
|
450
|
+
const color = data[i].value >= 70 ? '#22c55e' : data[i].value >= 50 ? '#f59e0b' : '#ef4444';
|
|
451
|
+
svg.append('circle')
|
|
452
|
+
.attr('cx', p[0]).attr('cy', p[1]).attr('r', 5)
|
|
453
|
+
.attr('fill', color).attr('stroke', '#0f172a').attr('stroke-width', 2);
|
|
454
|
+
|
|
455
|
+
svg.append('text')
|
|
456
|
+
.attr('x', p[0]).attr('y', p[1] - 12)
|
|
457
|
+
.attr('text-anchor', 'middle')
|
|
458
|
+
.attr('fill', color).attr('font-size', '12px').attr('font-weight', '700')
|
|
459
|
+
.text(data[i].value);
|
|
460
|
+
});
|
|
461
|
+
})();
|
|
462
|
+
|
|
463
|
+
// ── D3 Force Dependency Graph ──
|
|
464
|
+
(function() {
|
|
465
|
+
const nodesEl = document.getElementById('graph-nodes');
|
|
466
|
+
const linksEl = document.getElementById('graph-links');
|
|
467
|
+
if (!nodesEl || !linksEl) return;
|
|
468
|
+
|
|
469
|
+
const nodes = JSON.parse(nodesEl.textContent || '[]');
|
|
470
|
+
const links = JSON.parse(linksEl.textContent || '[]');
|
|
471
|
+
if (nodes.length === 0) return;
|
|
472
|
+
|
|
473
|
+
const container = document.getElementById('dep-graph');
|
|
474
|
+
const width = container.clientWidth || 800;
|
|
475
|
+
const height = Math.max(400, nodes.length * 25);
|
|
476
|
+
container.style.height = height + 'px';
|
|
477
|
+
|
|
478
|
+
const layerColors = {
|
|
479
|
+
API: '#ec4899', Service: '#3b82f6', Data: '#10b981',
|
|
480
|
+
UI: '#f59e0b', Infrastructure: '#8b5cf6', Other: '#64748b',
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
const svg = d3.select('#dep-graph').append('svg')
|
|
484
|
+
.attr('width', width).attr('height', height)
|
|
485
|
+
.attr('viewBox', [0, 0, width, height]);
|
|
486
|
+
|
|
487
|
+
// Arrow marker
|
|
488
|
+
svg.append('defs').append('marker')
|
|
489
|
+
.attr('id', 'arrowhead').attr('viewBox', '-0 -5 10 10')
|
|
490
|
+
.attr('refX', 20).attr('refY', 0).attr('orient', 'auto')
|
|
491
|
+
.attr('markerWidth', 6).attr('markerHeight', 6)
|
|
492
|
+
.append('path').attr('d', 'M 0,-5 L 10,0 L 0,5')
|
|
493
|
+
.attr('fill', '#475569');
|
|
494
|
+
|
|
495
|
+
const simulation = d3.forceSimulation(nodes)
|
|
496
|
+
.force('link', d3.forceLink(links).id(d => d.id).distance(80))
|
|
497
|
+
.force('charge', d3.forceManyBody().strength(-200))
|
|
498
|
+
.force('center', d3.forceCenter(width / 2, height / 2))
|
|
499
|
+
.force('collision', d3.forceCollide().radius(d => Math.max(d.connections * 3 + 12, 15)));
|
|
500
|
+
|
|
501
|
+
const link = svg.append('g')
|
|
502
|
+
.selectAll('line').data(links).join('line')
|
|
503
|
+
.attr('stroke', '#334155').attr('stroke-width', 1.5)
|
|
504
|
+
.attr('stroke-opacity', 0.6).attr('marker-end', 'url(#arrowhead)');
|
|
505
|
+
|
|
506
|
+
const node = svg.append('g')
|
|
507
|
+
.selectAll('g').data(nodes).join('g')
|
|
508
|
+
.call(d3.drag()
|
|
509
|
+
.on('start', (e, d) => { if (!e.active) simulation.alphaTarget(0.3).restart(); d.fx = d.x; d.fy = d.y; })
|
|
510
|
+
.on('drag', (e, d) => { d.fx = e.x; d.fy = e.y; })
|
|
511
|
+
.on('end', (e, d) => { if (!e.active) simulation.alphaTarget(0); d.fx = null; d.fy = null; })
|
|
512
|
+
);
|
|
513
|
+
|
|
514
|
+
// Node circles — size based on connections
|
|
515
|
+
node.append('circle')
|
|
516
|
+
.attr('r', d => Math.max(d.connections * 3 + 6, 8))
|
|
517
|
+
.attr('fill', d => layerColors[d.layer] || '#64748b')
|
|
518
|
+
.attr('stroke', '#0f172a').attr('stroke-width', 2)
|
|
519
|
+
.attr('opacity', 0.85);
|
|
520
|
+
|
|
521
|
+
// Node labels
|
|
522
|
+
node.append('text')
|
|
523
|
+
.text(d => d.name.replace(/\\.[^.]+$/, ''))
|
|
524
|
+
.attr('x', 0).attr('y', d => -(Math.max(d.connections * 3 + 6, 8) + 6))
|
|
525
|
+
.attr('text-anchor', 'middle')
|
|
526
|
+
.attr('fill', '#94a3b8').attr('font-size', '10px').attr('font-weight', '500');
|
|
527
|
+
|
|
528
|
+
// Tooltip on hover
|
|
529
|
+
node.append('title')
|
|
530
|
+
.text(d => d.id + '\\nConnections: ' + d.connections + '\\nLayer: ' + d.layer);
|
|
531
|
+
|
|
532
|
+
simulation.on('tick', () => {
|
|
533
|
+
link
|
|
534
|
+
.attr('x1', d => d.source.x).attr('y1', d => d.source.y)
|
|
535
|
+
.attr('x2', d => d.target.x).attr('y2', d => d.target.y);
|
|
536
|
+
node.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')');
|
|
537
|
+
});
|
|
538
|
+
})();
|
|
539
|
+
|
|
540
|
+
// ── Bubble Chart ──
|
|
541
|
+
(function() {
|
|
542
|
+
const dataEl = document.getElementById('bubble-data');
|
|
543
|
+
if (!dataEl) return;
|
|
544
|
+
|
|
545
|
+
const bubbles = JSON.parse(dataEl.textContent || '[]');
|
|
546
|
+
if (bubbles.length === 0) return;
|
|
547
|
+
|
|
548
|
+
const container = document.getElementById('bubble-chart');
|
|
549
|
+
const width = container.clientWidth || 600;
|
|
550
|
+
const height = 300;
|
|
551
|
+
|
|
552
|
+
const svg = d3.select('#bubble-chart').append('svg')
|
|
553
|
+
.attr('width', width).attr('height', height)
|
|
554
|
+
.attr('viewBox', [0, 0, width, height]);
|
|
555
|
+
|
|
556
|
+
const simulation = d3.forceSimulation(bubbles)
|
|
557
|
+
.force('charge', d3.forceManyBody().strength(5))
|
|
558
|
+
.force('center', d3.forceCenter(width / 2, height / 2))
|
|
559
|
+
.force('collision', d3.forceCollide().radius(d => d.radius + 4))
|
|
560
|
+
.stop();
|
|
561
|
+
|
|
562
|
+
for (let i = 0; i < 120; i++) simulation.tick();
|
|
563
|
+
|
|
564
|
+
const g = svg.selectAll('g').data(bubbles).join('g')
|
|
565
|
+
.attr('transform', d => 'translate(' + d.x + ',' + d.y + ')');
|
|
566
|
+
|
|
567
|
+
// Glow effect
|
|
568
|
+
g.append('circle')
|
|
569
|
+
.attr('r', d => d.radius)
|
|
570
|
+
.attr('fill', d => d.color + '20')
|
|
571
|
+
.attr('stroke', d => d.color).attr('stroke-width', 2)
|
|
572
|
+
.attr('opacity', 0)
|
|
573
|
+
.transition().duration(800).delay((d, i) => i * 200)
|
|
574
|
+
.attr('opacity', 1);
|
|
575
|
+
|
|
576
|
+
// Inner circle
|
|
577
|
+
g.append('circle')
|
|
578
|
+
.attr('r', d => d.radius * 0.7)
|
|
579
|
+
.attr('fill', d => d.color + '30')
|
|
580
|
+
.attr('opacity', 0)
|
|
581
|
+
.transition().duration(800).delay((d, i) => i * 200)
|
|
582
|
+
.attr('opacity', 1);
|
|
583
|
+
|
|
584
|
+
// Name
|
|
585
|
+
g.append('text')
|
|
586
|
+
.text(d => d.name)
|
|
587
|
+
.attr('text-anchor', 'middle').attr('dy', '-0.3em')
|
|
588
|
+
.attr('fill', '#e2e8f0').attr('font-size', d => Math.max(d.radius / 4, 10) + 'px')
|
|
589
|
+
.attr('font-weight', '700');
|
|
590
|
+
|
|
591
|
+
// Count badge
|
|
592
|
+
g.append('text')
|
|
593
|
+
.text(d => '×' + d.count)
|
|
594
|
+
.attr('text-anchor', 'middle').attr('dy', '1.2em')
|
|
595
|
+
.attr('fill', d => d.color).attr('font-size', d => Math.max(d.radius / 5, 9) + 'px')
|
|
596
|
+
.attr('font-weight', '600');
|
|
597
|
+
|
|
598
|
+
// Severity label
|
|
599
|
+
g.append('text')
|
|
600
|
+
.text(d => d.severity)
|
|
601
|
+
.attr('text-anchor', 'middle').attr('dy', '2.5em')
|
|
602
|
+
.attr('fill', '#64748b').attr('font-size', '9px').attr('text-transform', 'uppercase');
|
|
603
|
+
})();
|
|
604
|
+
<\/script>`;
|
|
279
605
|
}
|
|
280
606
|
getStyles() {
|
|
281
607
|
return `<style>
|
|
@@ -377,6 +703,20 @@ ${this.renderFooter()}
|
|
|
377
703
|
}
|
|
378
704
|
.success-card { border-color: #22c55e40; color: #22c55e; text-align: center; padding: 2rem; font-size: 1.1rem; }
|
|
379
705
|
|
|
706
|
+
/* ── Graph ── */
|
|
707
|
+
.graph-card { padding: 1rem; }
|
|
708
|
+
.graph-legend {
|
|
709
|
+
display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: 0.5rem;
|
|
710
|
+
justify-content: center;
|
|
711
|
+
}
|
|
712
|
+
.legend-item { display: flex; align-items: center; gap: 4px; font-size: 0.75rem; color: #94a3b8; }
|
|
713
|
+
.legend-dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
|
|
714
|
+
.graph-hint {
|
|
715
|
+
text-align: center; font-size: 0.75rem; color: #475569; margin-top: 0.5rem;
|
|
716
|
+
font-style: italic;
|
|
717
|
+
}
|
|
718
|
+
#dep-graph svg { background: rgba(0,0,0,0.2); border-radius: 12px; }
|
|
719
|
+
|
|
380
720
|
/* ── Layers Grid ── */
|
|
381
721
|
.layers-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; }
|
|
382
722
|
.layer-card {
|
|
@@ -417,11 +757,6 @@ ${this.renderFooter()}
|
|
|
417
757
|
.locations { font-size: 0.75rem; color: #64748b; }
|
|
418
758
|
.locations code { background: #0f172a; padding: 1px 4px; border-radius: 3px; font-size: 0.7rem; }
|
|
419
759
|
|
|
420
|
-
/* ── Mermaid ── */
|
|
421
|
-
.mermaid-container {
|
|
422
|
-
background: #f8fafc; border-radius: 12px; padding: 2rem; text-align: center; color: #0f172a;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
760
|
/* ── Footer ── */
|
|
426
761
|
.footer {
|
|
427
762
|
text-align: center; padding: 2rem; color: #475569; font-size: 0.85rem;
|
|
@@ -446,7 +781,6 @@ ${this.renderFooter()}
|
|
|
446
781
|
.card, .stat-card, .score-hero, .layer-card, .score-item {
|
|
447
782
|
background: white; border-color: #e2e8f0;
|
|
448
783
|
}
|
|
449
|
-
.mermaid-container { border: 1px solid #e2e8f0; }
|
|
450
784
|
}
|
|
451
785
|
</style>`;
|
|
452
786
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-reporter.js","sourceRoot":"","sources":["../src/html-reporter.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"html-reporter.js","sourceRoot":"","sources":["../src/html-reporter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IACzF,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACxG,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC,CAAC;CAC7E;AAED,cAAM,SAAU,YAAW,gBAAgB;IACnC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgE3D,OAAO,CAAC,eAAe;IA6BjB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB7C,KAAK,CACT,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAQ5D,YAAY,CAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IASpE,MAAM,CACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAQpD,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IACzF,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACxG,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC,CAAC;CAC7E;AAED,cAAM,SAAU,YAAW,gBAAgB;IACnC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgE3D,OAAO,CAAC,eAAe;IA6BjB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB7C,KAAK,CACT,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAQ5D,YAAY,CAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IASpE,MAAM,CACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAQpD,OAAO,CAAC,mBAAmB;CAiG5B;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC;AAEzC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,GACb,CAAC"}
|