@shadowcoderr/context-graph 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +439 -88
- package/dist/analyzers/a11y-extractor.d.ts +19 -5
- package/dist/analyzers/a11y-extractor.d.ts.map +1 -1
- package/dist/analyzers/a11y-extractor.js +274 -104
- package/dist/analyzers/a11y-extractor.js.map +1 -1
- package/dist/analyzers/network-logger.d.ts +20 -2
- package/dist/analyzers/network-logger.d.ts.map +1 -1
- package/dist/analyzers/network-logger.js +122 -42
- package/dist/analyzers/network-logger.js.map +1 -1
- package/dist/analyzers/network-patterns.d.ts +73 -0
- package/dist/analyzers/network-patterns.d.ts.map +1 -0
- package/dist/analyzers/network-patterns.js +316 -0
- package/dist/analyzers/network-patterns.js.map +1 -0
- package/dist/analyzers/page-notifier.d.ts +40 -0
- package/dist/analyzers/page-notifier.d.ts.map +1 -0
- package/dist/analyzers/page-notifier.js +198 -0
- package/dist/analyzers/page-notifier.js.map +1 -0
- package/dist/analyzers/screenshot-capturer.d.ts +73 -0
- package/dist/analyzers/screenshot-capturer.d.ts.map +1 -0
- package/dist/analyzers/screenshot-capturer.js +190 -0
- package/dist/analyzers/screenshot-capturer.js.map +1 -0
- package/dist/cli/index.js +15 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +3 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +8 -3
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +7 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/core/browser-adapter.d.ts.map +1 -1
- package/dist/core/browser-adapter.js +0 -2
- package/dist/core/browser-adapter.js.map +1 -1
- package/dist/core/capture-engine.d.ts +30 -25
- package/dist/core/capture-engine.d.ts.map +1 -1
- package/dist/core/capture-engine.js +290 -276
- package/dist/core/capture-engine.js.map +1 -1
- package/dist/core/runtime.d.ts +1 -0
- package/dist/core/runtime.d.ts.map +1 -1
- package/dist/core/runtime.js +21 -0
- package/dist/core/runtime.js.map +1 -1
- package/dist/exporters/ai-context-bundler.d.ts +88 -0
- package/dist/exporters/ai-context-bundler.d.ts.map +1 -0
- package/dist/exporters/ai-context-bundler.js +380 -0
- package/dist/exporters/ai-context-bundler.js.map +1 -0
- package/dist/security/redactor.d.ts +16 -0
- package/dist/security/redactor.d.ts.map +1 -1
- package/dist/security/redactor.js +127 -57
- package/dist/security/redactor.js.map +1 -1
- package/dist/storage/engine.d.ts +24 -21
- package/dist/storage/engine.d.ts.map +1 -1
- package/dist/storage/engine.js +208 -175
- package/dist/storage/engine.js.map +1 -1
- package/dist/types/config.d.ts +4 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/notifications.d.ts +37 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/notifications.js +4 -0
- package/dist/types/notifications.js.map +1 -0
- package/package.json +71 -70
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
import { NotificationState, NotificationOptions } from '../types/notifications';
|
|
3
|
+
/**
|
|
4
|
+
* PageNotifier
|
|
5
|
+
*
|
|
6
|
+
* Injects and manages a lightweight, non-blocking notification overlay directly
|
|
7
|
+
* on the captured web page so users can see at a glance whether ContextGraph is
|
|
8
|
+
* actively processing a page.
|
|
9
|
+
*
|
|
10
|
+
* Design guarantees:
|
|
11
|
+
* - All page.evaluate() calls are wrapped in try-catch; a failure in the
|
|
12
|
+
* notifier never aborts or affects the capture pipeline.
|
|
13
|
+
* - pointer-events: none means the overlay never intercepts user interactions.
|
|
14
|
+
* - When notifications.enabled is false every method is a no-op.
|
|
15
|
+
* - The overlay self-cleans when the page navigates (the DOM is reset).
|
|
16
|
+
*/
|
|
17
|
+
export declare class PageNotifier {
|
|
18
|
+
private readonly enabled;
|
|
19
|
+
constructor(enabled?: boolean);
|
|
20
|
+
/**
|
|
21
|
+
* Injects the notification stylesheet into the page.
|
|
22
|
+
* Called once during setupPage() as an optimistic preload.
|
|
23
|
+
* show() also calls this internally, so injectStyles() is never required
|
|
24
|
+
* before show() — it is purely an optimization.
|
|
25
|
+
*/
|
|
26
|
+
injectStyles(page: Page): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Shows the overlay in the given state.
|
|
29
|
+
* Creates the overlay element if it does not yet exist (e.g. after navigation).
|
|
30
|
+
* Also ensures the stylesheet is injected in the same evaluate() call so the
|
|
31
|
+
* method is fully self-contained.
|
|
32
|
+
*/
|
|
33
|
+
show(page: Page, state: NotificationState, options?: NotificationOptions): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Immediately removes the overlay from the page.
|
|
36
|
+
* Safe to call even if the overlay has already been dismissed.
|
|
37
|
+
*/
|
|
38
|
+
hide(page: Page): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=page-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-notifier.d.ts","sourceRoot":"","sources":["../../src/analyzers/page-notifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAmEhF;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,GAAE,OAAc;IAQnC;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C;;;;;OAKG;IACG,IAAI,CACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAuEhB;;;OAGG;IACG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBtC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PageNotifier = void 0;
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Styles injected as a <style> tag into the captured page's <head>.
|
|
7
|
+
// These are intentionally scoped under the #cg-notifier id to avoid any CSS
|
|
8
|
+
// collision with the host application. pointer-events: none ensures the
|
|
9
|
+
// overlay never intercepts user clicks.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
const NOTIFIER_CSS = `
|
|
12
|
+
#cg-notifier {
|
|
13
|
+
position: fixed;
|
|
14
|
+
top: 16px;
|
|
15
|
+
right: 16px;
|
|
16
|
+
z-index: 2147483647;
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: 8px;
|
|
20
|
+
padding: 10px 16px;
|
|
21
|
+
border-radius: 8px;
|
|
22
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
23
|
+
font-size: 13px;
|
|
24
|
+
font-weight: 500;
|
|
25
|
+
line-height: 1.4;
|
|
26
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18), 0 1px 4px rgba(0, 0, 0, 0.12);
|
|
27
|
+
pointer-events: none;
|
|
28
|
+
opacity: 1;
|
|
29
|
+
transition: opacity 0.35s ease;
|
|
30
|
+
color: #ffffff;
|
|
31
|
+
user-select: none;
|
|
32
|
+
-webkit-user-select: none;
|
|
33
|
+
}
|
|
34
|
+
#cg-notifier[data-cg-state="processing"] { background: #1e1e3f; border-left: 3px solid #6366f1; }
|
|
35
|
+
#cg-notifier[data-cg-state="success"] { background: #14532d; border-left: 3px solid #22c55e; }
|
|
36
|
+
#cg-notifier[data-cg-state="error"] { background: #450a0a; border-left: 3px solid #ef4444; }
|
|
37
|
+
#cg-notifier[data-cg-state="warning"] { background: #451a03; border-left: 3px solid #f97316; }
|
|
38
|
+
#cg-notifier .cg-badge {
|
|
39
|
+
font-size: 10px;
|
|
40
|
+
font-weight: 700;
|
|
41
|
+
letter-spacing: 0.05em;
|
|
42
|
+
opacity: 0.65;
|
|
43
|
+
text-transform: uppercase;
|
|
44
|
+
flex-shrink: 0;
|
|
45
|
+
}
|
|
46
|
+
#cg-notifier .cg-text { flex: 1; }
|
|
47
|
+
.cg-spinner {
|
|
48
|
+
width: 13px;
|
|
49
|
+
height: 13px;
|
|
50
|
+
border: 2px solid rgba(255, 255, 255, 0.25);
|
|
51
|
+
border-top-color: #ffffff;
|
|
52
|
+
border-radius: 50%;
|
|
53
|
+
animation: cg-spin 0.75s linear infinite;
|
|
54
|
+
flex-shrink: 0;
|
|
55
|
+
}
|
|
56
|
+
@keyframes cg-spin { to { transform: rotate(360deg); } }
|
|
57
|
+
`.trim();
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Default messages for each state
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
const DEFAULT_MESSAGES = {
|
|
62
|
+
processing: 'ContextGraph capturing…',
|
|
63
|
+
success: '✓ Capture complete',
|
|
64
|
+
error: '⚠ Capture failed',
|
|
65
|
+
warning: 'ContextGraph still processing…',
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* PageNotifier
|
|
69
|
+
*
|
|
70
|
+
* Injects and manages a lightweight, non-blocking notification overlay directly
|
|
71
|
+
* on the captured web page so users can see at a glance whether ContextGraph is
|
|
72
|
+
* actively processing a page.
|
|
73
|
+
*
|
|
74
|
+
* Design guarantees:
|
|
75
|
+
* - All page.evaluate() calls are wrapped in try-catch; a failure in the
|
|
76
|
+
* notifier never aborts or affects the capture pipeline.
|
|
77
|
+
* - pointer-events: none means the overlay never intercepts user interactions.
|
|
78
|
+
* - When notifications.enabled is false every method is a no-op.
|
|
79
|
+
* - The overlay self-cleans when the page navigates (the DOM is reset).
|
|
80
|
+
*/
|
|
81
|
+
class PageNotifier {
|
|
82
|
+
enabled;
|
|
83
|
+
constructor(enabled = true) {
|
|
84
|
+
this.enabled = enabled;
|
|
85
|
+
}
|
|
86
|
+
// --------------------------------------------------------------------------
|
|
87
|
+
// Public API
|
|
88
|
+
// --------------------------------------------------------------------------
|
|
89
|
+
/**
|
|
90
|
+
* Injects the notification stylesheet into the page.
|
|
91
|
+
* Called once during setupPage() as an optimistic preload.
|
|
92
|
+
* show() also calls this internally, so injectStyles() is never required
|
|
93
|
+
* before show() — it is purely an optimization.
|
|
94
|
+
*/
|
|
95
|
+
async injectStyles(page) {
|
|
96
|
+
if (!this.enabled)
|
|
97
|
+
return;
|
|
98
|
+
try {
|
|
99
|
+
await page.evaluate((css) => {
|
|
100
|
+
if (document.getElementById('cg-notifier-styles'))
|
|
101
|
+
return;
|
|
102
|
+
const style = document.createElement('style');
|
|
103
|
+
style.id = 'cg-notifier-styles';
|
|
104
|
+
style.textContent = css;
|
|
105
|
+
(document.head || document.documentElement).appendChild(style);
|
|
106
|
+
}, NOTIFIER_CSS);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
logger_1.logger.debug(`PageNotifier.injectStyles failed (non-fatal): ${error.message}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Shows the overlay in the given state.
|
|
114
|
+
* Creates the overlay element if it does not yet exist (e.g. after navigation).
|
|
115
|
+
* Also ensures the stylesheet is injected in the same evaluate() call so the
|
|
116
|
+
* method is fully self-contained.
|
|
117
|
+
*/
|
|
118
|
+
async show(page, state, options) {
|
|
119
|
+
if (!this.enabled)
|
|
120
|
+
return;
|
|
121
|
+
const message = options?.message ?? DEFAULT_MESSAGES[state];
|
|
122
|
+
const autoDismissMs = options?.autoDismissMs ?? (state === 'success' ? 4000 : 0);
|
|
123
|
+
try {
|
|
124
|
+
await page.evaluate(({ css, state, message, autoDismissMs }) => {
|
|
125
|
+
// Ensure stylesheet is present
|
|
126
|
+
if (!document.getElementById('cg-notifier-styles')) {
|
|
127
|
+
const style = document.createElement('style');
|
|
128
|
+
style.id = 'cg-notifier-styles';
|
|
129
|
+
style.textContent = css;
|
|
130
|
+
(document.head || document.documentElement).appendChild(style);
|
|
131
|
+
}
|
|
132
|
+
// Create or reuse overlay element
|
|
133
|
+
let el = document.getElementById('cg-notifier');
|
|
134
|
+
if (!el) {
|
|
135
|
+
el = document.createElement('div');
|
|
136
|
+
el.id = 'cg-notifier';
|
|
137
|
+
(document.body || document.documentElement).appendChild(el);
|
|
138
|
+
}
|
|
139
|
+
// Update state attribute and content
|
|
140
|
+
el.setAttribute('data-cg-state', state);
|
|
141
|
+
el.style.opacity = '1';
|
|
142
|
+
const spinnerHtml = state === 'processing'
|
|
143
|
+
? '<div class="cg-spinner"></div>'
|
|
144
|
+
: '';
|
|
145
|
+
el.innerHTML = `
|
|
146
|
+
${spinnerHtml}
|
|
147
|
+
<span class="cg-badge">ContextGraph</span>
|
|
148
|
+
<span class="cg-text">${message}</span>
|
|
149
|
+
`.trim();
|
|
150
|
+
// Clear any pending auto-dismiss timer
|
|
151
|
+
const w = window;
|
|
152
|
+
if (w.__cgDismissTimer) {
|
|
153
|
+
clearTimeout(w.__cgDismissTimer);
|
|
154
|
+
w.__cgDismissTimer = null;
|
|
155
|
+
}
|
|
156
|
+
// Set new auto-dismiss timer if requested
|
|
157
|
+
if (autoDismissMs > 0) {
|
|
158
|
+
w.__cgDismissTimer = setTimeout(() => {
|
|
159
|
+
const overlay = document.getElementById('cg-notifier');
|
|
160
|
+
if (overlay) {
|
|
161
|
+
overlay.style.opacity = '0';
|
|
162
|
+
setTimeout(() => overlay.remove(), 350);
|
|
163
|
+
}
|
|
164
|
+
}, autoDismissMs);
|
|
165
|
+
}
|
|
166
|
+
}, { css: NOTIFIER_CSS, state, message, autoDismissMs });
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
// Non-fatal: the page may be navigating or already closed.
|
|
170
|
+
logger_1.logger.debug(`PageNotifier.show(${state}) failed (non-fatal): ${error.message}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Immediately removes the overlay from the page.
|
|
175
|
+
* Safe to call even if the overlay has already been dismissed.
|
|
176
|
+
*/
|
|
177
|
+
async hide(page) {
|
|
178
|
+
if (!this.enabled)
|
|
179
|
+
return;
|
|
180
|
+
try {
|
|
181
|
+
await page.evaluate(() => {
|
|
182
|
+
const w = window;
|
|
183
|
+
if (w.__cgDismissTimer) {
|
|
184
|
+
clearTimeout(w.__cgDismissTimer);
|
|
185
|
+
w.__cgDismissTimer = null;
|
|
186
|
+
}
|
|
187
|
+
const el = document.getElementById('cg-notifier');
|
|
188
|
+
if (el)
|
|
189
|
+
el.remove();
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
logger_1.logger.debug(`PageNotifier.hide failed (non-fatal): ${error.message}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
exports.PageNotifier = PageNotifier;
|
|
198
|
+
//# sourceMappingURL=page-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-notifier.js","sourceRoot":"","sources":["../../src/analyzers/page-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Page } from '@playwright/test';
|
|
2
|
+
export interface ScreenshotOptions {
|
|
3
|
+
fullPage: boolean;
|
|
4
|
+
format: 'png' | 'jpeg' | 'webp';
|
|
5
|
+
quality?: number;
|
|
6
|
+
elementTargeting: boolean;
|
|
7
|
+
maxElements: number;
|
|
8
|
+
timeout: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ScreenshotResult {
|
|
11
|
+
fullPagePath?: string | undefined;
|
|
12
|
+
elementPaths: Array<{
|
|
13
|
+
elementId: string;
|
|
14
|
+
path: string;
|
|
15
|
+
selector: string;
|
|
16
|
+
label?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
capturedAt: string;
|
|
19
|
+
dimensions?: {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
} | undefined;
|
|
23
|
+
}
|
|
24
|
+
export declare class ScreenshotCapturer {
|
|
25
|
+
private options;
|
|
26
|
+
constructor(options?: Partial<ScreenshotOptions>);
|
|
27
|
+
/**
|
|
28
|
+
* Capture a full-page screenshot and return the saved path, or null on failure.
|
|
29
|
+
*/
|
|
30
|
+
captureFullPage(page: Page, outputDir: string, _captureId: string): Promise<string | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Capture individual element screenshots for key interactive elements.
|
|
33
|
+
* Elements that are not visible, off-screen, or zero-size are skipped gracefully.
|
|
34
|
+
*/
|
|
35
|
+
captureElementScreenshots(page: Page, outputDir: string, _captureId: string, elements: Array<{
|
|
36
|
+
elementId: string;
|
|
37
|
+
selector: string;
|
|
38
|
+
label?: string;
|
|
39
|
+
}>): Promise<ScreenshotResult['elementPaths']>;
|
|
40
|
+
/**
|
|
41
|
+
* Orchestrates capturing screenshots for a page. Returns a ScreenshotResult
|
|
42
|
+
* with all paths. The caller is responsible for creating `pageDir`.
|
|
43
|
+
*/
|
|
44
|
+
capturePageScreenshots(page: Page, pageDir: string, captureId: string, interactiveElements?: Array<{
|
|
45
|
+
elementId: string;
|
|
46
|
+
selector: string;
|
|
47
|
+
label?: string;
|
|
48
|
+
}>): Promise<ScreenshotResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Build a list of element descriptors suitable for element screenshot capture
|
|
51
|
+
* from locators data.
|
|
52
|
+
*/
|
|
53
|
+
static buildElementTargets(locatorsElements: Array<{
|
|
54
|
+
elementId: string;
|
|
55
|
+
tagName: string;
|
|
56
|
+
text?: string;
|
|
57
|
+
attributes: Record<string, any>;
|
|
58
|
+
computedState: {
|
|
59
|
+
isVisible: boolean;
|
|
60
|
+
isEnabled: boolean;
|
|
61
|
+
};
|
|
62
|
+
locators: Array<{
|
|
63
|
+
strategy: string;
|
|
64
|
+
value: string;
|
|
65
|
+
isUnique?: boolean;
|
|
66
|
+
}>;
|
|
67
|
+
}>): Array<{
|
|
68
|
+
elementId: string;
|
|
69
|
+
selector: string;
|
|
70
|
+
label?: string;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=screenshot-capturer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-capturer.d.ts","sourceRoot":"","sources":["../../src/analyzers/screenshot-capturer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAKxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,KAAK,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,SAAS,CAAC;CACf;AAWD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAIhD;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6BhG;;;OAGG;IACG,yBAAyB,CAC7B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAmD5C;;;OAGG;IACG,sBAAsB,CAC1B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,mBAAmB,GAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAM,GACvF,OAAO,CAAC,gBAAgB,CAAC;IAqC5B;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CACxB,gBAAgB,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,aAAa,EAAE;YAAE,SAAS,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;QAC1D,QAAQ,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KAC1E,CAAC,GACD,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA0BlE"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ScreenshotCapturer = void 0;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logger_1 = require("../utils/logger");
|
|
40
|
+
const DEFAULT_OPTIONS = {
|
|
41
|
+
fullPage: true,
|
|
42
|
+
format: 'png',
|
|
43
|
+
quality: 90,
|
|
44
|
+
elementTargeting: false,
|
|
45
|
+
maxElements: 10,
|
|
46
|
+
timeout: 15000,
|
|
47
|
+
};
|
|
48
|
+
class ScreenshotCapturer {
|
|
49
|
+
options;
|
|
50
|
+
constructor(options) {
|
|
51
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Capture a full-page screenshot and return the saved path, or null on failure.
|
|
55
|
+
*/
|
|
56
|
+
async captureFullPage(page, outputDir, _captureId) {
|
|
57
|
+
try {
|
|
58
|
+
await fs.ensureDir(outputDir);
|
|
59
|
+
const filename = `screenshot.${this.options.format}`;
|
|
60
|
+
const filepath = path.join(outputDir, filename);
|
|
61
|
+
const screenshotOpts = {
|
|
62
|
+
path: filepath,
|
|
63
|
+
fullPage: this.options.fullPage,
|
|
64
|
+
type: this.options.format === 'webp' ? 'png' : this.options.format, // Playwright screenshot doesn't support webp directly in some versions, fallback to png for type if it's webp or just cast to any
|
|
65
|
+
animations: 'disabled',
|
|
66
|
+
timeout: this.options.timeout,
|
|
67
|
+
};
|
|
68
|
+
// quality only applies to lossy formats
|
|
69
|
+
if (this.options.format !== 'png' && this.options.quality !== undefined) {
|
|
70
|
+
screenshotOpts.quality = this.options.quality;
|
|
71
|
+
}
|
|
72
|
+
await page.screenshot(screenshotOpts);
|
|
73
|
+
logger_1.logger.info(`Full-page screenshot saved: ${filepath}`);
|
|
74
|
+
return filepath;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logger_1.logger.warn(`Failed to capture full-page screenshot: ${error.message}`);
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Capture individual element screenshots for key interactive elements.
|
|
83
|
+
* Elements that are not visible, off-screen, or zero-size are skipped gracefully.
|
|
84
|
+
*/
|
|
85
|
+
async captureElementScreenshots(page, outputDir, _captureId, elements) {
|
|
86
|
+
const results = [];
|
|
87
|
+
await fs.ensureDir(outputDir);
|
|
88
|
+
const batch = elements.slice(0, this.options.maxElements);
|
|
89
|
+
for (const element of batch) {
|
|
90
|
+
try {
|
|
91
|
+
const locator = page.locator(element.selector).first();
|
|
92
|
+
const count = await locator.count().catch(() => 0);
|
|
93
|
+
if (count === 0)
|
|
94
|
+
continue;
|
|
95
|
+
const isVisible = await locator.isVisible({ timeout: 2000 }).catch(() => false);
|
|
96
|
+
if (!isVisible)
|
|
97
|
+
continue;
|
|
98
|
+
const box = await locator.boundingBox().catch(() => null);
|
|
99
|
+
if (!box || box.width === 0 || box.height === 0)
|
|
100
|
+
continue;
|
|
101
|
+
const safe = element.elementId.replace(/[^a-z0-9_-]/gi, '_');
|
|
102
|
+
const filename = `element_${safe}.${this.options.format}`;
|
|
103
|
+
const filepath = path.join(outputDir, filename);
|
|
104
|
+
const eleOpts = {
|
|
105
|
+
path: filepath,
|
|
106
|
+
type: this.options.format === 'webp' ? 'png' : this.options.format,
|
|
107
|
+
animations: 'disabled',
|
|
108
|
+
timeout: this.options.timeout,
|
|
109
|
+
};
|
|
110
|
+
if (this.options.format !== 'png' && this.options.quality !== undefined) {
|
|
111
|
+
eleOpts.quality = this.options.quality;
|
|
112
|
+
}
|
|
113
|
+
await locator.screenshot(eleOpts);
|
|
114
|
+
results.push({
|
|
115
|
+
elementId: element.elementId,
|
|
116
|
+
path: filepath,
|
|
117
|
+
selector: element.selector,
|
|
118
|
+
label: element.label || undefined
|
|
119
|
+
});
|
|
120
|
+
logger_1.logger.debug(`Element screenshot saved: ${filepath}`);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
logger_1.logger.debug(`Skipping element screenshot (${element.elementId}): ${error.message}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return results;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Orchestrates capturing screenshots for a page. Returns a ScreenshotResult
|
|
130
|
+
* with all paths. The caller is responsible for creating `pageDir`.
|
|
131
|
+
*/
|
|
132
|
+
async capturePageScreenshots(page, pageDir, captureId, interactiveElements = []) {
|
|
133
|
+
const screenshotsDir = path.join(pageDir, 'screenshots');
|
|
134
|
+
const result = {
|
|
135
|
+
elementPaths: [],
|
|
136
|
+
capturedAt: new Date().toISOString(),
|
|
137
|
+
};
|
|
138
|
+
// Full-page screenshot
|
|
139
|
+
const fullPagePath = await this.captureFullPage(page, screenshotsDir, captureId);
|
|
140
|
+
if (fullPagePath) {
|
|
141
|
+
result.fullPagePath = fullPagePath;
|
|
142
|
+
// Attempt to read dimensions via viewport
|
|
143
|
+
try {
|
|
144
|
+
const vp = page.viewportSize();
|
|
145
|
+
if (vp) {
|
|
146
|
+
result.dimensions = { width: vp.width, height: vp.height };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
logger_1.logger.debug(`Failed to get viewport size: ${error.message}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Optional element-level screenshots
|
|
154
|
+
if (this.options.elementTargeting && interactiveElements.length > 0) {
|
|
155
|
+
const elementsDir = path.join(screenshotsDir, 'elements');
|
|
156
|
+
result.elementPaths = await this.captureElementScreenshots(page, elementsDir, captureId, interactiveElements);
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Build a list of element descriptors suitable for element screenshot capture
|
|
162
|
+
* from locators data.
|
|
163
|
+
*/
|
|
164
|
+
static buildElementTargets(locatorsElements) {
|
|
165
|
+
return locatorsElements
|
|
166
|
+
.filter(el => el.computedState.isVisible && el.computedState.isEnabled)
|
|
167
|
+
.filter(el => ['button', 'a', 'input', 'select', 'textarea'].includes(el.tagName))
|
|
168
|
+
.map(el => {
|
|
169
|
+
// Prefer a unique locator or fall back to the first available
|
|
170
|
+
const best = el.locators.find(l => l.isUnique && l.strategy === 'testid') ||
|
|
171
|
+
el.locators.find(l => l.isUnique && l.strategy === 'role') ||
|
|
172
|
+
el.locators.find(l => l.isUnique) ||
|
|
173
|
+
el.locators[0];
|
|
174
|
+
if (!best)
|
|
175
|
+
return null;
|
|
176
|
+
return {
|
|
177
|
+
elementId: el.elementId,
|
|
178
|
+
selector: el.attributes?.['data-testid']
|
|
179
|
+
? `[data-testid="${el.attributes['data-testid']}"]`
|
|
180
|
+
: el.attributes?.id
|
|
181
|
+
? `#${el.attributes.id}`
|
|
182
|
+
: best.value,
|
|
183
|
+
label: el.text?.trim().substring(0, 40) || el.attributes?.['aria-label'] || undefined,
|
|
184
|
+
};
|
|
185
|
+
})
|
|
186
|
+
.filter(Boolean);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.ScreenshotCapturer = ScreenshotCapturer;
|
|
190
|
+
//# sourceMappingURL=screenshot-capturer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-capturer.js","sourceRoot":"","sources":["../../src/analyzers/screenshot-capturer.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -113,13 +113,22 @@ program.action(async (startUrl, options) => {
|
|
|
113
113
|
await runtime.setupPage(page);
|
|
114
114
|
if (finalStartUrl) {
|
|
115
115
|
spinner.text = `Navigating to ${finalStartUrl}...`;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
116
|
+
try {
|
|
117
|
+
await page.goto(finalStartUrl, { waitUntil: 'domcontentloaded' });
|
|
118
|
+
spinner.succeed(`Navigated to ${finalStartUrl}`);
|
|
119
|
+
// Give a moment for any post-load scripts to run
|
|
120
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
121
|
+
// Ensure initial page is captured (fallback if events didn't fire)
|
|
122
|
+
await runtime.capturePageIfNeeded(page);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
spinner.fail(`Failed to navigate to ${finalStartUrl}`);
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
spinner.stop();
|
|
121
131
|
}
|
|
122
|
-
spinner.stop();
|
|
123
132
|
console.log(chalk_1.default.green('✓ Browser ready!'));
|
|
124
133
|
console.log(chalk_1.default.blue('Navigate through the application. Each page will be captured automatically.'));
|
|
125
134
|
console.log(chalk_1.default.yellow('Press Ctrl+C to stop and save all data...'));
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAEA,sCAAsC;;;;;AAEtC,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,wDAAgC;AAChC,6CAAiE;AACjE,6CAA8C;AAC9C,oDAAiD;AACjD,4CAAyC;AACzC,8CAA8C;AAE9C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,IAAA,oBAAU,GAAE,CAAC,CAAC;AAEzB,OAAO;KACJ,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,EAAE,SAAS,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,wBAAwB,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;KACxD,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,EAAE,WAAW,CAAC;KACjF,MAAM,CAAC,YAAY,EAAE,sBAAsB,EAAE,KAAK,CAAC;KACnD,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,CAAC;KACxD,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACjD,MAAM,CAAC,oBAAoB,EAAE,gHAAgH,EAAE,KAAK,CAAC;KACrJ,MAAM,CAAC,WAAW,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;AAExD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IACzC,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,eAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,YAAY,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,MAAM,GAAG,MAAM,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAE1C,mCAAmC;QACnC,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9D,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,aAAa;YAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;QACtE,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QAC9D,IAAI,OAAO,CAAC,OAAO;YAAE,eAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ;QAE/C,8BAA8B;QAC9B,IAAI,IAAiB,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnE,IAAI,GAAG,OAAO,CAAC,IAAmB,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,wBAAwB;oBACjC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,SAAS,EAAE;wBACvD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,UAAU,EAAE;qBAC1D;iBACF;aACF,CAAC,CAAC;YACH,IAAI,GAAG,WAAW,CAAC,IAAmB,CAAC;QACzC,CAAC;QAED,yEAAyE;QACzE,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC;QAC5C,IAAI,aAAa,IAAI,CAAC,IAAA,uBAAU,EAAC,aAAa,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,qBAAqB;oBAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,KAAK,CAAC,IAAI,0BAA0B;iBACrE;aACF,CAAC,CAAC;YACH,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;QAC9B,CAAC;QAED,qBAAqB;QACrB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,2BAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAE3B,uBAAuB;QACvB,IAAI,IAAI,KAAK,qBAAW,CAAC,QAAQ,EAAE,CAAC;YAClC,2CAA2C;YAC3C,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YACvC,MAAM,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACnG,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,iBAAiB;QACjB,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAErD,2BAA2B;QAC3B,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,iBAAiB,aAAa,KAAK,CAAC;YACnD,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,MAmD5B,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -10,7 +10,6 @@ exports.DEFAULT_CONFIG = {
|
|
|
10
10
|
height: 1080,
|
|
11
11
|
},
|
|
12
12
|
slowMo: 0,
|
|
13
|
-
devtools: false,
|
|
14
13
|
},
|
|
15
14
|
capture: {
|
|
16
15
|
screenshots: {
|
|
@@ -38,6 +37,9 @@ exports.DEFAULT_CONFIG = {
|
|
|
38
37
|
minOccurrences: 1,
|
|
39
38
|
maxComponents: 1000,
|
|
40
39
|
},
|
|
40
|
+
notifications: {
|
|
41
|
+
enabled: true,
|
|
42
|
+
},
|
|
41
43
|
forceCapture: false,
|
|
42
44
|
},
|
|
43
45
|
security: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";;;AAGa,QAAA,cAAc,GAAW;IACpC,OAAO,EAAE;QACP,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACR,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb;QACD,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";;;AAGa,QAAA,cAAc,GAAW;IACpC,OAAO,EAAE;QACP,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACR,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb;QACD,MAAM,EAAE,CAAC;KACV;IACD,OAAO,EAAE;QACP,WAAW,EAAE;YACX,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,KAAK;SACnB;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK;SACrB;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,GAAG;YAChB,uBAAuB,EAAE,CAAC;YAC1B,uBAAuB,EAAE,IAAI;SAC9B;QACD,UAAU,EAAE;YACV,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,IAAI;SACpB;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI;SACd;QACD,YAAY,EAAE,KAAK;KACpB;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC;QAC5C,aAAa,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC;QACvD,cAAc,EAAE,EAAE;KACnB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,wBAAwB;QACnC,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,IAAI;KACjB;CACF,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -25,9 +25,6 @@ export declare const CONFIG_SCHEMA: {
|
|
|
25
25
|
slowMo: {
|
|
26
26
|
type: string;
|
|
27
27
|
};
|
|
28
|
-
devtools: {
|
|
29
|
-
type: string;
|
|
30
|
-
};
|
|
31
28
|
};
|
|
32
29
|
required: string[];
|
|
33
30
|
};
|
|
@@ -104,6 +101,14 @@ export declare const CONFIG_SCHEMA: {
|
|
|
104
101
|
};
|
|
105
102
|
};
|
|
106
103
|
};
|
|
104
|
+
notifications: {
|
|
105
|
+
type: string;
|
|
106
|
+
properties: {
|
|
107
|
+
enabled: {
|
|
108
|
+
type: string;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
};
|
|
107
112
|
forceCapture: {
|
|
108
113
|
type: string;
|
|
109
114
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGzB,CAAC"}
|