@haibun/web-playwright 1.59.0 → 1.60.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/build/cycles.d.ts +4 -0
- package/build/cycles.d.ts.map +1 -0
- package/build/cycles.js +83 -0
- package/build/cycles.js.map +1 -0
- package/build/interactionSteps.d.ts +221 -0
- package/build/interactionSteps.d.ts.map +1 -0
- package/build/interactionSteps.js +515 -0
- package/build/interactionSteps.js.map +1 -0
- package/build/monitor/LogEntry.d.ts +4 -0
- package/build/monitor/LogEntry.d.ts.map +1 -0
- package/build/monitor/LogEntry.js +4 -0
- package/build/monitor/LogEntry.js.map +1 -0
- package/build/monitor/MonitorHandler.d.ts.map +1 -1
- package/build/monitor/MonitorHandler.js +24 -46
- package/build/monitor/MonitorHandler.js.map +1 -1
- package/build/monitor/artifactDisplayBase.d.ts +2 -0
- package/build/monitor/artifactDisplayBase.d.ts.map +1 -0
- package/build/monitor/artifactDisplayBase.js +2 -0
- package/build/monitor/artifactDisplayBase.js.map +1 -0
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.js +31 -0
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.js +17 -0
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.js +18 -0
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.d.ts +14 -0
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.js +69 -0
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.js.map +1 -0
- package/build/monitor/artifactDisplays/MermaidDiagram.d.ts +22 -0
- package/build/monitor/artifactDisplays/MermaidDiagram.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/MermaidDiagram.js +199 -0
- package/build/monitor/artifactDisplays/MermaidDiagram.js.map +1 -0
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.js +38 -0
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.d.ts +32 -0
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.js +258 -0
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.js.map +1 -0
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.js +19 -0
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.js +21 -0
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.js +17 -0
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/artifactDisplayBase.d.ts +20 -0
- package/build/monitor/artifactDisplays/artifactDisplayBase.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/artifactDisplayBase.js +40 -0
- package/build/monitor/artifactDisplays/artifactDisplayBase.js.map +1 -0
- package/build/monitor/artifactDisplays/htmlArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/htmlArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/htmlArtifactDisplay.js +31 -0
- package/build/monitor/artifactDisplays/htmlArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/imageArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/imageArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/imageArtifactDisplay.js +17 -0
- package/build/monitor/artifactDisplays/imageArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/jsonArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/jsonArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/jsonArtifactDisplay.js +18 -0
- package/build/monitor/artifactDisplays/jsonArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/jsonArtifactHTTPTrace.d.ts +14 -0
- package/build/monitor/artifactDisplays/jsonArtifactHTTPTrace.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/jsonArtifactHTTPTrace.js +72 -0
- package/build/monitor/artifactDisplays/jsonArtifactHTTPTrace.js.map +1 -0
- package/build/monitor/artifactDisplays/mermaidDiagram.d.ts +22 -0
- package/build/monitor/artifactDisplays/mermaidDiagram.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/mermaidDiagram.js +199 -0
- package/build/monitor/artifactDisplays/mermaidDiagram.js.map +1 -0
- package/build/monitor/artifactDisplays/resolvedFeaturesArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/resolvedFeaturesArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/resolvedFeaturesArtifactDisplay.js +36 -0
- package/build/monitor/artifactDisplays/resolvedFeaturesArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/sequenceDiagramGenerator.d.ts +32 -0
- package/build/monitor/artifactDisplays/sequenceDiagramGenerator.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/sequenceDiagramGenerator.js +299 -0
- package/build/monitor/artifactDisplays/sequenceDiagramGenerator.js.map +1 -0
- package/build/monitor/artifactDisplays/speechArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/speechArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/speechArtifactDisplay.js +38 -0
- package/build/monitor/artifactDisplays/speechArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/videoArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/videoArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/videoArtifactDisplay.js +22 -0
- package/build/monitor/artifactDisplays/videoArtifactDisplay.js.map +1 -0
- package/build/monitor/artifactDisplays/videoStartArtifactDisplay.d.ts +9 -0
- package/build/monitor/artifactDisplays/videoStartArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/artifactDisplays/videoStartArtifactDisplay.js +30 -0
- package/build/monitor/artifactDisplays/videoStartArtifactDisplay.js.map +1 -0
- package/build/monitor/graph/feature-bases.d.ts +5 -0
- package/build/monitor/graph/feature-bases.d.ts.map +1 -0
- package/build/monitor/graph/feature-bases.js +36 -0
- package/build/monitor/graph/feature-bases.js.map +1 -0
- package/build/monitor/graph/generateMermaidGraph.d.ts +4 -0
- package/build/monitor/graph/generateMermaidGraph.d.ts.map +1 -0
- package/build/monitor/graph/generateMermaidGraph.js +142 -0
- package/build/monitor/graph/generateMermaidGraph.js.map +1 -0
- package/build/monitor/graph/graphUtils.d.ts +3 -0
- package/build/monitor/graph/graphUtils.d.ts.map +1 -0
- package/build/monitor/graph/graphUtils.js +16 -0
- package/build/monitor/graph/graphUtils.js.map +1 -0
- package/build/monitor/graph/mermaidGraphLinks.d.ts +3 -0
- package/build/monitor/graph/mermaidGraphLinks.d.ts.map +1 -0
- package/build/monitor/graph/mermaidGraphLinks.js +31 -0
- package/build/monitor/graph/mermaidGraphLinks.js.map +1 -0
- package/build/monitor/htmlArtifactDisplay.d.ts +2 -0
- package/build/monitor/htmlArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/htmlArtifactDisplay.js +2 -0
- package/build/monitor/htmlArtifactDisplay.js.map +1 -0
- package/build/monitor/imageArtifactDisplay.d.ts +2 -0
- package/build/monitor/imageArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/imageArtifactDisplay.js +2 -0
- package/build/monitor/imageArtifactDisplay.js.map +1 -0
- package/build/monitor/jsonArtifactDisplay.d.ts +2 -0
- package/build/monitor/jsonArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/jsonArtifactDisplay.js +2 -0
- package/build/monitor/jsonArtifactDisplay.js.map +1 -0
- package/build/monitor/jsonArtifactHTTPTrace.d.ts +2 -0
- package/build/monitor/jsonArtifactHTTPTrace.d.ts.map +1 -0
- package/build/monitor/jsonArtifactHTTPTrace.js +2 -0
- package/build/monitor/jsonArtifactHTTPTrace.js.map +1 -0
- package/build/monitor/messages.d.ts +9 -21
- package/build/monitor/messages.d.ts.map +1 -1
- package/build/monitor/messages.js +83 -216
- package/build/monitor/messages.js.map +1 -1
- package/build/monitor/monitor.d.ts +9 -4
- package/build/monitor/monitor.d.ts.map +1 -1
- package/build/monitor/monitor.js +8 -18
- package/build/monitor/monitor.js.map +1 -1
- package/build/monitor/resolvedFeaturesArtifactDisplay.d.ts +2 -0
- package/build/monitor/resolvedFeaturesArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/resolvedFeaturesArtifactDisplay.js +2 -0
- package/build/monitor/resolvedFeaturesArtifactDisplay.js.map +1 -0
- package/build/monitor/sequenceDiagramGenerator.d.ts +32 -0
- package/build/monitor/sequenceDiagramGenerator.d.ts.map +1 -0
- package/build/monitor/sequenceDiagramGenerator.js +299 -0
- package/build/monitor/sequenceDiagramGenerator.js.map +1 -0
- package/build/monitor/speechArtifactDisplay.d.ts +2 -0
- package/build/monitor/speechArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/speechArtifactDisplay.js +2 -0
- package/build/monitor/speechArtifactDisplay.js.map +1 -0
- package/build/monitor/test-utils.d.ts +9 -0
- package/build/monitor/test-utils.d.ts.map +1 -0
- package/build/monitor/test-utils.js +70 -0
- package/build/monitor/test-utils.js.map +1 -0
- package/build/monitor/videoArtifactDisplay.d.ts +2 -0
- package/build/monitor/videoArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/videoArtifactDisplay.js +2 -0
- package/build/monitor/videoArtifactDisplay.js.map +1 -0
- package/build/monitor/videoStartArtifactDisplay.d.ts +2 -0
- package/build/monitor/videoStartArtifactDisplay.d.ts.map +1 -0
- package/build/monitor/videoStartArtifactDisplay.js +2 -0
- package/build/monitor/videoStartArtifactDisplay.js.map +1 -0
- package/build/web-playwright.d.ts +78 -77
- package/build/web-playwright.d.ts.map +1 -1
- package/build/web-playwright.js +12 -571
- package/build/web-playwright.js.map +1 -1
- package/package.json +9 -5
- package/web/monitor.html +261 -260
- package/build/monitor/monitorHandler.d.ts +0 -16
- package/build/monitor/monitorHandler.d.ts.map +0 -1
- package/build/monitor/monitorHandler.js +0 -108
- package/build/monitor/monitorHandler.js.map +0 -1
- package/build/monitor/vite.config.d.ts +0 -4
- package/build/monitor/vite.config.d.ts.map +0 -1
- package/build/monitor/vite.config.js +0 -91
- package/build/monitor/vite.config.js.map +0 -1
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import mermaid from 'mermaid';
|
|
2
|
+
import { shortenURI } from '@haibun/core/build/lib/util/index.js';
|
|
3
|
+
// Helper function for sanitization
|
|
4
|
+
const sanitizeMermaidContent = (message) => {
|
|
5
|
+
let sanitized = message.replace(/"/g, "'"); // Replace double quotes
|
|
6
|
+
// IMPORTANT: Escape semicolon FIRST to avoid breaking other entities
|
|
7
|
+
sanitized = sanitized.replace(/;/g, '#59;');
|
|
8
|
+
sanitized = sanitized.replace(/\(/g, '#40;');
|
|
9
|
+
sanitized = sanitized.replace(/\)/g, '#41;');
|
|
10
|
+
sanitized = sanitized.replace(/,/g, '#44;');
|
|
11
|
+
return sanitized;
|
|
12
|
+
};
|
|
13
|
+
const jsonFilters = {
|
|
14
|
+
request: {
|
|
15
|
+
method: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
|
|
16
|
+
accept: ['application/json'],
|
|
17
|
+
},
|
|
18
|
+
response: {
|
|
19
|
+
type: ['application/json'],
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export class SequenceDiagramGenerator {
|
|
23
|
+
needsUpdate = true; // Start with true, assume an update is needed initially
|
|
24
|
+
diagramLines = ['sequenceDiagram'];
|
|
25
|
+
pageNames = {};
|
|
26
|
+
pageCounter = 1;
|
|
27
|
+
participantAdded = {};
|
|
28
|
+
mermaidContainerId;
|
|
29
|
+
parentElement;
|
|
30
|
+
currentDiagramString = ''; // Store the last successfully rendered/generated diagram
|
|
31
|
+
constructor(id, parentElement) {
|
|
32
|
+
this.mermaidContainerId = `mermaid-container-${id}`;
|
|
33
|
+
this.parentElement = parentElement;
|
|
34
|
+
this.ensureMermaidContainer();
|
|
35
|
+
this.currentDiagramString = this.buildDiagramString(); // Initialize with empty diagram
|
|
36
|
+
}
|
|
37
|
+
ensureMermaidContainer() {
|
|
38
|
+
let container = this.parentElement.querySelector(`#${this.mermaidContainerId}`);
|
|
39
|
+
if (!container) {
|
|
40
|
+
container = document.createElement('div');
|
|
41
|
+
container.id = this.mermaidContainerId;
|
|
42
|
+
container.className = 'mermaid'; // Add class for mermaid to target
|
|
43
|
+
this.parentElement.appendChild(container);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Add participant declaration if not already added
|
|
47
|
+
addParticipant(alias, name) {
|
|
48
|
+
if (!this.participantAdded[alias]) {
|
|
49
|
+
let insertIndex = 1;
|
|
50
|
+
for (let i = this.diagramLines.length - 1; i >= 1; i--) {
|
|
51
|
+
if (this.diagramLines[i].startsWith('participant ')) {
|
|
52
|
+
insertIndex = i + 1;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.diagramLines.splice(insertIndex, 0, `participant ${alias} as ${name}`);
|
|
57
|
+
this.participantAdded[alias] = true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
resetDiagramState() {
|
|
61
|
+
this.diagramLines = ['sequenceDiagram'];
|
|
62
|
+
this.pageNames = {};
|
|
63
|
+
this.pageCounter = 1;
|
|
64
|
+
this.participantAdded = {};
|
|
65
|
+
// No: this.needsUpdate = true; // Don't set here, compare diagram strings later
|
|
66
|
+
}
|
|
67
|
+
buildDiagramString() {
|
|
68
|
+
if (this.diagramLines.length <= 1) {
|
|
69
|
+
return 'sequenceDiagram'; // Canonical empty diagram
|
|
70
|
+
}
|
|
71
|
+
return this.diagramLines.join("\n");
|
|
72
|
+
}
|
|
73
|
+
generateDiagramFromHistory() {
|
|
74
|
+
// const oldDiagramString = this.buildDiagramString(); // Not needed with currentDiagramString logic
|
|
75
|
+
this.resetDiagramState(); // Resets diagramLines
|
|
76
|
+
if (window.haibunLogData) {
|
|
77
|
+
const httpTraceEvents = window.haibunLogData.filter(entry => entry.messageContext?.artifact?.artifactType === 'json/http/trace' &&
|
|
78
|
+
entry.messageContext.artifact.httpEvent !== 'route');
|
|
79
|
+
for (const logEntry of httpTraceEvents) {
|
|
80
|
+
// Ensure messageContext and artifact are defined before trying to cast and access httpEvent
|
|
81
|
+
if (logEntry.messageContext && logEntry.messageContext.artifact) {
|
|
82
|
+
const artifact = logEntry.messageContext.artifact;
|
|
83
|
+
if (artifact && artifact.trace && typeof artifact.trace === 'object') {
|
|
84
|
+
this.processSingleEvent(artifact.trace, artifact.httpEvent);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// const newDiagramString = this.buildDiagramString(); // Not needed with currentDiagramString logic
|
|
90
|
+
// Revised logic for needsUpdate:
|
|
91
|
+
// processSingleEvent will set it to true if it adds anything.
|
|
92
|
+
// Here, we compare the generated diagram with the *last rendered* one.
|
|
93
|
+
const finalDiagram = this.buildDiagramString();
|
|
94
|
+
if (finalDiagram === this.currentDiagramString) {
|
|
95
|
+
this.needsUpdate = false; // No change from what's current (or last attempted render)
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.needsUpdate = true; // It has changed
|
|
99
|
+
}
|
|
100
|
+
// Special case: if finalDiagram is empty and currentDiagramString was also empty, it's still false.
|
|
101
|
+
// This case is covered if currentDiagramString was 'sequenceDiagram' and finalDiagram is also 'sequenceDiagram'.
|
|
102
|
+
// If needsUpdate was false (meaning currentDiagramString was successfully rendered or was the initial empty state)
|
|
103
|
+
// and finalDiagram is the same, it remains false.
|
|
104
|
+
}
|
|
105
|
+
// Renamed from processEvent to avoid confusion, as processEvent might imply adding a single new event
|
|
106
|
+
processSingleEvent(trace, httpEvent, filters = jsonFilters) {
|
|
107
|
+
this.needsUpdate = true; // Set flag immediately
|
|
108
|
+
const { requestingPage, requestingURL, method, status, statusText, headers } = trace;
|
|
109
|
+
// Use URL hostname as the server participant
|
|
110
|
+
let serverAlias = 'UnknownServerAlias'; // Default if URL is missing
|
|
111
|
+
let serverName = 'UnknownServer';
|
|
112
|
+
if (requestingURL) {
|
|
113
|
+
try {
|
|
114
|
+
const url = new URL(requestingURL);
|
|
115
|
+
serverName = url.hostname;
|
|
116
|
+
if (url.hostname === 'localhost' && url.port) {
|
|
117
|
+
serverName = `${url.hostname}:${url.port}`;
|
|
118
|
+
}
|
|
119
|
+
// Handle empty hostname (e.g., for about:blank)
|
|
120
|
+
if (serverName) {
|
|
121
|
+
// Alias should be fully sanitized (lowercase, no dots, colons, hyphens)
|
|
122
|
+
serverAlias = serverName.toLowerCase().replace(/[.:-]/g, '');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
serverAlias = 'sourcealias'; // For data URIs or similar with no hostname
|
|
126
|
+
serverName = 'Source';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
serverAlias = 'invalidurlalias';
|
|
131
|
+
serverName = 'InvalidURL';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
this.addParticipant(serverAlias, serverName); // serverName will have original casing and port if localhost
|
|
135
|
+
if (skipEvent(filters, httpEvent, serverName, trace)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
let pageAlias = 'UnknownPageAlias';
|
|
139
|
+
let pageParticipantName = 'UnknownPage';
|
|
140
|
+
if (requestingPage) { // requestingPage is the pageId
|
|
141
|
+
const existingAlias = this.pageNames[requestingPage];
|
|
142
|
+
if (!existingAlias) {
|
|
143
|
+
// Use requestingPage directly for alias and name if it's the first time.
|
|
144
|
+
// Alias should be sanitized, name should be original
|
|
145
|
+
pageAlias = requestingPage.toLowerCase().replace(/[.-]/g, ''); // Sanitize for alias, ensure lowercase
|
|
146
|
+
pageParticipantName = requestingPage; // Use as is for display name
|
|
147
|
+
// If still generic after sanitization (e.g. empty string if requestingPage was just '.')
|
|
148
|
+
// or if the sanitized alias is empty.
|
|
149
|
+
if (!pageAlias.trim()) {
|
|
150
|
+
pageAlias = `Page${this.pageCounter}`; // Fallback to numbered alias
|
|
151
|
+
// pageParticipantName remains `requestingPage` unless it was also problematic,
|
|
152
|
+
// but `requestingPage` itself is used as the key in `this.pageNames`
|
|
153
|
+
// so it should generally be usable as a display name.
|
|
154
|
+
// If `requestingPage` was, for example, just ".", `pageParticipantName` would be ".".
|
|
155
|
+
// Mermaid might handle this, or it might look odd.
|
|
156
|
+
// For consistency, if alias needs fallback, name might too if it was also problematic.
|
|
157
|
+
// However, the tests expect `requestingPage` to be used as the name.
|
|
158
|
+
}
|
|
159
|
+
this.pageNames[requestingPage] = pageAlias;
|
|
160
|
+
this.addParticipant(pageAlias, pageParticipantName); // pageParticipantName has original casing
|
|
161
|
+
this.pageCounter++;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
pageAlias = existingAlias;
|
|
165
|
+
const participantLine = this.diagramLines.find(line => line.startsWith(`participant ${pageAlias} as `));
|
|
166
|
+
if (participantLine) {
|
|
167
|
+
pageParticipantName = participantLine.substring(participantLine.indexOf(' as ') + 4);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
pageParticipantName = pageAlias; // Fallback
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
// Fallback if no requestingPage ID is available
|
|
176
|
+
pageAlias = 'ClientPage';
|
|
177
|
+
pageParticipantName = 'Client Page';
|
|
178
|
+
this.addParticipant(pageAlias, pageParticipantName);
|
|
179
|
+
}
|
|
180
|
+
if (method && requestingURL) {
|
|
181
|
+
const message = sanitizeMermaidContent(`${method} ${shortenURI(requestingURL)}`); // Removed boolean argument
|
|
182
|
+
this.diagramLines.push(`${pageAlias}->>${serverAlias}: ${message}`);
|
|
183
|
+
// Notes for headers
|
|
184
|
+
if (headers) {
|
|
185
|
+
if (headers.referer) {
|
|
186
|
+
const note = shortenURI(sanitizeMermaidContent(`Referer: ${headers.referer}`));
|
|
187
|
+
this.diagramLines.push(`Note right of ${pageAlias}: ${note}`);
|
|
188
|
+
}
|
|
189
|
+
if (headers["accept"]) {
|
|
190
|
+
const note = sanitizeMermaidContent(`Accept: ${headers["accept"]}`);
|
|
191
|
+
this.diagramLines.push(`Note right of ${pageAlias}: ${note}`);
|
|
192
|
+
}
|
|
193
|
+
if (headers["content-type"]) {
|
|
194
|
+
const note = sanitizeMermaidContent(`Content-type: ${headers['content-type']}`);
|
|
195
|
+
this.diagramLines.push(`Note right of ${pageAlias}: ${note}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (status) {
|
|
200
|
+
const message = sanitizeMermaidContent(`${status} ${statusText || ''}`);
|
|
201
|
+
this.diagramLines.push(`${serverAlias}-->>${pageAlias}: ${message}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
getDiagram() {
|
|
205
|
+
return this.buildDiagramString();
|
|
206
|
+
}
|
|
207
|
+
// Getter for testing purposes
|
|
208
|
+
getNeedsUpdate() {
|
|
209
|
+
return this.needsUpdate;
|
|
210
|
+
}
|
|
211
|
+
// Setter for testing purposes, to simulate rendering having occurred.
|
|
212
|
+
setNeedsUpdate(value) {
|
|
213
|
+
this.needsUpdate = value;
|
|
214
|
+
}
|
|
215
|
+
async update() {
|
|
216
|
+
this.generateDiagramFromHistory(); // This will set needsUpdate based on comparison with currentDiagramString
|
|
217
|
+
const mermaidContainer = this.parentElement.querySelector(`#${this.mermaidContainerId}`);
|
|
218
|
+
if (!mermaidContainer) {
|
|
219
|
+
console.error("Mermaid container not found for ID:", this.mermaidContainerId);
|
|
220
|
+
// needsUpdate might be true, but we can't render. It should remain true.
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
// Only update the DOM and render if necessary
|
|
224
|
+
// Also check if the container is empty but an update is needed (e.g. first run, or diagram changed to empty)
|
|
225
|
+
if (!this.needsUpdate && mermaidContainer.querySelector('svg')) {
|
|
226
|
+
return; // Already rendered and no update needed
|
|
227
|
+
}
|
|
228
|
+
const diagramToRender = this.getDiagram();
|
|
229
|
+
try {
|
|
230
|
+
mermaid.initialize({ maxTextSize: 900000, startOnLoad: false }); // Added startOnLoad: false
|
|
231
|
+
mermaidContainer.innerHTML = '';
|
|
232
|
+
const insert = `<pre class="mermaid">${diagramToRender}</pre>`;
|
|
233
|
+
mermaidContainer.insertAdjacentHTML('beforeend', insert);
|
|
234
|
+
const mermaidElement = mermaidContainer.querySelector('.mermaid');
|
|
235
|
+
if (mermaidElement) {
|
|
236
|
+
await mermaid.run({ nodes: [mermaidElement] });
|
|
237
|
+
console.log("Mermaid diagram rendered.");
|
|
238
|
+
this.currentDiagramString = diagramToRender; // Update current string after successful render
|
|
239
|
+
this.needsUpdate = false;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
console.error("Mermaid pre element not found after insert.");
|
|
243
|
+
mermaidContainer.innerHTML = `<pre>Error: Could not find .mermaid element for rendering.</pre>`;
|
|
244
|
+
// needsUpdate remains true as render failed to initiate
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (e) {
|
|
248
|
+
console.error("Failed Mermaid diagram definition:\\\\n", diagramToRender);
|
|
249
|
+
console.error("Error rendering Mermaid diagram:", e);
|
|
250
|
+
const detailedError = (typeof e === 'object' && e !== null && 'str' in e) ? e.str : null;
|
|
251
|
+
const errorMessage = detailedError || (e instanceof Error ? e.message : String(e));
|
|
252
|
+
mermaidContainer.innerHTML = `<pre>Error rendering Mermaid diagram:\\\\n\\\\n${errorMessage}\\\\n\\\\n--- Diagram Definition ---\\n${diagramToRender}</pre>`;
|
|
253
|
+
// Even on error, we consider this "render attempt" complete.
|
|
254
|
+
// Setting currentDiagramString to the one that failed, and needsUpdate to false prevents re-looping on a bad diagram.
|
|
255
|
+
this.currentDiagramString = diagramToRender;
|
|
256
|
+
this.needsUpdate = false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
export function skipEvent(filters, httpEvent, serverName, { requestingURL, headers }) {
|
|
261
|
+
if (!serverName) {
|
|
262
|
+
// console.info('No server name found, skipping result.');
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
if (requestingURL === 'about:blank') {
|
|
266
|
+
// console.info('Requesting URL is about:blank, skipping result.');
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
if (httpEvent === 'request') {
|
|
270
|
+
if (headers && headers.accept) {
|
|
271
|
+
const acceptHeader = headers.accept;
|
|
272
|
+
if (!filters.request.accept.some(filterValue => acceptHeader.includes(filterValue))) {
|
|
273
|
+
// console.info('qx', acceptHeader, filters.request.accept);
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// console.info('qY', acceptHeader, filters.request.accept);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else if (httpEvent === 'response') {
|
|
282
|
+
if (headers && headers['content-type']) {
|
|
283
|
+
const contentTypeHeader = headers['content-type'];
|
|
284
|
+
if (!filters.response.type.some(filterValue => contentTypeHeader.includes(filterValue))) {
|
|
285
|
+
// console.info('px', contentTypeHeader);
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// console.info('pY', contentTypeHeader);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
console.warn(`Unknown HTTP event type: ${httpEvent}`);
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=sequenceDiagramGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequenceDiagramGenerator.js","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/sequenceDiagramGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TArtifactSpeech } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
2
|
+
import { ArtifactDisplay } from './artifactDisplayBase.js';
|
|
3
|
+
export declare class SpeechArtifactDisplay extends ArtifactDisplay {
|
|
4
|
+
protected artifact: TArtifactSpeech;
|
|
5
|
+
readonly placementTarget = "details";
|
|
6
|
+
constructor(artifact: TArtifactSpeech);
|
|
7
|
+
render(container: HTMLElement): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=speechArtifactDisplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speechArtifactDisplay.d.ts","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/speechArtifactDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,qBAAa,qBAAsB,SAAQ,eAAe;IAI1C,SAAS,CAAC,QAAQ,EAAE,eAAe;IAF/C,QAAQ,CAAC,eAAe,aAAa;gBAEf,QAAQ,EAAE,eAAe;IAMxC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CA0B9C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ArtifactDisplay } from './artifactDisplayBase.js';
|
|
2
|
+
export class SpeechArtifactDisplay extends ArtifactDisplay {
|
|
3
|
+
artifact;
|
|
4
|
+
// placementTarget is still useful for LogMessageContent/LogEntry to know how to handle this artifact.
|
|
5
|
+
placementTarget = 'details';
|
|
6
|
+
constructor(artifact) {
|
|
7
|
+
super(artifact);
|
|
8
|
+
this.artifact = artifact;
|
|
9
|
+
// No element creation or manipulation in the constructor.
|
|
10
|
+
}
|
|
11
|
+
// render is now public as per the updated ArtifactDisplay base class
|
|
12
|
+
render(container) {
|
|
13
|
+
const typedArtifact = this.artifact;
|
|
14
|
+
container.innerHTML = ''; // Clear "Artifact is loading..." or previous content
|
|
15
|
+
const audioElement = document.createElement('audio');
|
|
16
|
+
audioElement.src = typedArtifact.path;
|
|
17
|
+
audioElement.controls = true;
|
|
18
|
+
audioElement.style.width = '320px';
|
|
19
|
+
audioElement.addEventListener('click', () => {
|
|
20
|
+
// Prevent click on controls from re-triggering play/pause logic if not intended
|
|
21
|
+
// However, standard audio controls handle their own play/pause.
|
|
22
|
+
// This listener is more for if the entire audio element area is clicked.
|
|
23
|
+
// For simplicity, let's assume clicking anywhere on the audio element implies play intent.
|
|
24
|
+
if (audioElement.paused) {
|
|
25
|
+
audioElement.play().catch(error => {
|
|
26
|
+
console.error('Error playing audio:', error);
|
|
27
|
+
// Optionally, display an error in the container if play fails
|
|
28
|
+
// container.innerHTML += `<p class="haibun-artifact-error">Could not play audio: ${(error as Error).message}</p>`;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// audioElement.pause(); // Optional: click to pause if already playing
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
container.appendChild(audioElement);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=speechArtifactDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speechArtifactDisplay.js","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/speechArtifactDisplay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAIhC;IAHtB,sGAAsG;IAC7F,eAAe,GAAG,SAAS,CAAC;IAErC,YAAsB,QAAyB;QAC3C,KAAK,CAAC,QAAQ,CAAC,CAAC;QADE,aAAQ,GAAR,QAAQ,CAAiB;QAE3C,0DAA0D;IAC9D,CAAC;IAED,qEAAqE;IAC9D,MAAM,CAAC,SAAsB;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,QAA2B,CAAC;QACvD,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,qDAAqD;QAE/E,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrD,YAAY,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC;QACtC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC7B,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAEnC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACxC,gFAAgF;YAChF,gEAAgE;YAChE,yEAAyE;YACzE,2FAA2F;YAC3F,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACtB,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC9B,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;oBAC7C,8DAA8D;oBAC9D,mHAAmH;gBACvH,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,uEAAuE;YAC3E,CAAC;QACL,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TArtifactVideo } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
2
|
+
import { ArtifactDisplay } from './artifactDisplayBase.js';
|
|
3
|
+
export declare class VideoArtifactDisplay extends ArtifactDisplay {
|
|
4
|
+
protected artifact: TArtifactVideo;
|
|
5
|
+
readonly placementTarget: 'details' | 'haibun-video';
|
|
6
|
+
constructor(artifact: TArtifactVideo);
|
|
7
|
+
render(container: HTMLElement): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=videoArtifactDisplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoArtifactDisplay.d.ts","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/videoArtifactDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,qBAAa,oBAAqB,SAAQ,eAAe;IAEzC,SAAS,CAAC,QAAQ,EAAE,cAAc;IAD9C,QAAQ,CAAC,eAAe,EAAE,SAAS,GAAG,cAAc,CAAC;gBAC/B,QAAQ,EAAE,cAAc;IAQvC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CAO9C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ArtifactDisplay } from './artifactDisplayBase.js';
|
|
2
|
+
export class VideoArtifactDisplay extends ArtifactDisplay {
|
|
3
|
+
artifact;
|
|
4
|
+
placementTarget;
|
|
5
|
+
constructor(artifact) {
|
|
6
|
+
super(artifact); // type is 'video' by default from TArtifactVideo
|
|
7
|
+
this.artifact = artifact;
|
|
8
|
+
// Element creation is deferred to render method
|
|
9
|
+
this.placementTarget = document.querySelector('#haibun-video') ? 'haibun-video' : 'details';
|
|
10
|
+
if (this.placementTarget === 'details') {
|
|
11
|
+
console.info('Cannot find #haibun-video container; video will be appended to details on toggle.');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
render(container) {
|
|
15
|
+
const videoElement = document.createElement('video');
|
|
16
|
+
videoElement.controls = true;
|
|
17
|
+
videoElement.style.width = '320px'; // Or use CSS classes
|
|
18
|
+
videoElement.src = this.artifact.path;
|
|
19
|
+
container.replaceChildren(videoElement); // Clear placeholder and add video
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=videoArtifactDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoArtifactDisplay.js","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/videoArtifactDisplay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAE/B;IADb,eAAe,CAA6B;IACrD,YAAsB,QAAwB;QAC1C,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,iDAAiD;QADhD,aAAQ,GAAR,QAAQ,CAAgB;QAE1C,gDAAgD;QAChD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QACtG,CAAC;IACL,CAAC;IACM,MAAM,CAAC,SAAsB;QAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC7B,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,qBAAqB;QACzD,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,kCAAkC;IAC/E,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TArtifactVideoStart } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
2
|
+
import { ArtifactDisplay } from './artifactDisplayBase.js';
|
|
3
|
+
export declare class VideoStartArtifactDisplay extends ArtifactDisplay {
|
|
4
|
+
protected artifact: TArtifactVideoStart;
|
|
5
|
+
readonly placementTarget = "body";
|
|
6
|
+
constructor(artifact: TArtifactVideoStart);
|
|
7
|
+
render(container: HTMLElement): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=videoStartArtifactDisplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoStartArtifactDisplay.d.ts","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/videoStartArtifactDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,qBAAa,yBAA0B,SAAQ,eAAe;IAE9C,SAAS,CAAC,QAAQ,EAAE,mBAAmB;IADnD,QAAQ,CAAC,eAAe,UAAU;gBACZ,QAAQ,EAAE,mBAAmB;IAI5C,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CAmB9C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ArtifactDisplay } from './artifactDisplayBase.js';
|
|
2
|
+
export class VideoStartArtifactDisplay extends ArtifactDisplay {
|
|
3
|
+
artifact;
|
|
4
|
+
placementTarget = 'body';
|
|
5
|
+
constructor(artifact) {
|
|
6
|
+
super(artifact); // type is 'video/start' by default from TArtifactVideoStart
|
|
7
|
+
this.artifact = artifact;
|
|
8
|
+
// Element creation is deferred to render method
|
|
9
|
+
}
|
|
10
|
+
render(container) {
|
|
11
|
+
// For VideoStart, we might not render a visible element in the container itself,
|
|
12
|
+
// but rather use this to signal something, or if it were to display info,
|
|
13
|
+
// it would be done here.
|
|
14
|
+
// For now, let's assume it might want to display its start time if it were visible.
|
|
15
|
+
const span = document.createElement('span');
|
|
16
|
+
span.id = 'haibun-video-start'; // This id might be used by other logic
|
|
17
|
+
span.dataset.start = `${this.artifact.start}`;
|
|
18
|
+
span.textContent = `Video start event: ${this.artifact.start}`;
|
|
19
|
+
// Since this is 'body' placement, the container passed might be a generic div
|
|
20
|
+
// created by LogMessageContent.renderSpecialPlacementArtifact.
|
|
21
|
+
// If this artifact is meant to be invisible or just a marker,
|
|
22
|
+
// it might not even append to the container or clear it.
|
|
23
|
+
// However, to be consistent with other renderers that populate the container:
|
|
24
|
+
container.replaceChildren(span);
|
|
25
|
+
// If it's truly a marker for document.body, it might do this instead:
|
|
26
|
+
// document.body.appendChild(span); // Or update an existing element on the body
|
|
27
|
+
// For now, populating the provided container is the standard.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=videoStartArtifactDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoStartArtifactDisplay.js","sourceRoot":"","sources":["../../../src/monitor/artifactDisplays/videoStartArtifactDisplay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAEpC;IADb,eAAe,GAAG,MAAM,CAAC;IAClC,YAAsB,QAA6B;QAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,4DAA4D;QAD3D,aAAQ,GAAR,QAAQ,CAAqB;QAE/C,gDAAgD;IACpD,CAAC;IACM,MAAM,CAAC,SAAsB;QAChC,iFAAiF;QACjF,0EAA0E;QAC1E,yBAAyB;QACzB,oFAAoF;QACpF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,uCAAuC;QACvE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,sBAAsB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC/D,8EAA8E;QAC9E,+DAA+D;QAC/D,8DAA8D;QAC9D,yDAAyD;QACzD,8EAA8E;QAC9E,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,sEAAsE;QACtE,gFAAgF;QAChF,8DAA8D;IAClE,CAAC;CACJ"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TResolvedFeature } from "@haibun/core/build/lib/defs.js";
|
|
2
|
+
export declare function getBaseLocations(resolvedFeatures: any): Set<unknown>;
|
|
3
|
+
export declare function getBackgroundFeatures(resolvedFeatures: TResolvedFeature[]): Set<string>;
|
|
4
|
+
export declare function getBaseFeatures(resolvedFeatures: any): Map<any, any>;
|
|
5
|
+
//# sourceMappingURL=feature-bases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-bases.d.ts","sourceRoot":"","sources":["../../../src/monitor/graph/feature-bases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,wBAAgB,gBAAgB,CAAC,gBAAgB,KAAA,gBAShD;AAED,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,eAWzE;AAED,wBAAgB,eAAe,CAAC,gBAAgB,KAAA,iBAY/C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function getBaseLocations(resolvedFeatures) {
|
|
2
|
+
// Collect all unique base locations from features
|
|
3
|
+
const baseLocations = new Set();
|
|
4
|
+
resolvedFeatures.forEach(f => {
|
|
5
|
+
if (f.base && typeof f.base === 'string' && f.base.trim() !== '') {
|
|
6
|
+
baseLocations.add(f.base);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
return baseLocations;
|
|
10
|
+
}
|
|
11
|
+
export function getBackgroundFeatures(resolvedFeatures) {
|
|
12
|
+
const backgroundPaths = new Set();
|
|
13
|
+
resolvedFeatures.forEach(f => {
|
|
14
|
+
const steps = f.featureSteps ?? [];
|
|
15
|
+
steps.forEach(step => {
|
|
16
|
+
if (step.path && step.path !== f.path) {
|
|
17
|
+
backgroundPaths.add(step.path);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
return backgroundPaths;
|
|
22
|
+
}
|
|
23
|
+
export function getBaseFeatures(resolvedFeatures) {
|
|
24
|
+
// Map of base path to the resolved feature object
|
|
25
|
+
const bases = new Map();
|
|
26
|
+
resolvedFeatures.forEach(f => {
|
|
27
|
+
if (f.base && typeof f.base === 'string' && f.base.trim() !== '') {
|
|
28
|
+
const baseFeature = resolvedFeatures.find(rf => rf.path === f.base);
|
|
29
|
+
if (baseFeature) {
|
|
30
|
+
bases.set(f.base, baseFeature);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return bases;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=feature-bases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-bases.js","sourceRoot":"","sources":["../../../src/monitor/graph/feature-bases.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,gBAAgB;IAC/C,kDAAkD;IAClD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC3B,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACjE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,gBAAoC;IACxE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,gBAAgB;IAC9C,kDAAkD;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC3B,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACpE,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TResolvedFeature } from '@haibun/core/build/lib/defs.js';
|
|
2
|
+
export declare function generateMermaidGraphAsMarkdown(resolvedFeatures: TResolvedFeature[]): Promise<string>;
|
|
3
|
+
export declare function generateMermaidGraph(resolvedFeatures: TResolvedFeature[]): Promise<string[]>;
|
|
4
|
+
//# sourceMappingURL=generateMermaidGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateMermaidGraph.d.ts","sourceRoot":"","sources":["../../../src/monitor/graph/generateMermaidGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAIlE,wBAAsB,8BAA8B,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAG1G;AAED,wBAAsB,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkJlG"}
|