@haibun/web-playwright 1.43.0 → 1.44.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.
- package/build/BrowserFactory.d.ts +15 -27
- package/build/BrowserFactory.d.ts.map +1 -1
- package/build/BrowserFactory.js +71 -50
- package/build/BrowserFactory.js.map +1 -1
- package/build/PlaywrightEvents.d.ts +3 -3
- package/build/PlaywrightEvents.d.ts.map +1 -1
- package/build/PlaywrightEvents.js +17 -13
- package/build/PlaywrightEvents.js.map +1 -1
- package/build/monitor/XXlogToMonitor.d.ts +8 -0
- package/build/monitor/XXlogToMonitor.d.ts.map +1 -0
- package/build/monitor/XXlogToMonitor.js +151 -0
- package/build/monitor/XXlogToMonitor.js.map +1 -0
- package/build/monitor/controls.d.ts +3 -0
- package/build/monitor/controls.d.ts.map +1 -0
- package/build/monitor/controls.js +318 -0
- package/build/monitor/controls.js.map +1 -0
- package/build/monitor/disclosureJson.d.ts +3 -0
- package/build/monitor/disclosureJson.d.ts.map +1 -0
- package/build/monitor/disclosureJson.js +121 -0
- package/build/monitor/disclosureJson.js.map +1 -0
- package/build/monitor/mermaidDiagram.d.ts +22 -0
- package/build/monitor/mermaidDiagram.d.ts.map +1 -0
- package/build/monitor/mermaidDiagram.js +199 -0
- package/build/monitor/mermaidDiagram.js.map +1 -0
- package/build/monitor/messages.d.ts +18 -0
- package/build/monitor/messages.d.ts.map +1 -0
- package/build/monitor/messages.js +303 -0
- package/build/monitor/messages.js.map +1 -0
- package/build/monitor/monitor.d.ts +16 -0
- package/build/monitor/monitor.d.ts.map +1 -0
- package/build/monitor/monitor.js +61 -0
- package/build/monitor/monitor.js.map +1 -0
- package/build/monitor/monitorHandler.d.ts +12 -0
- package/build/monitor/monitorHandler.d.ts.map +1 -0
- package/build/monitor/monitorHandler.js +89 -0
- package/build/monitor/monitorHandler.js.map +1 -0
- package/build/rest-playwright.d.ts +60 -2
- package/build/rest-playwright.d.ts.map +1 -1
- package/build/rest-playwright.js +170 -51
- package/build/rest-playwright.js.map +1 -1
- package/build/web-playwright.d.ts +142 -54
- package/build/web-playwright.d.ts.map +1 -1
- package/build/web-playwright.js +327 -110
- package/build/web-playwright.js.map +1 -1
- package/package.json +5 -4
- package/web/monitor.html +2925 -0
|
@@ -0,0 +1,199 @@
|
|
|
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 = false;
|
|
24
|
+
diagramLines = ['sequenceDiagram']; // Initialize with diagram type
|
|
25
|
+
pageNames = {};
|
|
26
|
+
pageCounter = 1;
|
|
27
|
+
participantAdded = {}; // Track added participants
|
|
28
|
+
// Add participant declaration if not already added
|
|
29
|
+
addParticipant(alias, name) {
|
|
30
|
+
if (!this.participantAdded[alias]) {
|
|
31
|
+
this.diagramLines.splice(1, 0, `participant ${alias} as ${name}`); // Insert after 'sequenceDiagram'
|
|
32
|
+
this.participantAdded[alias] = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
processEvent(trace, httpEvent, filters = jsonFilters) {
|
|
36
|
+
this.needsUpdate = true; // Set flag immediately
|
|
37
|
+
const requestingPage = trace.requestingPage;
|
|
38
|
+
const requestingURL = trace.requestingURL;
|
|
39
|
+
const method = trace.method;
|
|
40
|
+
const status = trace.status;
|
|
41
|
+
const statusText = trace.statusText;
|
|
42
|
+
const headers = trace.headers;
|
|
43
|
+
// Use URL hostname as the server participant
|
|
44
|
+
let serverAlias = 'UnknownAlias'; // Default if URL is missing
|
|
45
|
+
let serverName = 'Unknown';
|
|
46
|
+
if (requestingURL) {
|
|
47
|
+
try {
|
|
48
|
+
const url = new URL(requestingURL);
|
|
49
|
+
serverName = url.hostname;
|
|
50
|
+
// Handle empty hostname (e.g., for about:blank)
|
|
51
|
+
if (serverName) {
|
|
52
|
+
serverAlias = serverName.replace(/[.-]/g, '');
|
|
53
|
+
if (!serverAlias) {
|
|
54
|
+
serverAlias = 'HostAlias'; // Fallback alias if replacement results in empty string
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
serverAlias = 'InvalidURLAlias';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
this.addParticipant(serverAlias, serverName);
|
|
63
|
+
if (skipEvent(filters, httpEvent, serverName, trace)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (requestingPage && requestingURL) {
|
|
67
|
+
let pageAlias = this.pageNames[requestingPage];
|
|
68
|
+
if (!pageAlias) {
|
|
69
|
+
let pageName = `Browser Page ${this.pageCounter}`;
|
|
70
|
+
let baseAlias = '';
|
|
71
|
+
try {
|
|
72
|
+
// Try to get hostname from the current URL for a better name
|
|
73
|
+
const url = new URL(requestingURL);
|
|
74
|
+
const hostname = url.hostname;
|
|
75
|
+
if (hostname && requestingURL !== 'about:blank') {
|
|
76
|
+
baseAlias = hostname.replace(/[.-]/g, '');
|
|
77
|
+
if (!baseAlias)
|
|
78
|
+
baseAlias = 'Host'; // Fallback if hostname becomes empty
|
|
79
|
+
pageName = `${hostname} ${this.pageCounter}`;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Fallback for about:blank or empty hostname
|
|
83
|
+
baseAlias = 'Page';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
// Fallback for invalid URL
|
|
88
|
+
baseAlias = 'Page';
|
|
89
|
+
}
|
|
90
|
+
// Ensure unique alias by appending counter
|
|
91
|
+
pageAlias = `${baseAlias}${this.pageCounter}`;
|
|
92
|
+
this.pageNames[requestingPage] = pageAlias;
|
|
93
|
+
this.addParticipant(pageAlias, pageName);
|
|
94
|
+
this.pageCounter++;
|
|
95
|
+
}
|
|
96
|
+
if (method) {
|
|
97
|
+
const message = sanitizeMermaidContent(`${method} ${shortenURI(requestingURL)}`);
|
|
98
|
+
this.diagramLines.push(`${pageAlias}->>${serverAlias}: ${message}`);
|
|
99
|
+
if (headers && headers.referer) {
|
|
100
|
+
const note = shortenURI(sanitizeMermaidContent(`Referer: ${headers.referer}`));
|
|
101
|
+
this.diagramLines.push(`Note right of ${pageAlias}: ${note}`);
|
|
102
|
+
}
|
|
103
|
+
if (headers && headers["accept"]) {
|
|
104
|
+
const note = sanitizeMermaidContent(`Accept: ${headers["accept"]}`);
|
|
105
|
+
this.diagramLines.push(`Note right of ${pageAlias}: ${note}`);
|
|
106
|
+
}
|
|
107
|
+
if (headers && headers["content-type"]) {
|
|
108
|
+
const note = sanitizeMermaidContent(`Content-type: ${headers['content-type']}`);
|
|
109
|
+
this.diagramLines.push(`Note right of ${pageAlias}: ${note}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (status) {
|
|
113
|
+
// Sanitize response message
|
|
114
|
+
const message = sanitizeMermaidContent(`${status} ${statusText || ''}`);
|
|
115
|
+
this.diagramLines.push(`${serverAlias}-->>${pageAlias}: ${message}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// this.needsUpdate = true; // Moved to the beginning
|
|
119
|
+
}
|
|
120
|
+
getDiagram() {
|
|
121
|
+
return this.diagramLines.join("\n");
|
|
122
|
+
}
|
|
123
|
+
async update() {
|
|
124
|
+
// Only update the DOM and render if necessary
|
|
125
|
+
if (!this.needsUpdate) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const mermaidContainer = document.getElementById('sequence-diagram');
|
|
129
|
+
if (mermaidContainer) {
|
|
130
|
+
let diagramDefinition = ''; // Declare outside try
|
|
131
|
+
try {
|
|
132
|
+
diagramDefinition = this.getDiagram(); // Assign inside try
|
|
133
|
+
mermaid.initialize({ maxTextSize: 900000 });
|
|
134
|
+
// Ensure container is empty before rendering
|
|
135
|
+
mermaidContainer.innerHTML = '';
|
|
136
|
+
// Insert the diagram definition for Mermaid to process
|
|
137
|
+
const insert = `<pre class="mermaid">${diagramDefinition}</pre>`;
|
|
138
|
+
mermaidContainer.insertAdjacentHTML('beforeend', insert);
|
|
139
|
+
await mermaid.run({ nodes: [mermaidContainer.querySelector('.mermaid')] });
|
|
140
|
+
console.log("Mermaid diagram rendered.");
|
|
141
|
+
this.needsUpdate = false; // Reset flag only after successful render
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
console.error("Failed Mermaid diagram definition:\n", diagramDefinition); // Log failing definition
|
|
145
|
+
console.error("Error rendering Mermaid diagram:", e);
|
|
146
|
+
const detailedError = (typeof e === 'object' && e !== null && 'str' in e) ? e.str : null;
|
|
147
|
+
const errorMessage = detailedError || (e instanceof Error ? e.message : String(e));
|
|
148
|
+
mermaidContainer.innerHTML = `<pre>Error rendering Mermaid diagram:\n\n${errorMessage}\n\n--- Diagram Definition ---\n${diagramDefinition}</pre>`;
|
|
149
|
+
// Optionally reset needsUpdate here too, or leave it true to retry later? Resetting for now.
|
|
150
|
+
this.needsUpdate = false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.warn("Sequence diagram container not found.");
|
|
155
|
+
// Reset flag even if container not found to avoid repeated attempts
|
|
156
|
+
this.needsUpdate = false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export function skipEvent(filters, httpEvent, serverName, { requestingPage, requestingURL, method, status, statusText, headers }) {
|
|
161
|
+
if (!serverName) {
|
|
162
|
+
console.info('No server name found, skipping result.');
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
if (requestingURL === 'about:blank') {
|
|
166
|
+
console.info('Requesting URL is about:blank, skipping result.');
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
if (httpEvent === 'request') {
|
|
170
|
+
if (headers && headers.accept) {
|
|
171
|
+
const acceptHeader = headers.accept;
|
|
172
|
+
if (!filters.request.accept.some(filterValue => acceptHeader.includes(filterValue))) {
|
|
173
|
+
console.info('qx', acceptHeader, filters.request.accept);
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
console.info('qY', acceptHeader, filters.request.accept);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (httpEvent === 'response') {
|
|
182
|
+
if (headers && headers['content-type']) {
|
|
183
|
+
const contentTypeHeader = headers['content-type'];
|
|
184
|
+
if (!filters.response.type.some(filterValue => contentTypeHeader.includes(filterValue))) {
|
|
185
|
+
console.info('px', contentTypeHeader);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.info('pY', contentTypeHeader);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.warn(`Unknown HTTP event type: ${httpEvent}`);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=mermaidDiagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaidDiagram.js","sourceRoot":"","sources":["../../src/monitor/mermaidDiagram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TMessageContext } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
2
|
+
declare abstract class LogComponent<T extends HTMLElement = HTMLElement> {
|
|
3
|
+
readonly element: T;
|
|
4
|
+
constructor(tagName: keyof HTMLElementTagNameMap, className?: string | string[]);
|
|
5
|
+
append(child: LogComponent | HTMLElement): void;
|
|
6
|
+
addClass(className: string): void;
|
|
7
|
+
setData(key: string, value: string): void;
|
|
8
|
+
setHtml(html: string): void;
|
|
9
|
+
setText(text: string): void;
|
|
10
|
+
}
|
|
11
|
+
export declare class LogEntry extends LogComponent {
|
|
12
|
+
private detailsSummary;
|
|
13
|
+
private messageContent;
|
|
14
|
+
constructor(level: string, timestamp: number, message: string, messageContext?: TMessageContext);
|
|
15
|
+
private handleSpecialPlacements;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/monitor/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,eAAe,EAAgI,MAAM,6CAA6C,CAAC;AAIvN,uBAAe,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAC9D,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAER,OAAO,EAAE,MAAM,qBAAqB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ/E,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,IAAI;IAK/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIjC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAG3B;AA6BD,qBAAa,QAAS,SAAQ,YAAY;IACzC,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,cAAc,CAAoB;gBAE9B,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,eAAe;IAgB/F,OAAO,CAAC,uBAAuB;CAqB/B"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { EExecutionMessageType } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
2
|
+
import { sequenceDiagramGenerator } from './monitor.js';
|
|
3
|
+
import { disclosureJson } from './disclosureJson.js';
|
|
4
|
+
class LogComponent {
|
|
5
|
+
element;
|
|
6
|
+
constructor(tagName, className) {
|
|
7
|
+
this.element = document.createElement(tagName);
|
|
8
|
+
if (className) {
|
|
9
|
+
const classes = Array.isArray(className) ? className : [className];
|
|
10
|
+
this.element.classList.add(...classes);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
append(child) {
|
|
14
|
+
// Type guard ensures we append the .element property if it's a LogComponent
|
|
15
|
+
this.element.appendChild(child instanceof LogComponent ? child.element : child);
|
|
16
|
+
}
|
|
17
|
+
addClass(className) {
|
|
18
|
+
this.element.classList.add(className);
|
|
19
|
+
}
|
|
20
|
+
setData(key, value) {
|
|
21
|
+
this.element.dataset[key] = value;
|
|
22
|
+
}
|
|
23
|
+
setHtml(html) {
|
|
24
|
+
this.element.innerHTML = html;
|
|
25
|
+
}
|
|
26
|
+
setText(text) {
|
|
27
|
+
this.element.textContent = text;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// --- Abstract Artifact Display Base Class ---
|
|
31
|
+
// Abstract base for artifact displays
|
|
32
|
+
class ArtifactDisplay extends LogComponent {
|
|
33
|
+
artifact;
|
|
34
|
+
label;
|
|
35
|
+
constructor(artifact, tagName, className) {
|
|
36
|
+
super(tagName, className);
|
|
37
|
+
this.artifact = artifact;
|
|
38
|
+
this.artifact = artifact;
|
|
39
|
+
this.label = this.deriveLabel();
|
|
40
|
+
this.render();
|
|
41
|
+
}
|
|
42
|
+
deriveLabel() {
|
|
43
|
+
return this.artifact.artifactType;
|
|
44
|
+
}
|
|
45
|
+
get artifactType() {
|
|
46
|
+
return this.artifact.artifactType;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class LogEntry extends LogComponent {
|
|
50
|
+
detailsSummary;
|
|
51
|
+
messageContent;
|
|
52
|
+
constructor(level, timestamp, message, messageContext) {
|
|
53
|
+
super('div', ['haibun-log-entry', `haibun-level-${level}`]);
|
|
54
|
+
if (messageContext?.incident === EExecutionMessageType.STEP_START) {
|
|
55
|
+
this.addClass('haibun-step-start');
|
|
56
|
+
}
|
|
57
|
+
this.setData('time', `${timestamp}`);
|
|
58
|
+
this.detailsSummary = new LogDetailsSummary(level, timestamp);
|
|
59
|
+
this.messageContent = new LogMessageContent(message, messageContext);
|
|
60
|
+
this.append(this.detailsSummary);
|
|
61
|
+
this.append(this.messageContent);
|
|
62
|
+
this.handleSpecialPlacements();
|
|
63
|
+
}
|
|
64
|
+
handleSpecialPlacements() {
|
|
65
|
+
const artifactDisplay = this.messageContent.artifactDisplay;
|
|
66
|
+
if (!artifactDisplay)
|
|
67
|
+
return;
|
|
68
|
+
if (artifactDisplay.placementTarget === 'body') {
|
|
69
|
+
document.body.appendChild(artifactDisplay.element);
|
|
70
|
+
}
|
|
71
|
+
else if (artifactDisplay.placementTarget === 'haibun-video') {
|
|
72
|
+
const haibunVideoContainer = document.querySelector('#haibun-video');
|
|
73
|
+
if (haibunVideoContainer) {
|
|
74
|
+
haibunVideoContainer.replaceChildren(artifactDisplay.element);
|
|
75
|
+
haibunVideoContainer.style.display = 'flex';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (artifactDisplay.placementTarget === 'haibun-sequence-diagram') {
|
|
79
|
+
// The element is already rendered in the details by LogMessageContent.
|
|
80
|
+
// Here, we just need to ensure the data is processed for the diagram if needed.
|
|
81
|
+
// The JsonArtifactHTTPTrace.render method already handles this.
|
|
82
|
+
// No need to move the element itself.
|
|
83
|
+
// sequenceDiagramGenerator.processEvent is called within JsonArtifactHTTPTrace.render
|
|
84
|
+
}
|
|
85
|
+
// 'details' placement is handled within LogMessageContent constructor
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// --- Log Entry Structure Components (Used by LogEntry) ---
|
|
89
|
+
class LogDetailsSummary extends LogComponent {
|
|
90
|
+
constructor(level, timestamp) {
|
|
91
|
+
super('summary', 'haibun-log-details-summary');
|
|
92
|
+
const relativeTime = calculateRelativeTime(timestamp);
|
|
93
|
+
this.setHtml(`${level}<div class="time-small">${formatTime(relativeTime)}s</div>`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
class LogMessageContent extends LogComponent {
|
|
97
|
+
artifactDisplay = null;
|
|
98
|
+
constructor(message, messageContext) {
|
|
99
|
+
super('div', 'haibun-message-content');
|
|
100
|
+
const summaryMessage = getSummaryMessage(message, messageContext);
|
|
101
|
+
if (messageContext) {
|
|
102
|
+
// Context exists: ALWAYS create the details structure
|
|
103
|
+
const incident = messageContext.incident;
|
|
104
|
+
const incidentDetails = messageContext.incidentDetails;
|
|
105
|
+
const artifact = messageContext.artifact;
|
|
106
|
+
let finalLabel = EExecutionMessageType[incident] || 'Context'; // Default label is incident type
|
|
107
|
+
// Check for artifact and update label if needed
|
|
108
|
+
if (artifact) {
|
|
109
|
+
this.artifactDisplay = createArtifactDisplay(artifact);
|
|
110
|
+
if (this.artifactDisplay) {
|
|
111
|
+
// Use artifact label if available and different, otherwise use type
|
|
112
|
+
finalLabel = (this.artifactDisplay.label !== this.artifactDisplay.artifactType)
|
|
113
|
+
? this.artifactDisplay.label
|
|
114
|
+
: (this.artifactDisplay.artifactType || finalLabel);
|
|
115
|
+
// NOTE: We no longer check placementTarget or return early here
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// --- Create Details Wrapper ---
|
|
119
|
+
const detailsElement = document.createElement('details');
|
|
120
|
+
detailsElement.classList.add('haibun-context-details');
|
|
121
|
+
// Create the summary line
|
|
122
|
+
const messageSummary = new LogMessageSummary(summaryMessage, finalLabel);
|
|
123
|
+
// Add loader specifically to the message summary if STEP_START
|
|
124
|
+
if (incident === EExecutionMessageType.STEP_START) {
|
|
125
|
+
const loader = document.createElement('div');
|
|
126
|
+
loader.className = 'haibun-loader';
|
|
127
|
+
messageSummary.element.prepend(loader); // Prepend to the summary element
|
|
128
|
+
}
|
|
129
|
+
detailsElement.appendChild(messageSummary.element); // Append the summary (with potential loader)
|
|
130
|
+
// Add incidentDetails JSON inside the details element
|
|
131
|
+
if (incidentDetails) {
|
|
132
|
+
const pre = document.createElement('pre');
|
|
133
|
+
pre.classList.add('haibun-message-details-json');
|
|
134
|
+
pre.appendChild(disclosureJson(incidentDetails));
|
|
135
|
+
detailsElement.appendChild(pre);
|
|
136
|
+
}
|
|
137
|
+
// Add artifact display if it exists.
|
|
138
|
+
// For JsonArtifactHTTPTrace, this ensures the <pre> is always added here.
|
|
139
|
+
if (this.artifactDisplay) {
|
|
140
|
+
detailsElement.appendChild(this.artifactDisplay.element);
|
|
141
|
+
}
|
|
142
|
+
this.append(detailsElement); // Append the whole details structure
|
|
143
|
+
// If artifact placement is NOT 'details', we might still want the simple message class on the parent
|
|
144
|
+
if (this.artifactDisplay && this.artifactDisplay.placementTarget !== 'details') {
|
|
145
|
+
this.addClass('haibun-simple-message');
|
|
146
|
+
// Optionally set text again if the summary text differs significantly from the desired simple text
|
|
147
|
+
// this.setText(summaryMessage);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// No context: display simple message
|
|
152
|
+
this.addClass('haibun-simple-message');
|
|
153
|
+
this.setText(message); // Use original message
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
class LogMessageSummary extends LogComponent {
|
|
158
|
+
labelSpan;
|
|
159
|
+
constructor(summaryMessage, initialLabel) {
|
|
160
|
+
super('summary', 'haibun-log-message-summary');
|
|
161
|
+
this.labelSpan = document.createElement('span');
|
|
162
|
+
this.labelSpan.className = 'details-type'; // Class for styling the label
|
|
163
|
+
this.updateLabel(initialLabel); // Set initial label with formatting
|
|
164
|
+
// Set text first, then append span
|
|
165
|
+
this.setText(summaryMessage);
|
|
166
|
+
this.append(this.labelSpan);
|
|
167
|
+
}
|
|
168
|
+
updateLabel(newLabel) {
|
|
169
|
+
this.labelSpan.textContent = newLabel.replace(/_/g, ' ');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// --- Artifact Display Components (Details) ---
|
|
173
|
+
// Factory function to create the correct ArtifactDisplay instance
|
|
174
|
+
function createArtifactDisplay(artifact) {
|
|
175
|
+
const { artifactType } = artifact;
|
|
176
|
+
switch (artifactType) {
|
|
177
|
+
case 'html': return new HtmlArtifactDisplay(artifact);
|
|
178
|
+
case 'image': return new ImageArtifactDisplay(artifact);
|
|
179
|
+
case 'video': return new VideoArtifactDisplay(artifact);
|
|
180
|
+
case 'video/start': return new VideoStartArtifactDisplay(artifact);
|
|
181
|
+
case 'json': return new JsonArtifactDisplay(artifact);
|
|
182
|
+
case 'json/http/trace':
|
|
183
|
+
return new JsonArtifactHTTPTrace(artifact);
|
|
184
|
+
default: {
|
|
185
|
+
throw Error(`Unsupported artifact type "${artifact.artifactType}" for display from ${artifactType}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Specific implementations for each artifact type
|
|
190
|
+
class HtmlArtifactDisplay extends ArtifactDisplay {
|
|
191
|
+
artifact;
|
|
192
|
+
placementTarget = 'details';
|
|
193
|
+
constructor(artifact) {
|
|
194
|
+
super(artifact, 'iframe');
|
|
195
|
+
this.artifact = artifact;
|
|
196
|
+
this.element.style.border = 'none';
|
|
197
|
+
this.element.style.width = '100%';
|
|
198
|
+
this.element.style.height = '80vh';
|
|
199
|
+
}
|
|
200
|
+
render() {
|
|
201
|
+
if (this.artifact.html) {
|
|
202
|
+
this.element.srcdoc = this.artifact.html;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
class ImageArtifactDisplay extends ArtifactDisplay {
|
|
207
|
+
artifact;
|
|
208
|
+
placementTarget = 'details';
|
|
209
|
+
constructor(artifact) {
|
|
210
|
+
super(artifact, 'img');
|
|
211
|
+
this.artifact = artifact;
|
|
212
|
+
this.element.alt = 'Screen capture artifact';
|
|
213
|
+
}
|
|
214
|
+
render() {
|
|
215
|
+
this.element.src = getRuntimePath(this.artifact);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
class VideoArtifactDisplay extends ArtifactDisplay {
|
|
219
|
+
artifact;
|
|
220
|
+
placementTarget;
|
|
221
|
+
constructor(artifact) {
|
|
222
|
+
super(artifact, 'video');
|
|
223
|
+
this.artifact = artifact;
|
|
224
|
+
const videoElement = this.element;
|
|
225
|
+
videoElement.controls = true;
|
|
226
|
+
videoElement.style.width = '320px';
|
|
227
|
+
this.placementTarget = document.querySelector('#haibun-video') ? 'haibun-video' : 'details';
|
|
228
|
+
if (this.placementTarget === 'details') {
|
|
229
|
+
console.info('Cannot find #haibun-video container; appending video to details.');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
render() {
|
|
233
|
+
this.element.src = getRuntimePath(this.artifact);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
class VideoStartArtifactDisplay extends ArtifactDisplay {
|
|
237
|
+
artifact;
|
|
238
|
+
placementTarget = 'body';
|
|
239
|
+
constructor(artifact) {
|
|
240
|
+
super(artifact, 'span');
|
|
241
|
+
this.artifact = artifact;
|
|
242
|
+
this.element.id = 'haibun-video-start';
|
|
243
|
+
}
|
|
244
|
+
render() {
|
|
245
|
+
this.setData('start', `${this.artifact.start}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
class JsonArtifactHTTPTrace extends ArtifactDisplay {
|
|
249
|
+
artifact;
|
|
250
|
+
placementTarget;
|
|
251
|
+
constructor(artifact) {
|
|
252
|
+
super(artifact, 'pre', 'haibun-message-details-json');
|
|
253
|
+
this.artifact = artifact;
|
|
254
|
+
this.placementTarget = document.querySelector('#sequence-diagram') ? 'haibun-sequence-diagram' : 'details';
|
|
255
|
+
}
|
|
256
|
+
deriveLabel() {
|
|
257
|
+
return '⇄ Trace';
|
|
258
|
+
}
|
|
259
|
+
render() {
|
|
260
|
+
if (this.artifact.httpEvent !== 'route') {
|
|
261
|
+
sequenceDiagramGenerator.processEvent(this.artifact.trace, this.artifact.httpEvent);
|
|
262
|
+
}
|
|
263
|
+
this.append(disclosureJson(this.artifact.trace));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
class JsonArtifactDisplay extends ArtifactDisplay {
|
|
267
|
+
artifact;
|
|
268
|
+
placementTarget = 'details';
|
|
269
|
+
constructor(artifact) {
|
|
270
|
+
super(artifact, 'pre', 'haibun-message-details-json');
|
|
271
|
+
this.artifact = artifact;
|
|
272
|
+
}
|
|
273
|
+
deriveLabel() {
|
|
274
|
+
return this.artifact.artifactType;
|
|
275
|
+
}
|
|
276
|
+
render() {
|
|
277
|
+
this.append(disclosureJson(this.artifact.json || {}));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// --- Helper Functions ---
|
|
281
|
+
function calculateRelativeTime(timestamp) {
|
|
282
|
+
const startTime = parseInt(document.body.dataset.startTime || `${Date.now()}`, 10);
|
|
283
|
+
return timestamp - startTime;
|
|
284
|
+
}
|
|
285
|
+
function formatTime(relativeTimeMs) {
|
|
286
|
+
return (relativeTimeMs / 1000).toFixed(3).replace('.', ':');
|
|
287
|
+
}
|
|
288
|
+
function getSummaryMessage(message, messageContext) {
|
|
289
|
+
// Check for STEP_END incident and access details via incidentDetails
|
|
290
|
+
if (messageContext?.incident === EExecutionMessageType.STEP_END && messageContext.incidentDetails?.result?.in) {
|
|
291
|
+
return `${message} ${messageContext.incidentDetails.result.in}`;
|
|
292
|
+
}
|
|
293
|
+
return message;
|
|
294
|
+
}
|
|
295
|
+
function getRuntimePath(artifact) {
|
|
296
|
+
const isRuntime = document.body.dataset.haibunRuntime === 'true';
|
|
297
|
+
if (isRuntime && artifact.runtimePath) {
|
|
298
|
+
const prefix = artifact.runtimePath.endsWith('/') ? artifact.runtimePath : `${artifact.runtimePath}/`;
|
|
299
|
+
return `${prefix}${artifact.path.replace(/^\.\//, '')}`;
|
|
300
|
+
}
|
|
301
|
+
return artifact.path;
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/monitor/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SequenceDiagramGenerator } from './mermaidDiagram.js';
|
|
2
|
+
import { TAnyFixme } from '@haibun/core/build/lib/defs.js';
|
|
3
|
+
import { TLogLevel, TLogArgs, TMessageContext } from '@haibun/core/build/lib/interfaces/logger.js';
|
|
4
|
+
declare global {
|
|
5
|
+
interface Window {
|
|
6
|
+
haibunLogData: TAnyFixme[];
|
|
7
|
+
receiveLogData: (logEntry: {
|
|
8
|
+
level: TLogLevel;
|
|
9
|
+
message: TLogArgs;
|
|
10
|
+
messageContext?: TMessageContext;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
}) => void;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export declare const sequenceDiagramGenerator: SequenceDiagramGenerator;
|
|
16
|
+
//# sourceMappingURL=monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/monitor/monitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAyB,MAAM,6CAA6C,CAAC;AAI1H,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,aAAa,EAAE,SAAS,EAAE,CAAC;QAC3B,cAAc,EAAE,CAAC,QAAQ,EAAE;YAAE,KAAK,EAAE,SAAS,CAAC;YAAC,OAAO,EAAE,QAAQ,CAAC;YAAC,cAAc,CAAC,EAAE,eAAe,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KACjI;CACD;AAYD,eAAO,MAAM,wBAAwB,0BAAiC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import mermaid from 'mermaid';
|
|
2
|
+
import { SequenceDiagramGenerator } from './mermaidDiagram.js';
|
|
3
|
+
import { EExecutionMessageType } from '@haibun/core/build/lib/interfaces/logger.js'; // Moved EExecutionMessageType here
|
|
4
|
+
import { LogEntry } from './messages.js';
|
|
5
|
+
import { setupControls } from './controls.js';
|
|
6
|
+
window.haibunLogData = window.haibunLogData || [];
|
|
7
|
+
console.log('monitor', window.haibunLogData);
|
|
8
|
+
// Function exposed to Playwright to receive new logs
|
|
9
|
+
window.receiveLogData = (logEntry) => {
|
|
10
|
+
window.haibunLogData.push(logEntry);
|
|
11
|
+
renderLogEntry(logEntry);
|
|
12
|
+
void sequenceDiagramGenerator.update();
|
|
13
|
+
};
|
|
14
|
+
export const sequenceDiagramGenerator = new SequenceDiagramGenerator();
|
|
15
|
+
function renderLogEntry(logEntryData) {
|
|
16
|
+
const { level, message, messageContext, timestamp } = logEntryData;
|
|
17
|
+
const container = document.getElementById('haibun-log-display-area');
|
|
18
|
+
if (!container) {
|
|
19
|
+
console.error('Could not find log display area #haibun-log-display-area');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const logEntry = new LogEntry(level, timestamp, message, messageContext);
|
|
23
|
+
const logEntryElement = logEntry.element; // Get the actual DOM element
|
|
24
|
+
container.appendChild(logEntryElement);
|
|
25
|
+
// On STEP_END, find the last active STEP_START entry and hide it
|
|
26
|
+
if (messageContext?.incident === EExecutionMessageType.STEP_END) {
|
|
27
|
+
// Find the last .haibun-step-start element that does NOT have .disappeared
|
|
28
|
+
const activeStepStartEntries = container.querySelectorAll('.haibun-step-start:not(.disappeared)');
|
|
29
|
+
if (activeStepStartEntries.length > 0) {
|
|
30
|
+
const lastActiveEntry = activeStepStartEntries[activeStepStartEntries.length - 1];
|
|
31
|
+
lastActiveEntry.classList.add('disappeared');
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Warn if STEP_END received but no active STEP_START found
|
|
35
|
+
console.warn('Received STEP_END but found no active STEP_START log entry to hide.');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Note: The .haibun-step-start class is added in messages.ts LogEntry constructor
|
|
39
|
+
// Auto-scroll the container to the bottom
|
|
40
|
+
container.scrollTop = container.scrollHeight;
|
|
41
|
+
}
|
|
42
|
+
function renderAllLogs() {
|
|
43
|
+
const container = document.getElementById('haibun-log-display-area');
|
|
44
|
+
if (container) {
|
|
45
|
+
window.haibunLogData.forEach(renderLogEntry);
|
|
46
|
+
void sequenceDiagramGenerator.update();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Initial render on page load
|
|
50
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
51
|
+
console.log("Monitor DOMContentLoaded");
|
|
52
|
+
// Set start time on body for relative calculations
|
|
53
|
+
if (!document.body.dataset.startTime) {
|
|
54
|
+
document.body.dataset.startTime = `${Date.now()}`;
|
|
55
|
+
}
|
|
56
|
+
mermaid.initialize({ startOnLoad: false, securityLevel: 'loose' });
|
|
57
|
+
renderAllLogs();
|
|
58
|
+
setupControls();
|
|
59
|
+
console.log("Initial logs rendered.");
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor/monitor.ts"],"names":[],"mappings":"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"}
|