@haibun/web-playwright 1.43.0 → 1.44.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.
Files changed (45) hide show
  1. package/build/BrowserFactory.d.ts +15 -27
  2. package/build/BrowserFactory.d.ts.map +1 -1
  3. package/build/BrowserFactory.js +71 -50
  4. package/build/BrowserFactory.js.map +1 -1
  5. package/build/PlaywrightEvents.d.ts +3 -3
  6. package/build/PlaywrightEvents.d.ts.map +1 -1
  7. package/build/PlaywrightEvents.js +17 -13
  8. package/build/PlaywrightEvents.js.map +1 -1
  9. package/build/monitor/XXlogToMonitor.d.ts +8 -0
  10. package/build/monitor/XXlogToMonitor.d.ts.map +1 -0
  11. package/build/monitor/XXlogToMonitor.js +151 -0
  12. package/build/monitor/XXlogToMonitor.js.map +1 -0
  13. package/build/monitor/controls.d.ts +3 -0
  14. package/build/monitor/controls.d.ts.map +1 -0
  15. package/build/monitor/controls.js +318 -0
  16. package/build/monitor/controls.js.map +1 -0
  17. package/build/monitor/disclosureJson.d.ts +3 -0
  18. package/build/monitor/disclosureJson.d.ts.map +1 -0
  19. package/build/monitor/disclosureJson.js +121 -0
  20. package/build/monitor/disclosureJson.js.map +1 -0
  21. package/build/monitor/mermaidDiagram.d.ts +22 -0
  22. package/build/monitor/mermaidDiagram.d.ts.map +1 -0
  23. package/build/monitor/mermaidDiagram.js +199 -0
  24. package/build/monitor/mermaidDiagram.js.map +1 -0
  25. package/build/monitor/messages.d.ts +18 -0
  26. package/build/monitor/messages.d.ts.map +1 -0
  27. package/build/monitor/messages.js +303 -0
  28. package/build/monitor/messages.js.map +1 -0
  29. package/build/monitor/monitor.d.ts +16 -0
  30. package/build/monitor/monitor.d.ts.map +1 -0
  31. package/build/monitor/monitor.js +61 -0
  32. package/build/monitor/monitor.js.map +1 -0
  33. package/build/monitor/monitorHandler.d.ts +12 -0
  34. package/build/monitor/monitorHandler.d.ts.map +1 -0
  35. package/build/monitor/monitorHandler.js +89 -0
  36. package/build/monitor/monitorHandler.js.map +1 -0
  37. package/build/rest-playwright.d.ts +60 -2
  38. package/build/rest-playwright.d.ts.map +1 -1
  39. package/build/rest-playwright.js +170 -51
  40. package/build/rest-playwright.js.map +1 -1
  41. package/build/web-playwright.d.ts +142 -54
  42. package/build/web-playwright.d.ts.map +1 -1
  43. package/build/web-playwright.js +327 -110
  44. package/build/web-playwright.js.map +1 -1
  45. package/package.json +4 -3
