@testivai/witness-cdp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @testivai/witness-cdp might be problematic. Click here for more details.

Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +405 -0
  3. package/dist/__tests__/setup.d.ts +4 -0
  4. package/dist/__tests__/setup.d.ts.map +1 -0
  5. package/dist/__tests__/setup.js +24 -0
  6. package/dist/__tests__/setup.js.map +1 -0
  7. package/dist/cdp/binding.d.ts +44 -0
  8. package/dist/cdp/binding.d.ts.map +1 -0
  9. package/dist/cdp/binding.js +183 -0
  10. package/dist/cdp/binding.js.map +1 -0
  11. package/dist/cdp/capture.d.ts +42 -0
  12. package/dist/cdp/capture.d.ts.map +1 -0
  13. package/dist/cdp/capture.js +235 -0
  14. package/dist/cdp/capture.js.map +1 -0
  15. package/dist/cdp/client.d.ts +63 -0
  16. package/dist/cdp/client.d.ts.map +1 -0
  17. package/dist/cdp/client.js +279 -0
  18. package/dist/cdp/client.js.map +1 -0
  19. package/dist/cdp/discovery.d.ts +33 -0
  20. package/dist/cdp/discovery.d.ts.map +1 -0
  21. package/dist/cdp/discovery.js +157 -0
  22. package/dist/cdp/discovery.js.map +1 -0
  23. package/dist/commands/auth.d.ts +3 -0
  24. package/dist/commands/auth.d.ts.map +1 -0
  25. package/dist/commands/auth.js +122 -0
  26. package/dist/commands/auth.js.map +1 -0
  27. package/dist/commands/capture.d.ts +3 -0
  28. package/dist/commands/capture.d.ts.map +1 -0
  29. package/dist/commands/capture.js +143 -0
  30. package/dist/commands/capture.js.map +1 -0
  31. package/dist/commands/init.d.ts +3 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +140 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/run.d.ts +3 -0
  36. package/dist/commands/run.d.ts.map +1 -0
  37. package/dist/commands/run.js +307 -0
  38. package/dist/commands/run.js.map +1 -0
  39. package/dist/index.d.ts +20 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +77 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types.d.ts +244 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +7 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/utils/file-naming.d.ts +31 -0
  48. package/dist/utils/file-naming.d.ts.map +1 -0
  49. package/dist/utils/file-naming.js +137 -0
  50. package/dist/utils/file-naming.js.map +1 -0
  51. package/dist/utils/framework-detect.d.ts +31 -0
  52. package/dist/utils/framework-detect.d.ts.map +1 -0
  53. package/dist/utils/framework-detect.js +379 -0
  54. package/dist/utils/framework-detect.js.map +1 -0
  55. package/dist/utils/logger.d.ts +29 -0
  56. package/dist/utils/logger.d.ts.map +1 -0
  57. package/dist/utils/logger.js +114 -0
  58. package/dist/utils/logger.js.map +1 -0
  59. package/dist/utils/process.d.ts +61 -0
  60. package/dist/utils/process.d.ts.map +1 -0
  61. package/dist/utils/process.js +208 -0
  62. package/dist/utils/process.js.map +1 -0
  63. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Types for TestivAI CDP SDK
