@testivai/witness-cdp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) 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/bin/testivai.d.ts +3 -0
  8. package/dist/bin/testivai.d.ts.map +1 -0
  9. package/dist/bin/testivai.js +48 -0
  10. package/dist/bin/testivai.js.map +1 -0
  11. package/dist/cdp/binding.d.ts +56 -0
  12. package/dist/cdp/binding.d.ts.map +1 -0
  13. package/dist/cdp/binding.js +364 -0
  14. package/dist/cdp/binding.js.map +1 -0
  15. package/dist/cdp/capture.d.ts +61 -0
  16. package/dist/cdp/capture.d.ts.map +1 -0
  17. package/dist/cdp/capture.js +422 -0
  18. package/dist/cdp/capture.js.map +1 -0
  19. package/dist/cdp/client.d.ts +63 -0
  20. package/dist/cdp/client.d.ts.map +1 -0
  21. package/dist/cdp/client.js +279 -0
  22. package/dist/cdp/client.js.map +1 -0
  23. package/dist/cdp/discovery.d.ts +33 -0
  24. package/dist/cdp/discovery.d.ts.map +1 -0
  25. package/dist/cdp/discovery.js +157 -0
  26. package/dist/cdp/discovery.js.map +1 -0
  27. package/dist/ci.d.ts +31 -0
  28. package/dist/ci.d.ts.map +1 -0
  29. package/dist/ci.js +118 -0
  30. package/dist/ci.js.map +1 -0
  31. package/dist/commands/auth.d.ts +3 -0
  32. package/dist/commands/auth.d.ts.map +1 -0
  33. package/dist/commands/auth.js +122 -0
  34. package/dist/commands/auth.js.map +1 -0
  35. package/dist/commands/capture.d.ts +3 -0
  36. package/dist/commands/capture.d.ts.map +1 -0
  37. package/dist/commands/capture.js +143 -0
  38. package/dist/commands/capture.js.map +1 -0
  39. package/dist/commands/init.d.ts +3 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +255 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/run.d.ts +3 -0
  44. package/dist/commands/run.d.ts.map +1 -0
  45. package/dist/commands/run.js +438 -0
  46. package/dist/commands/run.js.map +1 -0
  47. package/dist/index.d.ts +20 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +77 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/types.d.ts +329 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +7 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/utils/file-naming.d.ts +31 -0
  56. package/dist/utils/file-naming.d.ts.map +1 -0
  57. package/dist/utils/file-naming.js +137 -0
  58. package/dist/utils/file-naming.js.map +1 -0
  59. package/dist/utils/framework-detect.d.ts +31 -0
  60. package/dist/utils/framework-detect.d.ts.map +1 -0
  61. package/dist/utils/framework-detect.js +379 -0
  62. package/dist/utils/framework-detect.js.map +1 -0
  63. package/dist/utils/logger.d.ts +29 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +114 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/process.d.ts +61 -0
  68. package/dist/utils/process.d.ts.map +1 -0
  69. package/dist/utils/process.js +208 -0
  70. package/dist/utils/process.js.map +1 -0
  71. package/dist/utils/template-generator.d.ts +36 -0
  72. package/dist/utils/template-generator.d.ts.map +1 -0
  73. package/dist/utils/template-generator.js +255 -0
  74. package/dist/utils/template-generator.js.map +1 -0
  75. package/package.json +66 -0
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,GAAE,aAAkB;IAIvC,OAAO,CAAC,SAAS;IAMjB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK5C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK9C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAK9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5C,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKnC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B,YAAY,IAAI,IAAI;IAKpB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK5C,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAM1D,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAMnC;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC;AAGnC,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = exports.Logger = void 0;
7
+ exports.createLogger = createLogger;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ class Logger {
10
+ constructor(options = {}) {
11
+ this.options = options;
12
+ }
13
+ shouldLog(level) {
14
+ if (this.options.quiet && level !== 'error')
15
+ return false;
16
+ if (level === 'debug' && !this.options.debug)
17
+ return false;
18
+ return true;
19
+ }
20
+ error(message, ...args) {
21
+ if (!this.shouldLog('error'))
22
+ return;
23
+ console.error(chalk_1.default.red(`❌ ${message}`), ...args);
24
+ }
25
+ warn(message, ...args) {
26
+ if (!this.shouldLog('warn'))
27
+ return;
28
+ console.warn(chalk_1.default.yellow(`⚠️ ${message}`), ...args);
29
+ }
30
+ info(message, ...args) {
31
+ if (!this.shouldLog('info'))
32
+ return;
33
+ console.log(chalk_1.default.blue(`ℹ️ ${message}`), ...args);
34
+ }
35
+ debug(message, ...args) {
36
+ if (!this.shouldLog('debug'))
37
+ return;
38
+ console.log(chalk_1.default.gray(`🐛 ${message}`), ...args);
39
+ }
40
+ success(message, ...args) {
41
+ if (!this.shouldLog('success'))
42
+ return;
43
+ console.log(chalk_1.default.green(`✅ ${message}`), ...args);
44
+ }
45
+ verbose(message, ...args) {
46
+ if (!this.options.verbose || this.options.quiet)
47
+ return;
48
+ console.log(chalk_1.default.gray(` ${message}`), ...args);
49
+ }
50
+ plain(message, ...args) {
51
+ if (this.options.quiet)
52
+ return;
53
+ console.log(message, ...args);
54
+ }
55
+ // Specialized loggers for common operations
56
+ capture(snapshotName) {
57
+ if (!this.shouldLog('info'))
58
+ return;
59
+ console.log(chalk_1.default.cyan(`📸 Capturing: ${snapshotName}`));
60
+ }
61
+ upload(batchId) {
62
+ if (!this.shouldLog('info'))
63
+ return;
64
+ console.log(chalk_1.default.cyan(`📤 Uploading batch: ${batchId}`));
65
+ }
66
+ connected(port) {
67
+ if (!this.shouldLog('success'))
68
+ return;
69
+ console.log(chalk_1.default.green(`🔗 Connected to Chrome on port ${port}`));
70
+ }
71
+ disconnected() {
72
+ if (!this.shouldLog('info'))
73
+ return;
74
+ console.log(chalk_1.default.blue(`🔌 Disconnected from Chrome`));
75
+ }
76
+ bindingRegistered(bindingName) {
77
+ if (!this.shouldLog('debug'))
78
+ return;
79
+ console.log(chalk_1.default.gray(`📝 Registered binding: ${bindingName}`));
80
+ }
81
+ bindingCalled(bindingName, payload) {
82
+ if (!this.shouldLog('debug'))
83
+ return;
84
+ console.log(chalk_1.default.gray(`📞 Binding called: ${bindingName}${payload ? ` (${payload})` : ''}`));
85
+ }
86
+ // Progress indicators
87
+ startProgress(message) {
88
+ if (!this.shouldLog('info'))
89
+ return;
90
+ process.stdout.write(`${chalk_1.default.blue('⏳')} ${message}...`);
91
+ }
92
+ updateProgress(message) {
93
+ if (!this.shouldLog('info'))
94
+ return;
95
+ process.stdout.clearLine(0);
96
+ process.stdout.cursorTo(0);
97
+ process.stdout.write(`${chalk_1.default.blue('⏳')} ${message}...`);
98
+ }
99
+ endProgress(message) {
100
+ if (!this.shouldLog('info'))
101
+ return;
102
+ process.stdout.clearLine(0);
103
+ process.stdout.cursorTo(0);
104
+ console.log(`${chalk_1.default.green('✓')} ${message}`);
105
+ }
106
+ }
107
+ exports.Logger = Logger;
108
+ // Create default logger instance
109
+ exports.logger = new Logger();
110
+ // Create logger with options
111
+ function createLogger(options) {
112
+ return new Logger(options);
113
+ }
114
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { ChildProcess } from 'child_process';
2
+ export interface ProcessOptions {
3
+ cwd?: string;
4
+ env?: Record<string, string>;
5
+ silent?: boolean;
6
+ inheritStdio?: boolean;
7
+ }
8
+ export interface ProcessResult {
9
+ exitCode: number | null;
10
+ signal: string | null;
11
+ stdout: string;
12
+ stderr: string;
13
+ }
14
+ /**
15
+ * Spawn a child process and capture its output
16
+ */
17
+ export declare function spawnProcess(command: string, args?: string[], options?: ProcessOptions): Promise<ProcessResult>;
18
+ /**
19
+ * Spawn a process with real-time output and signal handling
20
+ */
21
+ export declare class ProcessManager {
22
+ private command;
23
+ private args;
24
+ private options;
25
+ private child;
26
+ private isKilled;
27
+ constructor(command: string, args?: string[], options?: ProcessOptions);
28
+ /**
29
+ * Start the process
30
+ */
31
+ start(): Promise<void>;
32
+ /**
33
+ * Wait for the process to complete
34
+ */
35
+ wait(): Promise<ProcessResult>;
36
+ /**
37
+ * Kill the process
38
+ */
39
+ kill(signal?: NodeJS.Signals): void;
40
+ /**
41
+ * Check if process is running
42
+ */
43
+ isRunning(): boolean;
44
+ /**
45
+ * Get the child process instance
46
+ */
47
+ getProcess(): ChildProcess | null;
48
+ /**
49
+ * Run a command and return the result
50
+ */
51
+ static run(command: string, args?: string[], options?: ProcessOptions): Promise<ProcessResult>;
52
+ }
53
+ /**
54
+ * Handle SIGINT and SIGTERM gracefully
55
+ */
56
+ export declare function setupSignalHandlers(cleanup: () => void | Promise<void>): void;
57
+ /**
58
+ * Check if a command exists in PATH
59
+ */
60
+ export declare function commandExists(command: string): Promise<boolean>;
61
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAgDxB;AAED;;GAEG;AACH,qBAAa,cAAc;IAKvB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,QAAQ,CAAS;gBAGf,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,cAAmB;IAGtC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IAsCpC;;OAEG;IACH,IAAI,CAAC,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,IAAI;IAQ9C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,UAAU,IAAI,YAAY,GAAG,IAAI;IAIjC;;OAEG;WACU,GAAG,CACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC;CAK1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAClC,IAAI,CAcN;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUrE"}