@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.
Files changed (60) hide show
  1. package/README.md +439 -88
  2. package/dist/analyzers/a11y-extractor.d.ts +19 -5
  3. package/dist/analyzers/a11y-extractor.d.ts.map +1 -1
  4. package/dist/analyzers/a11y-extractor.js +274 -104
  5. package/dist/analyzers/a11y-extractor.js.map +1 -1
  6. package/dist/analyzers/network-logger.d.ts +20 -2
  7. package/dist/analyzers/network-logger.d.ts.map +1 -1
  8. package/dist/analyzers/network-logger.js +122 -42
  9. package/dist/analyzers/network-logger.js.map +1 -1
  10. package/dist/analyzers/network-patterns.d.ts +73 -0
  11. package/dist/analyzers/network-patterns.d.ts.map +1 -0
  12. package/dist/analyzers/network-patterns.js +316 -0
  13. package/dist/analyzers/network-patterns.js.map +1 -0
  14. package/dist/analyzers/page-notifier.d.ts +40 -0
  15. package/dist/analyzers/page-notifier.d.ts.map +1 -0
  16. package/dist/analyzers/page-notifier.js +198 -0
  17. package/dist/analyzers/page-notifier.js.map +1 -0
  18. package/dist/analyzers/screenshot-capturer.d.ts +73 -0
  19. package/dist/analyzers/screenshot-capturer.d.ts.map +1 -0
  20. package/dist/analyzers/screenshot-capturer.js +190 -0
  21. package/dist/analyzers/screenshot-capturer.js.map +1 -0
  22. package/dist/cli/index.js +15 -6
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/config/defaults.d.ts.map +1 -1
  25. package/dist/config/defaults.js +3 -1
  26. package/dist/config/defaults.js.map +1 -1
  27. package/dist/config/schema.d.ts +8 -3
  28. package/dist/config/schema.d.ts.map +1 -1
  29. package/dist/config/schema.js +7 -2
  30. package/dist/config/schema.js.map +1 -1
  31. package/dist/core/browser-adapter.d.ts.map +1 -1
  32. package/dist/core/browser-adapter.js +0 -2
  33. package/dist/core/browser-adapter.js.map +1 -1
  34. package/dist/core/capture-engine.d.ts +30 -25
  35. package/dist/core/capture-engine.d.ts.map +1 -1
  36. package/dist/core/capture-engine.js +290 -276
  37. package/dist/core/capture-engine.js.map +1 -1
  38. package/dist/core/runtime.d.ts +1 -0
  39. package/dist/core/runtime.d.ts.map +1 -1
  40. package/dist/core/runtime.js +21 -0
  41. package/dist/core/runtime.js.map +1 -1
  42. package/dist/exporters/ai-context-bundler.d.ts +88 -0
  43. package/dist/exporters/ai-context-bundler.d.ts.map +1 -0
  44. package/dist/exporters/ai-context-bundler.js +380 -0
  45. package/dist/exporters/ai-context-bundler.js.map +1 -0
  46. package/dist/security/redactor.d.ts +16 -0
  47. package/dist/security/redactor.d.ts.map +1 -1
  48. package/dist/security/redactor.js +127 -57
  49. package/dist/security/redactor.js.map +1 -1
  50. package/dist/storage/engine.d.ts +24 -21
  51. package/dist/storage/engine.d.ts.map +1 -1
  52. package/dist/storage/engine.js +208 -175
  53. package/dist/storage/engine.js.map +1 -1
  54. package/dist/types/config.d.ts +4 -1
  55. package/dist/types/config.d.ts.map +1 -1
  56. package/dist/types/notifications.d.ts +37 -0
  57. package/dist/types/notifications.d.ts.map +1 -0
  58. package/dist/types/notifications.js +4 -0
  59. package/dist/types/notifications.js.map +1 -0
  60. 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":";;;AAGA,4CAAyC;AAEzC,8EAA8E;AAC9E,oEAAoE;AACpE,4EAA4E;AAC5E,wEAAwE;AACxE,wCAAwC;AACxC,8EAA8E;AAC9E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC,IAAI,EAAE,CAAC;AAET,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAC9E,MAAM,gBAAgB,GAAsC;IAC1D,UAAU,EAAE,yBAAyB;IACrC,OAAO,EAAE,oBAAoB;IAC7B,KAAK,EAAE,kBAAkB;IACzB,OAAO,EAAE,gCAAgC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAa,YAAY;IACN,OAAO,CAAU;IAElC,YAAY,UAAmB,IAAI;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,6EAA6E;IAC7E,aAAa;IACb,6EAA6E;IAE7E;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,IAAU;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAW,EAAE,EAAE;gBAClC,IAAI,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;oBAAE,OAAO;gBAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC9C,KAAK,CAAC,EAAE,GAAG,oBAAoB,CAAC;gBAChC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;gBACxB,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC,EAAE,YAAY,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,iDAAkD,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CACR,IAAU,EACV,KAAwB,EACxB,OAA6B;QAE7B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAKpC,EAAE,EAAE;gBACH,+BAA+B;gBAC/B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC9C,KAAK,CAAC,EAAE,GAAG,oBAAoB,CAAC;oBAChC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;oBACxB,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACjE,CAAC;gBAED,kCAAkC;gBAClC,IAAI,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAuB,CAAC;gBACtE,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACnC,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC;oBACtB,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBAED,qCAAqC;gBACrC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;gBACxC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;gBAEvB,MAAM,WAAW,GACf,KAAK,KAAK,YAAY;oBACpB,CAAC,CAAC,gCAAgC;oBAClC,CAAC,CAAC,EAAE,CAAC;gBAET,EAAE,CAAC,SAAS,GAAG;cACX,WAAW;;oCAEW,OAAO;WAChC,CAAC,IAAI,EAAE,CAAC;gBAET,uCAAuC;gBACvC,MAAM,CAAC,GAAG,MAAa,CAAC;gBACxB,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;oBACvB,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBACjC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,0CAA0C;gBAC1C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBACtB,CAAC,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;wBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAuB,CAAC;wBAC7E,IAAI,OAAO,EAAE,CAAC;4BACZ,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;4BAC5B,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;wBAC1C,CAAC;oBACH,CAAC,EAAE,aAAa,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,EACD,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,CACrD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2DAA2D;YAC3D,eAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,yBAA0B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,IAAU;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvB,MAAM,CAAC,GAAG,MAAa,CAAC;gBACxB,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;oBACvB,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;oBACjC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBACD,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;gBAClD,IAAI,EAAE;oBAAE,EAAE,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,yCAA0C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;CACF;AArID,oCAqIC"}
@@ -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
- await page.goto(finalStartUrl, { waitUntil: 'networkidle' });
117
- // Give a moment for any post-load scripts to run
118
- await new Promise(r => setTimeout(r, 1000));
119
- // Ensure initial page is captured (fallback if events didn't fire)
120
- await runtime.capturePageIfNeeded(page);
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...'));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
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,MAiD5B,CAAC"}
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"}
@@ -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;QACT,QAAQ,EAAE,KAAK;KAChB;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,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"}
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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGzB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGzB,CAAC"}