@@ -0,0 +1,318 @@
1
+ let userScrolledManually = false; // Flag to track manual scrolling (module-level)
2
+ export function setupControls() {
3
+ const levelSelect = document.getElementById('haibun-debug-level-select');
4
+ const levels = ['debug', 'log', 'info', 'error'];
5
+ const updateStyles = (selectedLevel) => {
6
+ const selectedIndex = levels.indexOf(selectedLevel);
7
+ let css = '';
8
+ levels.forEach((level, index) => {
9
+ if (index < selectedIndex) {
10
+ css += `div.haibun-log-entry.haibun-level-${level}:not(.disappeared) { display: none; }\n`;
11
+ }
12
+ else {
13
+ css += `div.haibun-log-entry.haibun-level-${level}:not(.disappeared) { display: flex; }\n`;
14
+ }
15
+ });
16
+ let styleElement = document.getElementById('haibun-dynamic-styles');
17
+ if (!styleElement) {
18
+ styleElement = document.createElement('style');
19
+ styleElement.id = 'haibun-dynamic-styles';
20
+ document.head.appendChild(styleElement);
21
+ }
22
+ styleElement.textContent = css;
23
+ };
24
+ if (levelSelect) {
25
+ levelSelect.addEventListener('change', (event) => {
26
+ const target = event.target;
27
+ updateStyles(target.value);
28
+ });
29
+ // Initial style update
30
+ updateStyles(levelSelect.value);
31
+ }
32
+ // Setup video playback functionality
33
+ setupVideoPlayback();
34
+ // Setup resize handle functionality
35
+ setupResizeHandle();
36
+ }
37
+ function setupResizeHandle() {
38
+ const resizeHandle = document.getElementById('resize-handle');
39
+ const topDisplay = document.getElementById('haibun-media-display');
40
+ const logDisplayArea = document.getElementById('haibun-log-display-area');
41
+ const header = document.querySelector('.haibun-header'); // Assuming header has this class
42
+ if (!resizeHandle || !topDisplay || !logDisplayArea || !header) {
43
+ console.error('Resize elements not found');
44
+ return;
45
+ }
46
+ let isResizing = false;
47
+ let startY;
48
+ let startHeightTop;
49
+ resizeHandle.addEventListener('mousedown', (e) => {
50
+ isResizing = true;
51
+ startY = e.clientY;
52
+ startHeightTop = topDisplay.clientHeight;
53
+ document.body.style.cursor = 'ns-resize'; // Change cursor during resize
54
+ document.body.style.userSelect = 'none'; // Prevent text selection
55
+ // Add listeners to document to capture mouse move everywhere
56
+ document.addEventListener('mousemove', handleMouseMove);
57
+ document.addEventListener('mouseup', handleMouseUp);
58
+ });
59
+ const handleMouseMove = (e) => {
60
+ if (!isResizing)
61
+ return;
62
+ const deltaY = e.clientY - startY; // Calculate change in Y (Reversed for top panel)
63
+ const newHeightTop = startHeightTop + deltaY;
64
+ const minHeight = 50; // Minimum height for the top panel
65
+ const maxHeight = window.innerHeight - header.clientHeight - 50; // Max height (leave space for header and min log area below)
66
+ // Clamp the new height
67
+ const clampedHeightTop = Math.max(minHeight, Math.min(newHeightTop, maxHeight));
68
+ // Apply new height to top panel
69
+ topDisplay.style.height = `${clampedHeightTop}px`;
70
+ };
71
+ const handleMouseUp = () => {
72
+ if (isResizing) {
73
+ isResizing = false;
74
+ document.body.style.cursor = ''; // Reset cursor
75
+ document.body.style.userSelect = ''; // Re-enable text selection
76
+ document.removeEventListener('mousemove', handleMouseMove);
77
+ document.removeEventListener('mouseup', handleMouseUp);
78
+ }
79
+ };
80
+ }
81
+ // Helper function to show the media panel and resize handle
82
+ function showMediaPanelIfNeeded(mediaPanel, resizeHandle) {
83
+ if (mediaPanel && resizeHandle) {
84
+ // Check if already visible to avoid redundant style changes
85
+ if (mediaPanel.style.display !== 'flex') {
86
+ mediaPanel.style.display = 'flex';
87
+ }
88
+ if (resizeHandle.style.display !== 'block') {
89
+ resizeHandle.style.display = 'block';
90
+ }
91
+ }
92
+ }
93
+ export function setupVideoPlayback() {
94
+ // Get references to media elements and controls
95
+ const mediaPanel = document.getElementById('haibun-media-display');
96
+ const resizeHandle = document.getElementById('resize-handle');
97
+ const sequenceDiagram = document.getElementById('sequence-diagram'); // Check inner div for content
98
+ const videoContainer = document.getElementById('haibun-video');
99
+ const logDisplayArea = document.getElementById('haibun-log-display-area'); // Keep this check and cast
100
+ if (!logDisplayArea || !videoContainer || !mediaPanel || !resizeHandle) {
101
+ console.error("Required elements for video playback/layout not found.");
102
+ return; // Exit if essential elements are missing
103
+ }
104
+ // userScrolledManually is now module-level
105
+ // Check if media exists initially (video OR sequence diagram content)
106
+ const existingVideoCheck = videoContainer.querySelector('video');
107
+ if (existingVideoCheck || (sequenceDiagram && sequenceDiagram.hasChildNodes())) {
108
+ showMediaPanelIfNeeded(mediaPanel, resizeHandle);
109
+ }
110
+ // Setup click handlers for log entries to seek video
111
+ logDisplayArea.addEventListener('click', (event) => {
112
+ const target = event.target;
113
+ const logEntry = findLogEntry(target);
114
+ if (logEntry && logEntry.dataset.time) {
115
+ const videoElement = videoContainer.querySelector('video');
116
+ if (videoElement) {
117
+ userScrolledManually = false; // Resume auto-scroll on click/seek
118
+ // Get Monitor start time and Video start offset
119
+ const monitorStartTimeStr = document.body.dataset.startTime;
120
+ const videoStartOffsetStr = document.getElementById('haibun-video-start')?.dataset.start;
121
+ if (!monitorStartTimeStr || !videoStartOffsetStr) {
122
+ console.warn('Monitor start time or video start offset not found. Cannot seek video.');
123
+ return;
124
+ }
125
+ const monitorStartTime = parseInt(monitorStartTimeStr, 10);
126
+ const videoStartOffset = parseInt(videoStartOffsetStr, 10);
127
+ if (isNaN(monitorStartTime) || isNaN(videoStartOffset)) {
128
+ console.warn('Invalid monitor start time or video start offset.');
129
+ return;
130
+ }
131
+ const videoAbsoluteStartTime = monitorStartTime + videoStartOffset;
132
+ // Calculate the time to seek to
133
+ const entryAbsoluteTime = parseInt(logEntry.dataset.time, 10);
134
+ if (isNaN(entryAbsoluteTime)) {
135
+ console.warn('Clicked log entry missing or invalid data-time:', logEntry);
136
+ return;
137
+ }
138
+ // Calculate time relative to video start
139
+ const logRelativeToVideoMs = entryAbsoluteTime - videoAbsoluteStartTime;
140
+ const seekTime = logRelativeToVideoMs / 1000;
141
+ // Corrected variable names in the log message if uncommented later
142
+ // console.log(`Calculated seekTime: ${seekTime}s (Entry: ${entryAbsoluteTime}, Start: ${videoAbsoluteStartTime})`);
143
+ // Seek the video (allow seeking slightly before 0 for precision)
144
+ if (!isNaN(seekTime)) {
145
+ videoElement.currentTime = Math.max(0, seekTime); // Ensure seek time is not negative
146
+ // No need to manually update classes here,
147
+ // the 'seeked' event handler will take care of it.
148
+ }
149
+ }
150
+ }
151
+ });
152
+ // Detect manual scroll
153
+ let scrollTimeout;
154
+ logDisplayArea.addEventListener('scroll', () => {
155
+ const videoElement = videoContainer.querySelector('video'); // Need video element ref here too
156
+ // Use a timeout to avoid setting the flag during programmatic scrolls which might trigger rapid scroll events
157
+ clearTimeout(scrollTimeout);
158
+ scrollTimeout = window.setTimeout(() => {
159
+ // Simpler approach: Any scroll event sets the flag. Play/seek events clear it.
160
+ userScrolledManually = true;
161
+ // console.log('Manual scroll detected, setting flag.');
162
+ }, 150); // Wait 150ms after the last scroll event to set the flag
163
+ });
164
+ // Setup timeupdate handler for video to highlight current step
165
+ const setupVideoTimeUpdateHandler = (videoElement) => {
166
+ let playInterval; // Use number for interval ID, undefined when not set
167
+ let latestCurrentEntry = null; // Track the current entry
168
+ const updateVideoSteps = () => {
169
+ // Get Monitor start time and Video start offset
170
+ const monitorStartTimeStr = document.body.dataset.startTime;
171
+ const videoStartOffsetStr = document.getElementById('haibun-video-start')?.dataset.start;
172
+ if (!monitorStartTimeStr || !videoStartOffsetStr) {
173
+ // console.warn('Monitor start time or video start offset not found during update.');
174
+ return; // Cannot calculate relative times
175
+ }
176
+ const monitorStartTime = parseInt(monitorStartTimeStr, 10);
177
+ const videoStartOffset = parseInt(videoStartOffsetStr, 10);
178
+ if (isNaN(monitorStartTime) || isNaN(videoStartOffset)) {
179
+ // console.warn('Invalid monitor start time or video start offset during update.');
180
+ return; // Cannot calculate relative times
181
+ }
182
+ const videoAbsoluteStartTime = monitorStartTime + videoStartOffset;
183
+ const currentVideoTimeMs = videoElement.currentTime * 1000;
184
+ let currentLatestEntry = null; // Entry to be marked current in this update
185
+ document.querySelectorAll('.haibun-log-entry').forEach(entry => {
186
+ // Clear previous state for all entries first
187
+ entry.classList.remove('haibun-stepper-played', 'haibun-stepper-notplayed', 'haibun-stepper-current');
188
+ const entryTimeStr = entry.dataset.time;
189
+ if (!entryTimeStr)
190
+ return; // Skip entries without time
191
+ const entryAbsoluteTime = parseInt(entryTimeStr, 10);
192
+ if (isNaN(entryAbsoluteTime))
193
+ return; // Skip entries with invalid time
194
+ // Calculate entry time relative to video start
195
+ const logRelativeToVideoMs = entryAbsoluteTime - videoAbsoluteStartTime;
196
+ // Determine played/notplayed status
197
+ if (logRelativeToVideoMs <= currentVideoTimeMs) {
198
+ entry.classList.add('haibun-stepper-played');
199
+ entry.classList.remove('haibun-stepper-notplayed');
200
+ // This entry is a candidate for the current step
201
+ // Update if this entry is later than the current candidate
202
+ if (!currentLatestEntry || entryAbsoluteTime > parseInt(currentLatestEntry.dataset.time || '0', 10)) {
203
+ currentLatestEntry = entry;
204
+ }
205
+ }
206
+ else {
207
+ entry.classList.add('haibun-stepper-notplayed');
208
+ entry.classList.remove('haibun-stepper-played');
209
+ }
210
+ });
211
+ // Mark the actual latest entry as current and scroll if needed
212
+ if (currentLatestEntry) {
213
+ currentLatestEntry.classList.add('haibun-stepper-current');
214
+ // Scroll the current entry into view ONLY if the user hasn't scrolled manually
215
+ // Scroll the current entry into view ONLY if the user hasn't scrolled manually AND it's not already visible
216
+ if (!userScrolledManually && !isElementInViewport(currentLatestEntry)) {
217
+ // console.log('Auto-scrolling to:', currentLatestEntry);
218
+ currentLatestEntry.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); // Use 'nearest'
219
+ }
220
+ else if (userScrolledManually) {
221
+ // console.log('Manual scroll active, not auto-scrolling.');
222
+ } // else: Element is already in viewport, no need to scroll
223
+ latestCurrentEntry = currentLatestEntry; // Update the tracked entry
224
+ }
225
+ else {
226
+ // If no entry is before or at the current time, clear the tracker
227
+ latestCurrentEntry = null;
228
+ }
229
+ };
230
+ // Update state definitively after a seek
231
+ videoElement.addEventListener('seeked', () => {
232
+ // console.log('seeked');
233
+ userScrolledManually = false; // Resume auto-scroll on seek
234
+ // console.log('Seek detected, clearing manual scroll flag.');
235
+ updateVideoSteps();
236
+ });
237
+ // Use interval for smooth updates during playback
238
+ videoElement.addEventListener('play', () => {
239
+ // console.log('play');
240
+ userScrolledManually = false; // Resume auto-scroll on play
241
+ // console.log('Play detected, clearing manual scroll flag.');
242
+ if (playInterval === undefined) { // Prevent multiple intervals
243
+ updateVideoSteps(); // Update immediately on play
244
+ playInterval = window.setInterval(updateVideoSteps, 50); // Update frequently (e.g., 50ms)
245
+ }
246
+ });
247
+ // Clear interval on pause or end
248
+ const clearPlayInterval = () => {
249
+ // console.log('pause/ended');
250
+ if (playInterval !== undefined) {
251
+ clearInterval(playInterval);
252
+ playInterval = undefined;
253
+ updateVideoSteps(); // Ensure final state is correct after pause/end
254
+ }
255
+ };
256
+ videoElement.addEventListener('pause', clearPlayInterval);
257
+ videoElement.addEventListener('ended', clearPlayInterval);
258
+ // Initial update in case video is loaded paused or has an initial time
259
+ updateVideoSteps();
260
+ };
261
+ // --- MutationObserver setup ---
262
+ let existingVideo = videoContainer.querySelector('video'); // Keep tracking var separate
263
+ if (existingVideo) { // Setup handler if video exists initially
264
+ setupVideoTimeUpdateHandler(existingVideo);
265
+ }
266
+ const observer = new MutationObserver((mutations) => {
267
+ mutations.forEach((mutation) => {
268
+ if (mutation.type === 'childList') {
269
+ const newVideo = videoContainer.querySelector('video');
270
+ if (newVideo && newVideo !== existingVideo) {
271
+ console.log('New video detected, setting up handlers and showing panel.');
272
+ // Show panel/handle when new video is added
273
+ showMediaPanelIfNeeded(mediaPanel, resizeHandle);
274
+ setupVideoTimeUpdateHandler(newVideo);
275
+ existingVideo = newVideo; // Update tracked video element
276
+ }
277
+ }
278
+ });
279
+ });
280
+ observer.observe(videoContainer, { childList: true });
281
+ // --- Separate Observer for Sequence Diagram Content ---
282
+ const diagramObserver = new MutationObserver((mutations) => {
283
+ mutations.forEach((mutation) => {
284
+ // Check if nodes were added AND the target is the sequence diagram div
285
+ if (mutation.type === 'childList' && mutation.addedNodes.length > 0 && mutation.target === sequenceDiagram) {
286
+ console.log('Sequence diagram content detected, showing panel.');
287
+ showMediaPanelIfNeeded(mediaPanel, resizeHandle);
288
+ diagramObserver.disconnect(); // Stop observing once content is added
289
+ }
290
+ });
291
+ });
292
+ // Start observing the sequence diagram div for added children (like the SVG)
293
+ if (sequenceDiagram) {
294
+ diagramObserver.observe(sequenceDiagram, { childList: true });
295
+ }
296
+ }
297
+ // Helper function to find the parent log entry element
298
+ function findLogEntry(element) {
299
+ let current = element;
300
+ while (current && !current.classList.contains('haibun-log-entry')) {
301
+ current = current.parentElement;
302
+ }
303
+ return current;
304
+ }
305
+ // Helper function to check if an element is in the viewport
306
+ function isElementInViewport(element) {
307
+ const rect = element.getBoundingClientRect();
308
+ const logDisplayArea = document.getElementById('haibun-log-display-area');
309
+ if (!logDisplayArea)
310
+ return false; // Should not happen, but check
311
+ const logRect = logDisplayArea.getBoundingClientRect();
312
+ // Check if the element is within the visible bounds of the logDisplayArea
313
+ return (rect.top >= logRect.top &&
314
+ rect.left >= logRect.left &&
315
+ rect.bottom <= logRect.bottom &&
316
+ rect.right <= logRect.right);
317
+ }
318
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../src/monitor/controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { TAnyFixme } from "@haibun/core/build/lib/defs.js";
2
+ export declare function disclosureJson(jsonObj: TAnyFixme): HTMLDetailsElement;
3
+ //# sourceMappingURL=disclosureJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosureJson.d.ts","sourceRoot":"","sources":["../../src/monitor/disclosureJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,sBAgChD"}
@@ -0,0 +1,121 @@
1
+ export function disclosureJson(jsonObj) {
2
+ const rootNode = buildRecursiveDetails(jsonObj, 0);
3
+ if (rootNode) {
4
+ if (typeof jsonObj === 'object' && jsonObj !== null) {
5
+ const rootDetails = document.createElement('details');
6
+ // Root should be closed by default
7
+ rootDetails.open = false;
8
+ // Add a class to ensure CSS styling is applied
9
+ rootDetails.className = 'json-root-details';
10
+ const summary = document.createElement('summary');
11
+ // Ensure the summary displays as a list item for proper disclosure triangle
12
+ summary.style.display = 'list-item';
13
+ summary.style.cursor = 'pointer'; // Add pointer cursor to indicate it's clickable
14
+ const count = Array.isArray(jsonObj) ? jsonObj.length : Object.keys(jsonObj).length;
15
+ // Use "JSON result with X keys" format for root
16
+ const countText = Array.isArray(jsonObj)
17
+ ? `${count} ${count === 1 ? 'item' : 'items'}`
18
+ : `${count} ${count === 1 ? 'key' : 'keys'}`;
19
+ summary.innerHTML = `<span class="key root-key">JSON result with ${countText}</span>`;
20
+ rootDetails.appendChild(summary);
21
+ rootDetails.appendChild(rootNode);
22
+ rootDetails.dataset.rawJson = JSON.stringify(jsonObj);
23
+ return rootDetails;
24
+ } // End if (typeof jsonObj === 'object'...)
25
+ } // End if (rootNode)
26
+ // Return undefined or some fallback if rootNode couldn't be built or wasn't an object
27
+ return undefined;
28
+ }
29
+ function appendNode(key, value, isArrayIndex, parentElement, indentLevel = 0) {
30
+ const valueNode = buildRecursiveDetails(value, indentLevel);
31
+ // Fix 2 & 3: Type guard for Element properties
32
+ if (valueNode instanceof Element && valueNode.tagName === 'DIV' && valueNode.classList.contains('details-content')) {
33
+ const details = document.createElement('details');
34
+ details.className = isArrayIndex ? 'json-array-item' : 'json-object-item';
35
+ // Apply indentation to the details element
36
+ details.style.marginLeft = `${indentLevel * 20}px`;
37
+ const summary = document.createElement('summary');
38
+ summary.style.display = 'list-item'; // Ensure the summary displays as a list item for proper disclosure triangle
39
+ summary.style.cursor = 'pointer'; // Add pointer cursor to indicate it's clickable
40
+ const keyClass = isArrayIndex ? 'key index' : 'key';
41
+ const keyText = isArrayIndex ? `[${key}]:` : `${key}:`;
42
+ const valueCount = Array.isArray(value) ? value.length : Object.keys(value).length;
43
+ // More human-friendly type indicators
44
+ const typeIndicator = Array.isArray(value)
45
+ ? `${valueCount} ${valueCount === 1 ? 'Item' : 'Items'}`
46
+ : `${valueCount} ${valueCount === 1 ? 'Key' : 'Keys'}`;
47
+ summary.innerHTML = `<span class="${keyClass}">${keyText}</span> <span class="type-indicator">${typeIndicator}</span>`;
48
+ details.appendChild(summary);
49
+ details.appendChild(valueNode);
50
+ parentElement.appendChild(details);
51
+ }
52
+ else {
53
+ const lineDiv = document.createElement('div');
54
+ lineDiv.className = 'json-line';
55
+ // Apply indentation to primitive values
56
+ lineDiv.style.marginLeft = `${indentLevel * 20}px`;
57
+ const keyClass = isArrayIndex ? 'key index' : 'key';
58
+ const keyText = isArrayIndex ? `[${key}]:` : `${key}:`;
59
+ lineDiv.innerHTML = `<span class="${keyClass}">${keyText}</span> `;
60
+ lineDiv.appendChild(valueNode);
61
+ parentElement.appendChild(lineDiv);
62
+ }
63
+ }
64
+ function buildRecursiveDetails(data, indentLevel = 0) {
65
+ const type = typeof data;
66
+ if (data === null || ['string', 'number', 'boolean', 'undefined'].includes(type)) {
67
+ return createPrimitiveNode(data);
68
+ }
69
+ if (type === 'object') {
70
+ const isArray = Array.isArray(data);
71
+ const containerDiv = document.createElement('div');
72
+ containerDiv.className = 'details-content';
73
+ let isEmpty = true;
74
+ if (isArray) {
75
+ data.forEach((item, index) => {
76
+ isEmpty = false;
77
+ appendNode(index, item, true, containerDiv, indentLevel + 1);
78
+ });
79
+ }
80
+ else {
81
+ Object.keys(data).forEach(key => {
82
+ isEmpty = false;
83
+ appendNode(key, data[key], false, containerDiv, indentLevel + 1);
84
+ });
85
+ }
86
+ if (isEmpty) {
87
+ const emptyIndicator = createEmptyIndicator(isArray ? 'Array' : 'Object');
88
+ // Apply indentation to empty indicators
89
+ emptyIndicator.style.marginLeft = `${indentLevel * 20}px`;
90
+ containerDiv.appendChild(emptyIndicator);
91
+ }
92
+ return containerDiv;
93
+ }
94
+ return document.createTextNode('(Unknown Type)');
95
+ }
96
+ function createPrimitiveNode(value) {
97
+ const span = document.createElement('span');
98
+ span.classList.add('value');
99
+ let displayValue = String(value);
100
+ let typeClass = typeof value; // Fix 4: Ensure typeClass is string
101
+ if (value === null) {
102
+ typeClass = 'null';
103
+ displayValue = 'null';
104
+ }
105
+ else if (typeClass === 'string') {
106
+ displayValue = `"${value}"`;
107
+ }
108
+ else if (typeClass === 'undefined') {
109
+ displayValue = 'undefined';
110
+ }
111
+ span.classList.add(`value-${typeClass}`);
112
+ span.textContent = displayValue;
113
+ return span;
114
+ }
115
+ function createEmptyIndicator(type) {
116
+ const indicator = document.createElement('span');
117
+ indicator.className = 'empty-indicator';
118
+ indicator.textContent = type === 'Array' ? '[] (Empty Array)' : '{} (Empty Object)';
119
+ return indicator;
120
+ }
121
+ //# sourceMappingURL=disclosureJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosureJson.js","sourceRoot":"","sources":["../../src/monitor/disclosureJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { TArtifactHTTPTrace, THTTPTraceContent } from '@haibun/core/build/lib/interfaces/logger.js';
2
+ export declare class SequenceDiagramGenerator {
3
+ private needsUpdate;
4
+ private diagramLines;
5
+ private pageNames;
6
+ private pageCounter;
7
+ private participantAdded;
8
+ private addParticipant;
9
+ processEvent(trace: THTTPTraceContent, httpEvent: TArtifactHTTPTrace['httpEvent'], filters?: {
10
+ request: {
11
+ method: string[];
12
+ accept: string[];
13
+ };
14
+ response: {
15
+ type: string[];
16
+ };
17
+ }): void;
18
+ getDiagram(): string;
19
+ update(): Promise<void>;
20
+ }
21
+ export declare function skipEvent(filters: any, httpEvent: any, serverName: any, { requestingPage, requestingURL, method, status, statusText, headers }: THTTPTraceContent): boolean;
22
+ //# sourceMappingURL=mermaidDiagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaidDiagram.d.ts","sourceRoot":"","sources":["../../src/monitor/mermaidDiagram.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAyBpG,qBAAa,wBAAwB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,gBAAgB,CAA+B;IAGvD,OAAO,CAAC,cAAc;IAOf,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,OAAO;;;;;;;;KAAc,GAAG,IAAI;IAwF/G,UAAU,IAAI,MAAM;IAGd,MAAM;CAsCnB;AACD,wBAAgB,SAAS,CAAC,OAAO,KAAA,EAAE,SAAS,KAAA,EAAE,UAAU,KAAA,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,iBAAiB,WAkClJ"}