4
+ * Extends types from @testivai/common with CDP-specific additions
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * File naming utilities for TestivAI CDP SDK
3
+ * Converts snapshot names to safe filenames
4
+ */
5
+ /**
6
+ * Convert a snapshot name to a safe filename
7
+ * - Replace spaces with hyphens
8
+ * - Remove or replace special characters
9
+ * - Limit length
10
+ * - Ensure it's not empty
11
+ */
12
+ export declare function toSafeFilename(name: string): string;
13
+ /**
14
+ * Generate a unique filename with timestamp
15
+ */
16
+ export declare function generateUniqueFilename(name: string, extension?: string): string;
17
+ /**
18
+ * Extract snapshot name from a URL
19
+ * Useful for auto-generating names from page URLs
20
+ */
21
+ export declare function extractNameFromUrl(url: string): string;
22
+ /**
23
+ * Sanitize a name for use in test names
24
+ * Less restrictive than filename sanitization
25
+ */
26
+ export declare function sanitizeTestName(name: string): string;
27
+ /**
28
+ * Check if a filename is safe
29
+ */
30
+ export declare function isSafeFilename(filename: string): boolean;
31
+ //# sourceMappingURL=file-naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-naming.d.ts","sourceRoot":"","sources":["../../src/utils/file-naming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwCnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAMnF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA6BtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA4BxD"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * File naming utilities for TestivAI CDP SDK
4
+ * Converts snapshot names to safe filenames
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.toSafeFilename = toSafeFilename;
8
+ exports.generateUniqueFilename = generateUniqueFilename;
9
+ exports.extractNameFromUrl = extractNameFromUrl;
10
+ exports.sanitizeTestName = sanitizeTestName;
11
+ exports.isSafeFilename = isSafeFilename;
12
+ /**
13
+ * Convert a snapshot name to a safe filename
14
+ * - Replace spaces with hyphens
15
+ * - Remove or replace special characters
16
+ * - Limit length
17
+ * - Ensure it's not empty
18
+ */
19
+ function toSafeFilename(name) {
20
+ if (!name || typeof name !== 'string') {
21
+ return 'snapshot';
22
+ }
23
+ // Remove leading/trailing whitespace
24
+ let filename = name.trim();
25
+ // If empty after trimming, use default
26
+ if (!filename) {
27
+ return 'snapshot';
28
+ }
29
+ // Replace spaces and common separators with hyphens
30
+ filename = filename.replace(/[\s_\/\\]+/g, '-');
31
+ // Remove invalid filename characters (Windows-safe)
32
+ // Keep: letters, numbers, hyphens, dots, underscores, parentheses
33
+ filename = filename.replace(/[<>:"|?*]/g, '');
34
+ // Replace multiple consecutive hyphens with single hyphen
35
+ filename = filename.replace(/-+/g, '-');
36
+ // Remove leading/trailing hyphens and dots
37
+ filename = filename.replace(/^[-\.]+|[-\.]+$/g, '');
38
+ // Limit length (255 is max for most filesystems, leave room for extension)
39
+ if (filename.length > 200) {
40
+ filename = filename.substring(0, 200);
41
+ // Remove trailing hyphen if we cut in the middle
42
+ filename = filename.replace(/-$/, '');
43
+ }
44
+ // If still empty after cleaning, use default
45
+ if (!filename) {
46
+ return 'snapshot';
47
+ }
48
+ // Convert to lowercase for consistency
49
+ return filename.toLowerCase();
50
+ }
51
+ /**
52
+ * Generate a unique filename with timestamp
53
+ */
54
+ function generateUniqueFilename(name, extension = '') {
55
+ const safeName = toSafeFilename(name);
56
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
57
+ const uniqueName = `${safeName}-${timestamp}`;
58
+ return extension ? `${uniqueName}.${extension.replace(/^\./, '')}` : uniqueName;
59
+ }
60
+ /**
61
+ * Extract snapshot name from a URL
62
+ * Useful for auto-generating names from page URLs
63
+ */
64
+ function extractNameFromUrl(url) {
65
+ try {
66
+ const urlObj = new URL(url);
67
+ const pathname = urlObj.pathname;
68
+ // Remove leading/trailing slashes
69
+ const cleanPath = pathname.replace(/^\/|\/$/g, '');
70
+ // If path is empty or just '/', use hostname
71
+ if (!cleanPath) {
72
+ return urlObj.hostname.replace(/\./g, '-');
73
+ }
74
+ // Convert path segments to name
75
+ const segments = cleanPath.split('/');
76
+ const lastSegment = segments[segments.length - 1];
77
+ // If last segment looks like an ID, use the parent
78
+ if (/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(lastSegment) ||
79
+ /^\d+$/.test(lastSegment)) {
80
+ return segments[segments.length - 2] || 'page';
81
+ }
82
+ return lastSegment || 'page';
83
+ }
84
+ catch {
85
+ // If URL parsing fails, extract from string
86
+ const matches = url.match(/\/([^\/]+)\/?$/);
87
+ return matches ? matches[1] : 'page';
88
+ }
89
+ }
90
+ /**
91
+ * Sanitize a name for use in test names
92
+ * Less restrictive than filename sanitization
93
+ */
94
+ function sanitizeTestName(name) {
95
+ if (!name || typeof name !== 'string') {
96
+ return 'test';
97
+ }
98
+ // Remove leading/trailing whitespace
99
+ let testName = name.trim();
100
+ // Replace multiple spaces with single space
101
+ testName = testName.replace(/\s+/g, ' ');
102
+ // Remove control characters
103
+ testName = testName.replace(/[\x00-\x1F\x7F]/g, '');
104
+ // Limit length
105
+ if (testName.length > 100) {
106
+ testName = testName.substring(0, 100);
107
+ }
108
+ return testName || 'test';
109
+ }
110
+ /**
111
+ * Check if a filename is safe
112
+ */
113
+ function isSafeFilename(filename) {
114
+ if (!filename || typeof filename !== 'string') {
115
+ return false;
116
+ }
117
+ // Check for invalid characters
118
+ if (/[<>:"|?*]/.test(filename)) {
119
+ return false;
120
+ }
121
+ // Check reserved names (Windows)
122
+ const reservedNames = [
123
+ 'CON', 'PRN', 'AUX', 'NUL',
124
+ 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
125
+ 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'
126
+ ];
127
+ const nameWithoutExt = filename.split('.')[0].toUpperCase();
128
+ if (reservedNames.includes(nameWithoutExt)) {
129
+ return false;
130
+ }
131
+ // Check length
132
+ if (filename.length > 255) {
133
+ return false;
134
+ }
135
+ return true;
136
+ }
137
+ //# sourceMappingURL=file-naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-naming.js","sourceRoot":"","sources":["../../src/utils/file-naming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { FrameworkDetection } from '../types';
2
+ /**
3
+ * Framework detection utility
4
+ */
5
+ export declare class FrameworkDetector {
6
+ /**
7
+ * Detect the testing framework in use
8
+ */
9
+ static detect(): FrameworkDetection;
10
+ /**
11
+ * Detect Cypress
12
+ */
13
+ private static detectCypress;
14
+ /**
15
+ * Detect WebdriverIO
16
+ */
17
+ private static detectWebdriverIO;
18
+ /**
19
+ * Detect Selenium JS
20
+ */
21
+ private static detectSeleniumJS;
22
+ /**
23
+ * Detect Selenium Python
24
+ */
25
+ private static detectSeleniumPython;
26
+ /**
27
+ * Generate setup instructions for the detected framework
28
+ */
29
+ private static generateInstructions;
30
+ }
31
+ //# sourceMappingURL=framework-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-detect.d.ts","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,kBAAkB;IA4DnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAuC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAiChC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA8C/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA4CnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAuHpC"}
@@ -0,0 +1,379 @@
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.FrameworkDetector = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * Framework detection utility
41
+ */
42
+ class FrameworkDetector {
43
+ /**
44
+ * Detect the testing framework in use
45
+ */
46
+ static detect() {
47
+ const cwd = process.cwd();
48
+ const evidence = [];
49
+ const configFiles = [];
50
+ let framework = 'unknown';
51
+ let confidence = 0;
52
+ // Check for Cypress
53
+ const cypressResult = this.detectCypress(cwd);
54
+ if (cypressResult.detected) {
55
+ framework = 'cypress';
56
+ confidence = cypressResult.confidence;
57
+ evidence.push(...cypressResult.evidence);
58
+ configFiles.push(...cypressResult.configFiles);
59
+ }
60
+ // Check for WebdriverIO
61
+ const wdioResult = this.detectWebdriverIO(cwd);
62
+ if (wdioResult.detected && wdioResult.confidence > confidence) {
63
+ framework = 'webdriverio';
64
+ confidence = wdioResult.confidence;
65
+ evidence.length = 0;
66
+ configFiles.length = 0;
67
+ evidence.push(...wdioResult.evidence);
68
+ configFiles.push(...wdioResult.configFiles);
69
+ }
70
+ // Check for Selenium JS
71
+ const seleniumJsResult = this.detectSeleniumJS(cwd);
72
+ if (seleniumJsResult.detected && seleniumJsResult.confidence > confidence) {
73
+ framework = 'selenium-js';
74
+ confidence = seleniumJsResult.confidence;
75
+ evidence.length = 0;
76
+ configFiles.length = 0;
77
+ evidence.push(...seleniumJsResult.evidence);
78
+ configFiles.push(...seleniumJsResult.configFiles);
79
+ }
80
+ // Check for Selenium Python
81
+ const seleniumPyResult = this.detectSeleniumPython(cwd);
82
+ if (seleniumPyResult.detected && seleniumPyResult.confidence > confidence) {
83
+ framework = 'selenium-python';
84
+ confidence = seleniumPyResult.confidence;
85
+ evidence.length = 0;
86
+ configFiles.length = 0;
87
+ evidence.push(...seleniumPyResult.evidence);
88
+ configFiles.push(...seleniumPyResult.configFiles);
89
+ }
90
+ const instructions = this.generateInstructions(framework);
91
+ return {
92
+ framework,
93
+ confidence,
94
+ evidence,
95
+ configFiles,
96
+ instructions,
97
+ };
98
+ }
99
+ /**
100
+ * Detect Cypress
101
+ */
102
+ static detectCypress(cwd) {
103
+ const detected = false;
104
+ const evidence = [];
105
+ const configFiles = [];
106
+ let confidence = 0;
107
+ // Check for cypress.config.js/ts
108
+ const cypressConfigFiles = ['cypress.config.js', 'cypress.config.ts'];
109
+ for (const file of cypressConfigFiles) {
110
+ if (fs.existsSync(path.join(cwd, file))) {
111
+ configFiles.push(file);
112
+ evidence.push(`Found ${file}`);
113
+ confidence += 0.4;
114
+ }
115
+ }
116
+ // Check for cypress folder
117
+ if (fs.existsSync(path.join(cwd, 'cypress'))) {
118
+ evidence.push('Found cypress/ directory');
119
+ confidence += 0.3;
120
+ }
121
+ // Check package.json for cypress dependency
122
+ const packageJsonPath = path.join(cwd, 'package.json');
123
+ if (fs.existsSync(packageJsonPath)) {
124
+ try {
125
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
126
+ if (packageJson.dependencies?.cypress || packageJson.devDependencies?.cypress) {
127
+ evidence.push('Found cypress in package.json');
128
+ confidence += 0.3;
129
+ }
130
+ }
131
+ catch {
132
+ // Ignore errors
133
+ }
134
+ }
135
+ return { detected: confidence > 0, confidence, evidence, configFiles };
136
+ }
137
+ /**
138
+ * Detect WebdriverIO
139
+ */
140
+ static detectWebdriverIO(cwd) {
141
+ const detected = false;
142
+ const evidence = [];
143
+ const configFiles = [];
144
+ let confidence = 0;
145
+ // Check for wdio.conf.js/ts
146
+ const wdioConfigFiles = ['wdio.conf.js', 'wdio.conf.ts'];
147
+ for (const file of wdioConfigFiles) {
148
+ if (fs.existsSync(path.join(cwd, file))) {
149
+ configFiles.push(file);
150
+ evidence.push(`Found ${file}`);
151
+ confidence += 0.5;
152
+ }
153
+ }
154
+ // Check package.json for webdriverio dependency
155
+ const packageJsonPath = path.join(cwd, 'package.json');
156
+ if (fs.existsSync(packageJsonPath)) {
157
+ try {
158
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
159
+ if (packageJson.dependencies?.webdriverio || packageJson.devDependencies?.webdriverio) {
160
+ evidence.push('Found webdriverio in package.json');
161
+ confidence += 0.5;
162
+ }
163
+ }
164
+ catch {
165
+ // Ignore errors
166
+ }
167
+ }
168
+ return { detected: confidence > 0, confidence, evidence, configFiles };
169
+ }
170
+ /**
171
+ * Detect Selenium JS
172
+ */
173
+ static detectSeleniumJS(cwd) {
174
+ const detected = false;
175
+ const evidence = [];
176
+ const configFiles = [];
177
+ let confidence = 0;
178
+ // Check package.json for selenium-webdriver dependency
179
+ const packageJsonPath = path.join(cwd, 'package.json');
180
+ if (fs.existsSync(packageJsonPath)) {
181
+ try {
182
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
183
+ if (packageJson.dependencies?.['selenium-webdriver'] ||
184
+ packageJson.devDependencies?.['selenium-webdriver']) {
185
+ evidence.push('Found selenium-webdriver in package.json');
186
+ confidence = 0.8;
187
+ }
188
+ }
189
+ catch {
190
+ // Ignore errors
191
+ }
192
+ }
193
+ // Look for selenium usage in test files
194
+ const testDirs = ['test', 'tests', 'spec', '__tests__'];
195
+ for (const testDir of testDirs) {
196
+ const dirPath = path.join(cwd, testDir);
197
+ if (fs.existsSync(dirPath)) {
198
+ const files = fs.readdirSync(dirPath);
199
+ for (const file of files) {
200
+ if (file.endsWith('.js') || file.endsWith('.ts')) {
201
+ const filePath = path.join(dirPath, file);
202
+ const content = fs.readFileSync(filePath, 'utf-8');
203
+ if (content.includes('selenium-webdriver') ||
204
+ content.includes('import { Builder }') ||
205
+ content.includes('webdriver')) {
206
+ evidence.push(`Found selenium usage in ${path.join(testDir, file)}`);
207
+ confidence = Math.max(confidence, 0.6);
208
+ break;
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ return { detected: confidence > 0, confidence, evidence, configFiles };
215
+ }
216
+ /**
217
+ * Detect Selenium Python
218
+ */
219
+ static detectSeleniumPython(cwd) {
220
+ const detected = false;
221
+ const evidence = [];
222
+ const configFiles = [];
223
+ let confidence = 0;
224
+ // Check for requirements.txt or pyproject.toml
225
+ const reqFiles = ['requirements.txt', 'pyproject.toml', 'Pipfile'];
226
+ for (const file of reqFiles) {
227
+ if (fs.existsSync(path.join(cwd, file))) {
228
+ const content = fs.readFileSync(path.join(cwd, file), 'utf-8');
229
+ if (content.includes('selenium')) {
230
+ evidence.push(`Found selenium in ${file}`);
231
+ confidence += 0.5;
232
+ configFiles.push(file);
233
+ }
234
+ }
235
+ }
236
+ // Look for selenium usage in Python files
237
+ const testDirs = ['test', 'tests', 'spec'];
238
+ for (const testDir of testDirs) {
239
+ const dirPath = path.join(cwd, testDir);
240
+ if (fs.existsSync(dirPath)) {
241
+ const files = fs.readdirSync(dirPath);
242
+ for (const file of files) {
243
+ if (file.endsWith('.py')) {
244
+ const filePath = path.join(dirPath, file);
245
+ const content = fs.readFileSync(filePath, 'utf-8');
246
+ if (content.includes('from selenium import') ||
247
+ content.includes('import selenium') ||
248
+ content.includes('webdriver')) {
249
+ evidence.push(`Found selenium usage in ${path.join(testDir, file)}`);
250
+ confidence = Math.max(confidence, 0.7);
251
+ break;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ return { detected: confidence > 0, confidence, evidence, configFiles };
258
+ }
259
+ /**
260
+ * Generate setup instructions for the detected framework
261
+ */
262
+ static generateInstructions(framework) {
263
+ switch (framework) {
264
+ case 'cypress':
265
+ return [
266
+ '',
267
+ 'To use TestivAI with Cypress:',
268
+ '',
269
+ '1. Add this custom command to cypress/support/commands.js:',
270
+ '',
271
+ ' // testivai-witness-cdp.js',
272
+ ' Cypress.Commands.add(\'witness\', (name) => {',
273
+ ' return cy.window().invoke(\'testivaiWitness\', name);',
274
+ ' });',
275
+ '',
276
+ '2. Use in your tests:',
277
+ '',
278
+ ' it(\'should capture visual snapshot\', () => {',
279
+ ' cy.visit(\'/my-page\');',
280
+ ' cy.witness(\'my-snapshot\');',
281
+ ' });',
282
+ '',
283
+ '3. Run tests with:',
284
+ ' testivai run "cypress run"',
285
+ '',
286
+ ];
287
+ case 'webdriverio':
288
+ return [
289
+ '',
290
+ 'To use TestivAI with WebdriverIO:',
291
+ '',
292
+ '1. Add this custom command to your test setup:',
293
+ '',
294
+ ' // In wdio.conf.js or test setup',
295
+ ' browser.addCommand(\'witness\', function(name) {',
296
+ ' return this.executeScript(\'return window.testivaiWitness(arguments[0])\', name);',
297
+ ' });',
298
+ '',
299
+ '2. Use in your tests:',
300
+ '',
301
+ ' it(\'should capture visual snapshot\', async () => {',
302
+ ' await browser.url(\'/my-page\');',
303
+ ' await browser.witness(\'my-snapshot\');',
304
+ ' });',
305
+ '',
306
+ '3. Run tests with:',
307
+ ' testivai run "npx wdio"',
308
+ '',
309
+ ];
310
+ case 'selenium-js':
311
+ return [
312
+ '',
313
+ 'To use TestivAI with Selenium (JavaScript):',
314
+ '',
315
+ '1. In your tests, use execute_script:',
316
+ '',
317
+ ' const { Builder, By } = require(\'selenium-webdriver\');',
318
+ '',
319
+ ' async function captureSnapshot(driver, name) {',
320
+ ' await driver.executeScript(`return window.testivaiWitness(\'${name}\')`);',
321
+ ' }',
322
+ '',
323
+ '2. Use in your tests:',
324
+ '',
325
+ ' it(\'should capture visual snapshot\', async () => {',
326
+ ' const driver = await new Builder().forBrowser(\'chrome\').build();',
327
+ ' await driver.get(\'http://localhost:3000\');',
328
+ ' await captureSnapshot(driver, \'my-snapshot\');',
329
+ ' });',
330
+ '',
331
+ '3. Run tests with:',
332
+ ' testivai run "npm test"',
333
+ '',
334
+ ];
335
+ case 'selenium-python':
336
+ return [
337
+ '',
338
+ 'To use TestivAI with Selenium (Python):',
339
+ '',
340
+ '1. In your tests, use execute_script:',
341
+ '',
342
+ ' from selenium import webdriver',
343
+ '',
344
+ ' def capture_snapshot(driver, name):',
345
+ ' driver.execute_script(f"return window.testivaiWitness(\'{name}\')")',
346
+ '',
347
+ '2. Use in your tests:',
348
+ '',
349
+ ' def test_visual_snapshot():',
350
+ ' driver = webdriver.Chrome()',
351
+ ' driver.get("http://localhost:3000")',
352
+ ' capture_snapshot(driver, "my-snapshot")',
353
+ '',
354
+ '3. Run tests with:',
355
+ ' testivai run "pytest tests/"',
356
+ '',
357
+ ];
358
+ default:
359
+ return [
360
+ '',
361
+ 'No supported testing framework detected.',
362
+ '',
363
+ 'To use TestivAI, you need to:',
364
+ '',
365
+ '1. Launch Chrome with remote debugging:',
366
+ ' chrome --remote-debugging-port=9222',
367
+ '',
368
+ '2. In your test code, call:',
369
+ ' window.testivaiWitness(\'snapshot-name\')',
370
+ '',
371
+ '3. Run your tests with:',
372
+ ' testivai run "your-test-command"',
373
+ '',
374
+ ];
375
+ }
376
+ }
377
+ }
378
+ exports.FrameworkDetector = FrameworkDetector;
379
+ //# sourceMappingURL=framework-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-detect.js","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface LoggerOptions {
2
+ verbose?: boolean;
3
+ quiet?: boolean;
4
+ debug?: boolean;
5
+ }
6
+ export declare class Logger {
7
+ private options;
8
+ constructor(options?: LoggerOptions);
9
+ private shouldLog;
10
+ error(message: string, ...args: any[]): void;
11
+ warn(message: string, ...args: any[]): void;
12
+ info(message: string, ...args: any[]): void;
13
+ debug(message: string, ...args: any[]): void;
14
+ success(message: string, ...args: any[]): void;
15
+ verbose(message: string, ...args: any[]): void;
16
+ plain(message: string, ...args: any[]): void;
17
+ capture(snapshotName: string): void;
18
+ upload(batchId: string): void;
19
+ connected(port: number): void;
20
+ disconnected(): void;
21
+ bindingRegistered(bindingName: string): void;
22
+ bindingCalled(bindingName: string, payload?: string): void;
23
+ startProgress(message: string): void;
24
+ updateProgress(message: string): void;
25
+ endProgress(message: string): void;
26
+ }
27
+ export declare const logger: Logger;
28
+ export declare function createLogger(options: LoggerOptions): Logger;
29
+ //# sourceMappingURL=logger.d.ts.map