cbrowser 7.3.0 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/analysis/bug-hunter.d.ts +32 -0
  2. package/dist/analysis/bug-hunter.d.ts.map +1 -0
  3. package/dist/analysis/bug-hunter.js +106 -0
  4. package/dist/analysis/bug-hunter.js.map +1 -0
  5. package/dist/analysis/chaos-testing.d.ts +41 -0
  6. package/dist/analysis/chaos-testing.d.ts.map +1 -0
  7. package/dist/analysis/chaos-testing.js +87 -0
  8. package/dist/analysis/chaos-testing.js.map +1 -0
  9. package/dist/analysis/index.d.ts +10 -0
  10. package/dist/analysis/index.d.ts.map +1 -0
  11. package/dist/analysis/index.js +26 -0
  12. package/dist/analysis/index.js.map +1 -0
  13. package/dist/analysis/natural-language.d.ts +43 -0
  14. package/dist/analysis/natural-language.d.ts.map +1 -0
  15. package/dist/analysis/natural-language.js +205 -0
  16. package/dist/analysis/natural-language.js.map +1 -0
  17. package/dist/analysis/persona-comparison.d.ts +31 -0
  18. package/dist/analysis/persona-comparison.d.ts.map +1 -0
  19. package/dist/analysis/persona-comparison.js +217 -0
  20. package/dist/analysis/persona-comparison.js.map +1 -0
  21. package/dist/browser.d.ts +1 -411
  22. package/dist/browser.d.ts.map +1 -1
  23. package/dist/browser.js +0 -4745
  24. package/dist/browser.js.map +1 -1
  25. package/dist/cli.js +64 -56
  26. package/dist/cli.js.map +1 -1
  27. package/dist/daemon.d.ts.map +1 -1
  28. package/dist/daemon.js +2 -1
  29. package/dist/daemon.js.map +1 -1
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/mcp-server.d.ts.map +1 -1
  35. package/dist/mcp-server.js +406 -1
  36. package/dist/mcp-server.js.map +1 -1
  37. package/dist/performance/index.d.ts +7 -0
  38. package/dist/performance/index.d.ts.map +1 -0
  39. package/dist/performance/index.js +23 -0
  40. package/dist/performance/index.js.map +1 -0
  41. package/dist/performance/metrics.d.ts +49 -0
  42. package/dist/performance/metrics.d.ts.map +1 -0
  43. package/dist/performance/metrics.js +386 -0
  44. package/dist/performance/metrics.js.map +1 -0
  45. package/dist/testing/coverage.d.ts +39 -0
  46. package/dist/testing/coverage.d.ts.map +1 -0
  47. package/dist/testing/coverage.js +713 -0
  48. package/dist/testing/coverage.js.map +1 -0
  49. package/dist/testing/flaky-detection.d.ts +28 -0
  50. package/dist/testing/flaky-detection.d.ts.map +1 -0
  51. package/dist/testing/flaky-detection.js +332 -0
  52. package/dist/testing/flaky-detection.js.map +1 -0
  53. package/dist/testing/index.d.ts +10 -0
  54. package/dist/testing/index.d.ts.map +1 -0
  55. package/dist/testing/index.js +26 -0
  56. package/dist/testing/index.js.map +1 -0
  57. package/dist/testing/nl-test-suite.d.ts +70 -0
  58. package/dist/testing/nl-test-suite.d.ts.map +1 -0
  59. package/dist/testing/nl-test-suite.js +427 -0
  60. package/dist/testing/nl-test-suite.js.map +1 -0
  61. package/dist/testing/test-repair.d.ts +36 -0
  62. package/dist/testing/test-repair.d.ts.map +1 -0
  63. package/dist/testing/test-repair.js +528 -0
  64. package/dist/testing/test-repair.js.map +1 -0
  65. package/dist/visual/ab-comparison.d.ts +23 -0
  66. package/dist/visual/ab-comparison.d.ts.map +1 -0
  67. package/dist/visual/ab-comparison.js +366 -0
  68. package/dist/visual/ab-comparison.js.map +1 -0
  69. package/dist/visual/cross-browser.d.ts +41 -0
  70. package/dist/visual/cross-browser.d.ts.map +1 -0
  71. package/dist/visual/cross-browser.js +442 -0
  72. package/dist/visual/cross-browser.js.map +1 -0
  73. package/dist/visual/index.d.ts +10 -0
  74. package/dist/visual/index.d.ts.map +1 -0
  75. package/dist/visual/index.js +26 -0
  76. package/dist/visual/index.js.map +1 -0
  77. package/dist/visual/regression.d.ts +55 -0
  78. package/dist/visual/regression.d.ts.map +1 -0
  79. package/dist/visual/regression.js +616 -0
  80. package/dist/visual/regression.js.map +1 -0
  81. package/dist/visual/responsive.d.ts +27 -0
  82. package/dist/visual/responsive.d.ts.map +1 -0
  83. package/dist/visual/responsive.js +450 -0
  84. package/dist/visual/responsive.js.map +1 -0
  85. package/package.json +32 -3
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Performance Regression Detection (v6.4.0)
3
+ *
4
+ * Performance baseline management and regression detection for CBrowser.
5
+ */
6
+ import type { PerformanceBaseline, PerformanceRegressionThresholds, PerformanceRegressionResult } from "../types.js";
7
+ export interface PerformanceBaselineOptions {
8
+ /** Number of runs to average (default: 3) */
9
+ runs?: number;
10
+ /** Human-readable name for baseline */
11
+ name?: string;
12
+ /** Headless mode */
13
+ headless?: boolean;
14
+ /** Device to emulate */
15
+ device?: string;
16
+ /** Network throttling */
17
+ throttle?: "3g" | "4g" | "wifi";
18
+ }
19
+ export interface PerformanceRegressionOptions {
20
+ /** Regression thresholds */
21
+ thresholds?: PerformanceRegressionThresholds;
22
+ /** Headless mode */
23
+ headless?: boolean;
24
+ }
25
+ /**
26
+ * Capture a performance baseline for a URL
27
+ */
28
+ export declare function capturePerformanceBaseline(url: string, options?: PerformanceBaselineOptions): Promise<PerformanceBaseline>;
29
+ /**
30
+ * List all saved performance baselines
31
+ */
32
+ export declare function listPerformanceBaselines(): PerformanceBaseline[];
33
+ /**
34
+ * Load a specific baseline by ID or name
35
+ */
36
+ export declare function loadPerformanceBaseline(idOrName: string): PerformanceBaseline | null;
37
+ /**
38
+ * Delete a performance baseline
39
+ */
40
+ export declare function deletePerformanceBaseline(idOrName: string): boolean;
41
+ /**
42
+ * Compare current performance against a baseline
43
+ */
44
+ export declare function detectPerformanceRegression(url: string, baselineIdOrName: string, options?: PerformanceRegressionOptions): Promise<PerformanceRegressionResult>;
45
+ /**
46
+ * Format a performance regression report
47
+ */
48
+ export declare function formatPerformanceRegressionReport(result: PerformanceRegressionResult): string;
49
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/performance/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,mBAAmB,EACnB,+BAA+B,EAG/B,2BAA2B,EAE5B,MAAM,aAAa,CAAC;AAqBrB,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,+BAA+B,CAAC;IAC7C,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,mBAAmB,CAAC,CAyE9B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,mBAAmB,EAAE,CAqBhE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAcpF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYnE;AAMD;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CAqHtC;AAMD;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CAyH7F"}
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ /**
3
+ * Performance Regression Detection (v6.4.0)
4
+ *
5
+ * Performance baseline management and regression detection for CBrowser.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.capturePerformanceBaseline = capturePerformanceBaseline;
9
+ exports.listPerformanceBaselines = listPerformanceBaselines;
10
+ exports.loadPerformanceBaseline = loadPerformanceBaseline;
11
+ exports.deletePerformanceBaseline = deletePerformanceBaseline;
12
+ exports.detectPerformanceRegression = detectPerformanceRegression;
13
+ exports.formatPerformanceRegressionReport = formatPerformanceRegressionReport;
14
+ const fs_1 = require("fs");
15
+ const path_1 = require("path");
16
+ const browser_js_1 = require("../browser.js");
17
+ const config_js_1 = require("../config.js");
18
+ // ============================================================================
19
+ // Constants
20
+ // ============================================================================
21
+ const DEFAULT_REGRESSION_THRESHOLDS = {
22
+ lcp: 20, // 20% increase
23
+ fid: 50, // 50% increase
24
+ cls: 0.1, // Absolute increase of 0.1
25
+ fcp: 20, // 20% increase
26
+ ttfb: 30, // 30% increase
27
+ tti: 25, // 25% increase
28
+ tbt: 50, // 50% increase
29
+ transferSize: 25, // 25% increase
30
+ };
31
+ // ============================================================================
32
+ // Baseline Management Functions
33
+ // ============================================================================
34
+ /**
35
+ * Capture a performance baseline for a URL
36
+ */
37
+ async function capturePerformanceBaseline(url, options = {}) {
38
+ const { runs = 3, name, headless = true, device, throttle } = options;
39
+ const paths = (0, config_js_1.getPaths)();
40
+ (0, config_js_1.ensureDirectories)();
41
+ const browser = new browser_js_1.CBrowser({ headless });
42
+ const allMetrics = [];
43
+ try {
44
+ for (let i = 0; i < runs; i++) {
45
+ await browser.navigate(url);
46
+ // Wait for page to stabilize
47
+ await new Promise((r) => setTimeout(r, 2000));
48
+ const metrics = await browser.getPerformanceMetrics();
49
+ allMetrics.push(metrics);
50
+ // Brief pause between runs
51
+ if (i < runs - 1) {
52
+ await new Promise((r) => setTimeout(r, 1000));
53
+ }
54
+ }
55
+ }
56
+ finally {
57
+ await browser.close();
58
+ }
59
+ // Average the metrics
60
+ const avgMetrics = {};
61
+ const numericMetricKeys = [
62
+ "lcp", "fid", "cls", "fcp", "ttfb", "tti", "tbt",
63
+ "domContentLoaded", "load", "resourceCount", "transferSize"
64
+ ];
65
+ for (const key of numericMetricKeys) {
66
+ const values = allMetrics
67
+ .map((m) => m[key])
68
+ .filter((v) => v !== undefined && v !== null);
69
+ if (values.length > 0) {
70
+ avgMetrics[key] = values.reduce((a, b) => a + b, 0) / values.length;
71
+ }
72
+ }
73
+ // Determine ratings
74
+ if (avgMetrics.lcp !== undefined) {
75
+ avgMetrics.lcpRating = avgMetrics.lcp <= 2500 ? "good" : avgMetrics.lcp <= 4000 ? "needs-improvement" : "poor";
76
+ }
77
+ if (avgMetrics.cls !== undefined) {
78
+ avgMetrics.clsRating = avgMetrics.cls <= 0.1 ? "good" : avgMetrics.cls <= 0.25 ? "needs-improvement" : "poor";
79
+ }
80
+ const baseline = {
81
+ id: `baseline-${Date.now()}`,
82
+ url,
83
+ name: name || new URL(url).hostname,
84
+ timestamp: new Date().toISOString(),
85
+ metrics: avgMetrics,
86
+ runsAveraged: runs,
87
+ environment: {
88
+ browser: "chromium",
89
+ viewport: { width: 1280, height: 720 },
90
+ device,
91
+ connection: throttle,
92
+ },
93
+ };
94
+ // Save baseline
95
+ const baselinesDir = (0, path_1.join)(paths.dataDir, "baselines");
96
+ if (!(0, fs_1.existsSync)(baselinesDir)) {
97
+ (0, fs_1.mkdirSync)(baselinesDir, { recursive: true });
98
+ }
99
+ const baselineFile = (0, path_1.join)(baselinesDir, `${baseline.id}.json`);
100
+ (0, fs_1.writeFileSync)(baselineFile, JSON.stringify(baseline, null, 2));
101
+ return baseline;
102
+ }
103
+ /**
104
+ * List all saved performance baselines
105
+ */
106
+ function listPerformanceBaselines() {
107
+ const paths = (0, config_js_1.getPaths)();
108
+ const baselinesDir = (0, path_1.join)(paths.dataDir, "baselines");
109
+ if (!(0, fs_1.existsSync)(baselinesDir)) {
110
+ return [];
111
+ }
112
+ const files = (0, fs_1.readdirSync)(baselinesDir).filter((f) => f.endsWith(".json"));
113
+ const baselines = [];
114
+ for (const file of files) {
115
+ try {
116
+ const content = (0, fs_1.readFileSync)((0, path_1.join)(baselinesDir, file), "utf-8");
117
+ baselines.push(JSON.parse(content));
118
+ }
119
+ catch {
120
+ // Skip invalid files
121
+ }
122
+ }
123
+ return baselines.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
124
+ }
125
+ /**
126
+ * Load a specific baseline by ID or name
127
+ */
128
+ function loadPerformanceBaseline(idOrName) {
129
+ const baselines = listPerformanceBaselines();
130
+ // Try exact ID match first
131
+ let baseline = baselines.find((b) => b.id === idOrName);
132
+ if (baseline)
133
+ return baseline;
134
+ // Try name match
135
+ baseline = baselines.find((b) => b.name === idOrName);
136
+ if (baseline)
137
+ return baseline;
138
+ // Try URL match
139
+ baseline = baselines.find((b) => b.url.includes(idOrName));
140
+ return baseline || null;
141
+ }
142
+ /**
143
+ * Delete a performance baseline
144
+ */
145
+ function deletePerformanceBaseline(idOrName) {
146
+ const baseline = loadPerformanceBaseline(idOrName);
147
+ if (!baseline)
148
+ return false;
149
+ const paths = (0, config_js_1.getPaths)();
150
+ const baselineFile = (0, path_1.join)(paths.dataDir, "baselines", `${baseline.id}.json`);
151
+ if ((0, fs_1.existsSync)(baselineFile)) {
152
+ (0, fs_1.unlinkSync)(baselineFile);
153
+ return true;
154
+ }
155
+ return false;
156
+ }
157
+ // ============================================================================
158
+ // Regression Detection Functions
159
+ // ============================================================================
160
+ /**
161
+ * Compare current performance against a baseline
162
+ */
163
+ async function detectPerformanceRegression(url, baselineIdOrName, options = {}) {
164
+ const { thresholds = DEFAULT_REGRESSION_THRESHOLDS, headless = true } = options;
165
+ const startTime = Date.now();
166
+ // Load baseline
167
+ const baseline = loadPerformanceBaseline(baselineIdOrName);
168
+ if (!baseline) {
169
+ throw new Error(`Baseline not found: ${baselineIdOrName}`);
170
+ }
171
+ // Capture current metrics
172
+ const browser = new browser_js_1.CBrowser({ headless });
173
+ let currentMetrics;
174
+ try {
175
+ await browser.navigate(url);
176
+ await new Promise((r) => setTimeout(r, 2000));
177
+ currentMetrics = await browser.getPerformanceMetrics();
178
+ }
179
+ finally {
180
+ await browser.close();
181
+ }
182
+ // Compare metrics
183
+ const comparisons = [];
184
+ const regressions = [];
185
+ const metricsToCompare = [
186
+ "lcp", "fid", "cls", "fcp", "ttfb", "tti", "tbt", "transferSize"
187
+ ];
188
+ for (const metric of metricsToCompare) {
189
+ const baselineValue = baseline.metrics[metric];
190
+ const currentValue = currentMetrics[metric];
191
+ if (baselineValue === undefined || currentValue === undefined)
192
+ continue;
193
+ const change = currentValue - baselineValue;
194
+ const changePercent = baselineValue > 0 ? (change / baselineValue) * 100 : 0;
195
+ // Determine threshold and if it's a regression
196
+ const threshold = thresholds[metric] || 20;
197
+ const isClsMetric = metric === "cls";
198
+ // For CLS, threshold is absolute; for others, it's percentage
199
+ const exceedsThreshold = isClsMetric
200
+ ? change > threshold
201
+ : changePercent > threshold;
202
+ let status = "stable";
203
+ let severity = "warning";
204
+ if (changePercent < -10 || (isClsMetric && change < -0.05)) {
205
+ status = "improved";
206
+ }
207
+ else if (exceedsThreshold) {
208
+ if (isClsMetric ? change > threshold * 2 : changePercent > threshold * 2) {
209
+ status = "critical";
210
+ severity = "critical";
211
+ }
212
+ else {
213
+ status = "regression";
214
+ severity = "regression";
215
+ }
216
+ }
217
+ else if (changePercent > 5 || (isClsMetric && change > 0.02)) {
218
+ status = "warning";
219
+ }
220
+ const comparison = {
221
+ metric,
222
+ baseline: baselineValue,
223
+ current: currentValue,
224
+ change,
225
+ changePercent,
226
+ isRegression: status === "regression" || status === "critical",
227
+ isImprovement: status === "improved",
228
+ status,
229
+ };
230
+ comparisons.push(comparison);
231
+ if (comparison.isRegression) {
232
+ regressions.push({
233
+ metric,
234
+ baselineValue,
235
+ currentValue,
236
+ change,
237
+ changePercent,
238
+ threshold,
239
+ severity,
240
+ });
241
+ }
242
+ }
243
+ // Calculate summary
244
+ const improved = comparisons.filter((c) => c.isImprovement).length;
245
+ const regressed = comparisons.filter((c) => c.status === "regression").length;
246
+ const critical = comparisons.filter((c) => c.status === "critical").length;
247
+ const stable = comparisons.filter((c) => c.status === "stable" || c.status === "warning").length;
248
+ const overallChange = comparisons.length > 0
249
+ ? comparisons.reduce((sum, c) => sum + c.changePercent, 0) / comparisons.length
250
+ : 0;
251
+ return {
252
+ url,
253
+ baseline,
254
+ currentMetrics,
255
+ timestamp: new Date().toISOString(),
256
+ duration: Date.now() - startTime,
257
+ comparisons,
258
+ regressions,
259
+ passed: regressions.length === 0,
260
+ summary: {
261
+ totalMetrics: comparisons.length,
262
+ improved,
263
+ stable,
264
+ regressed,
265
+ critical,
266
+ overallChange,
267
+ },
268
+ };
269
+ }
270
+ // ============================================================================
271
+ // Reporting Functions
272
+ // ============================================================================
273
+ /**
274
+ * Format a performance regression report
275
+ */
276
+ function formatPerformanceRegressionReport(result) {
277
+ const lines = [];
278
+ lines.push("PERFORMANCE REGRESSION REPORT");
279
+ lines.push("=".repeat(60));
280
+ lines.push("");
281
+ lines.push(`URL: ${result.url}`);
282
+ lines.push(`Baseline: ${result.baseline.name} (${new Date(result.baseline.timestamp).toLocaleDateString()})`);
283
+ lines.push(`Duration: ${(result.duration / 1000).toFixed(1)}s`);
284
+ lines.push("");
285
+ // Overall result
286
+ if (result.passed) {
287
+ lines.push("PASSED - No performance regressions detected");
288
+ }
289
+ else {
290
+ lines.push(`FAILED - ${result.regressions.length} regression(s) detected`);
291
+ }
292
+ lines.push("");
293
+ // Detailed comparisons
294
+ lines.push("-".repeat(60));
295
+ lines.push("METRIC COMPARISON");
296
+ lines.push("-".repeat(60));
297
+ lines.push("");
298
+ const metricNames = {
299
+ lcp: "LCP (Largest Contentful Paint)",
300
+ fid: "FID (First Input Delay)",
301
+ cls: "CLS (Cumulative Layout Shift)",
302
+ fcp: "FCP (First Contentful Paint)",
303
+ ttfb: "TTFB (Time to First Byte)",
304
+ tti: "TTI (Time to Interactive)",
305
+ tbt: "TBT (Total Blocking Time)",
306
+ transferSize: "Transfer Size",
307
+ };
308
+ for (const comp of result.comparisons) {
309
+ const name = metricNames[comp.metric] || comp.metric;
310
+ const icon = comp.isImprovement ? "[OK]" :
311
+ comp.status === "critical" ? "[CRIT]" :
312
+ comp.status === "regression" ? "[FAIL]" :
313
+ comp.status === "warning" ? "[WARN]" : "[OK]";
314
+ const unit = comp.metric === "cls" ? "" :
315
+ comp.metric === "transferSize" ? " KB" : " ms";
316
+ const baseVal = comp.metric === "transferSize"
317
+ ? (comp.baseline / 1024).toFixed(1)
318
+ : comp.baseline.toFixed(1);
319
+ const currVal = comp.metric === "transferSize"
320
+ ? (comp.current / 1024).toFixed(1)
321
+ : comp.current.toFixed(1);
322
+ const changeStr = comp.changePercent >= 0
323
+ ? `+${comp.changePercent.toFixed(1)}%`
324
+ : `${comp.changePercent.toFixed(1)}%`;
325
+ lines.push(`${icon} ${name}`);
326
+ lines.push(` Baseline: ${baseVal}${unit} -> Current: ${currVal}${unit} (${changeStr})`);
327
+ lines.push("");
328
+ }
329
+ // Summary
330
+ lines.push("-".repeat(60));
331
+ lines.push("SUMMARY");
332
+ lines.push("-".repeat(60));
333
+ lines.push("");
334
+ lines.push(` Total Metrics: ${result.summary.totalMetrics}`);
335
+ lines.push(` Improved: ${result.summary.improved}`);
336
+ lines.push(` Stable: ${result.summary.stable}`);
337
+ lines.push(` Regressed: ${result.summary.regressed}`);
338
+ lines.push(` Critical: ${result.summary.critical}`);
339
+ lines.push(` Overall Change: ${result.summary.overallChange >= 0 ? "+" : ""}${result.summary.overallChange.toFixed(1)}%`);
340
+ lines.push("");
341
+ // Recommendations if regressions found
342
+ if (result.regressions.length > 0) {
343
+ lines.push("-".repeat(60));
344
+ lines.push("RECOMMENDATIONS");
345
+ lines.push("-".repeat(60));
346
+ lines.push("");
347
+ for (const reg of result.regressions) {
348
+ const name = metricNames[reg.metric] || reg.metric;
349
+ lines.push(`[!] ${name}:`);
350
+ switch (reg.metric) {
351
+ case "lcp":
352
+ lines.push(" - Optimize largest content element (images, videos)");
353
+ lines.push(" - Consider lazy loading below-fold content");
354
+ lines.push(" - Improve server response times");
355
+ break;
356
+ case "cls":
357
+ lines.push(" - Set explicit dimensions on images/embeds");
358
+ lines.push(" - Avoid inserting content above existing content");
359
+ lines.push(" - Reserve space for dynamic content");
360
+ break;
361
+ case "fcp":
362
+ case "ttfb":
363
+ lines.push(" - Optimize server response time");
364
+ lines.push(" - Use CDN for static assets");
365
+ lines.push(" - Enable compression (gzip/brotli)");
366
+ break;
367
+ case "tbt":
368
+ case "tti":
369
+ lines.push(" - Split long JavaScript tasks");
370
+ lines.push(" - Defer non-critical JavaScript");
371
+ lines.push(" - Remove unused code");
372
+ break;
373
+ case "transferSize":
374
+ lines.push(" - Compress and optimize assets");
375
+ lines.push(" - Remove unused CSS/JavaScript");
376
+ lines.push(" - Optimize images (WebP, proper sizing)");
377
+ break;
378
+ default:
379
+ lines.push(" - Review recent changes for performance impact");
380
+ }
381
+ lines.push("");
382
+ }
383
+ }
384
+ return lines.join("\n");
385
+ }
386
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/performance/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Test Coverage Map (v6.5.0)
3
+ *
4
+ * Analyze test coverage across your site.
5
+ */
6
+ import type { TestedPage, SitePage, CoverageGap, TestCoverageAnalysis, CoverageMapResult, CoverageMapOptions } from "../types.js";
7
+ /**
8
+ * Parse test files to extract tested URLs and actions
9
+ */
10
+ export declare function parseTestFilesForCoverage(testFiles: string[]): TestedPage[];
11
+ /**
12
+ * Fetch and parse sitemap.xml
13
+ */
14
+ export declare function parseSitemap(sitemapUrl: string): Promise<SitePage[]>;
15
+ /**
16
+ * Crawl a site to discover pages
17
+ */
18
+ export declare function crawlSiteForCoverage(startUrl: string, maxPages?: number, includePattern?: string, excludePattern?: string): Promise<SitePage[]>;
19
+ /**
20
+ * Identify coverage gaps
21
+ */
22
+ export declare function identifyCoverageGaps(sitePages: SitePage[], testedPages: TestedPage[], minCoverage?: number): CoverageGap[];
23
+ /**
24
+ * Calculate overall coverage analysis
25
+ */
26
+ export declare function calculateCoverageAnalysis(sitePages: SitePage[], testedPages: TestedPage[]): TestCoverageAnalysis;
27
+ /**
28
+ * Generate complete coverage map
29
+ */
30
+ export declare function generateCoverageMap(baseUrl: string, testFiles: string[], options?: CoverageMapOptions): Promise<CoverageMapResult>;
31
+ /**
32
+ * Format coverage map as text report
33
+ */
34
+ export declare function formatCoverageReport(result: CoverageMapResult): string;
35
+ /**
36
+ * Generate HTML coverage report
37
+ */
38
+ export declare function generateCoverageHtmlReport(result: CoverageMapResult): string;
39
+ //# sourceMappingURL=coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/testing/coverage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,UAAU,EAEV,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAgI3E;AAeD;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsB1E;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAY,EACtB,cAAc,CAAC,EAAE,MAAM,EACvB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,QAAQ,EAAE,CAAC,CA8ErB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,QAAQ,EAAE,EACrB,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,GAAE,MAAW,GACvB,WAAW,EAAE,CA2Df;AAiFD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,WAAW,EAAE,UAAU,EAAE,GACxB,oBAAoB,CAsCtB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAoGtE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA8J5E"}