@testivai/witness 1.13.0 → 2.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.
- package/README.md +5 -10
- package/dist/baselines/store.d.ts +1 -1
- package/dist/baselines/store.d.ts.map +1 -1
- package/dist/baselines/store.js.map +1 -1
- package/dist/bin/testivai.js +0 -2
- package/dist/bin/testivai.js.map +1 -1
- package/dist/browser/binding.d.ts +1 -6
- package/dist/browser/binding.d.ts.map +1 -1
- package/dist/browser/binding.js +6 -139
- package/dist/browser/binding.js.map +1 -1
- package/dist/browser/capture.d.ts +2 -3
- package/dist/browser/capture.d.ts.map +1 -1
- package/dist/browser/capture.js +7 -19
- package/dist/browser/capture.js.map +1 -1
- package/dist/browser/client.d.ts +2 -2
- package/dist/browser/client.d.ts.map +1 -1
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/discovery.d.ts +1 -1
- package/dist/browser/discovery.d.ts.map +1 -1
- package/dist/browser/discovery.js +5 -5
- package/dist/browser/discovery.js.map +1 -1
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/init.d.ts +3 -3
- package/dist/commands/init.js +10 -8
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +45 -443
- package/dist/commands/run.js.map +1 -1
- package/dist/config/index.d.ts +3 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config/local-config.d.ts +7 -9
- package/dist/config/local-config.d.ts.map +1 -1
- package/dist/config/local-config.js +32 -25
- package/dist/config/local-config.js.map +1 -1
- package/dist/config/validate-config.d.ts +33 -0
- package/dist/config/validate-config.d.ts.map +1 -0
- package/dist/config/validate-config.js +125 -0
- package/dist/config/validate-config.js.map +1 -0
- package/dist/diff/attribution.d.ts +1 -1
- package/dist/diff/attribution.d.ts.map +1 -1
- package/dist/diff/diff.d.ts +1 -1
- package/dist/diff/diff.d.ts.map +1 -1
- package/dist/diff/diff.js +3 -3
- package/dist/diff/diff.js.map +1 -1
- package/dist/diff/dom-diff.js +1 -1
- package/dist/diff/dom-diff.js.map +1 -1
- package/dist/diff/ignore.d.ts +1 -1
- package/dist/diff/ignore.d.ts.map +1 -1
- package/dist/diff/mask.d.ts +2 -2
- package/dist/diff/mask.d.ts.map +1 -1
- package/dist/diff/mask.js +2 -2
- package/dist/diff/mask.js.map +1 -1
- package/dist/diff/regions.d.ts +1 -1
- package/dist/diff/regions.d.ts.map +1 -1
- package/dist/diff/resize.d.ts +1 -1
- package/dist/diff/resize.d.ts.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -20
- package/dist/index.js.map +1 -1
- package/dist/report/compare.d.ts +3 -3
- package/dist/report/compare.d.ts.map +1 -1
- package/dist/report/compare.js +1 -1
- package/dist/report/compare.js.map +1 -1
- package/dist/report/generator.d.ts +2 -2
- package/dist/report/generator.d.ts.map +1 -1
- package/dist/report/generator.js.map +1 -1
- package/dist/report/template.d.ts +1 -1
- package/dist/report/template.d.ts.map +1 -1
- package/dist/report/template.js +16 -17
- package/dist/report/template.js.map +1 -1
- package/dist/standalone/launcher.js.map +1 -1
- package/dist/standalone/run.js.map +1 -1
- package/dist/types.d.ts +13 -136
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/file-naming.d.ts.map +1 -1
- package/dist/utils/file-naming.js +14 -5
- package/dist/utils/file-naming.js.map +1 -1
- package/dist/utils/framework-detect.d.ts +1 -1
- package/dist/utils/framework-detect.d.ts.map +1 -1
- package/dist/utils/framework-detect.js +9 -9
- package/dist/utils/framework-detect.js.map +1 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +10 -15
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/process.d.ts +1 -1
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/template-generator.d.ts.map +1 -1
- package/dist/utils/template-generator.js +0 -6
- package/dist/utils/template-generator.js.map +1 -1
- package/package.json +5 -7
- package/dist/ci.d.ts +0 -31
- package/dist/ci.d.ts.map +0 -1
- package/dist/ci.js +0 -118
- package/dist/ci.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -3
- package/dist/commands/auth.d.ts.map +0 -1
- package/dist/commands/auth.js +0 -129
- package/dist/commands/auth.js.map +0 -1
package/dist/commands/run.js
CHANGED
|
@@ -1,37 +1,4 @@
|
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -42,29 +9,21 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
42
9
|
const client_1 = require("../browser/client");
|
|
43
10
|
const binding_1 = require("../browser/binding");
|
|
44
11
|
const discovery_1 = require("../browser/discovery");
|
|
45
|
-
const common_1 = require("@testivai/common");
|
|
46
12
|
const process_1 = require("../utils/process");
|
|
47
13
|
const logger_1 = require("../utils/logger");
|
|
48
|
-
const ci_1 = require("../ci");
|
|
49
|
-
const simple_git_1 = __importDefault(require("simple-git"));
|
|
50
14
|
const local_config_1 = require("../config/local-config");
|
|
51
15
|
const generator_1 = require("../report/generator");
|
|
52
16
|
exports.runCommand = new commander_1.Command('run')
|
|
53
17
|
.description('Run visual tests with automatic capture')
|
|
54
18
|
.argument('<command>', 'Test command to execute (e.g., "npm test", "cypress run")')
|
|
55
19
|
.option('-p, --port <number>', 'Chrome remote debugging port')
|
|
56
|
-
.option('-b, --batch-id <id>', 'Specify batch ID (auto-generated if not provided)')
|
|
57
20
|
.option('--debug', 'Enable debug logging for snapshots')
|
|
58
21
|
.action(async (command, options) => {
|
|
59
22
|
let client = null;
|
|
60
23
|
let processManager = null;
|
|
61
|
-
let batchId = null;
|
|
62
24
|
// Setup signal handlers for cleanup
|
|
63
25
|
(0, process_1.setupSignalHandlers)(async () => {
|
|
64
26
|
logger_1.logger.info('Cleaning up...');
|
|
65
|
-
if (batchId) {
|
|
66
|
-
await finishBatch(batchId);
|
|
67
|
-
}
|
|
68
27
|
if (client) {
|
|
69
28
|
await client.disconnect();
|
|
70
29
|
}
|
|
@@ -73,141 +32,17 @@ exports.runCommand = new commander_1.Command('run')
|
|
|
73
32
|
}
|
|
74
33
|
});
|
|
75
34
|
try {
|
|
76
|
-
// ── Local mode check ────────────────────────────────────────────────
|
|
77
35
|
const cwd = process.cwd();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// Get browser port from options or default
|
|
82
|
-
const port = parseInt(options.port || '9222', 10);
|
|
83
|
-
// Start the test command FIRST (non-blocking)
|
|
84
|
-
logger_1.logger.info(`Starting test command: ${chalk_1.default.cyan(command)}`);
|
|
85
|
-
processManager = new process_1.ProcessManager(command, [], {
|
|
86
|
-
cwd,
|
|
87
|
-
env: {
|
|
88
|
-
...process.env,
|
|
89
|
-
TESTIVAI_MODE: 'local',
|
|
90
|
-
TESTIVAI_BROWSER_PORT: port.toString(),
|
|
91
|
-
TESTIVAI_CDP_PORT: port.toString(),
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
await processManager.start();
|
|
95
|
-
// Give the test command a moment to start launching Chrome
|
|
96
|
-
logger_1.logger.info('Waiting for test runner to start...');
|
|
97
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
98
|
-
// Now wait for Chrome to become available
|
|
99
|
-
logger_1.logger.info('Waiting for browser connection...');
|
|
100
|
-
client = new client_1.BrowserClient();
|
|
101
|
-
let connected = false;
|
|
102
|
-
let retryCount = 0;
|
|
103
|
-
const maxRetries = 60; // Wait up to 60 seconds for Chrome to start
|
|
104
|
-
while (!connected && retryCount < maxRetries && processManager.isRunning()) {
|
|
105
|
-
try {
|
|
106
|
-
await client.connect(port);
|
|
107
|
-
connected = true;
|
|
108
|
-
logger_1.logger.info('Successfully connected to browser');
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
retryCount++;
|
|
112
|
-
if (retryCount >= maxRetries) {
|
|
113
|
-
logger_1.logger.warn(`Failed to connect to Chrome after ${maxRetries} attempts. Continuing without browser capture...`);
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
if (!processManager.isRunning()) {
|
|
117
|
-
logger_1.logger.warn(`Test command exited before Chrome could start. Continuing without browser capture...`);
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
logger_1.logger.info(`Waiting for Chrome on port ${port}... (${retryCount}/${maxRetries})`);
|
|
121
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Set up browser binding if connected
|
|
125
|
-
let binding = null;
|
|
126
|
-
if (connected) {
|
|
127
|
-
binding = new binding_1.BrowserBinding(client, { debug: false });
|
|
128
|
-
await binding.setupBindings();
|
|
129
|
-
logger_1.logger.info('Browser binding setup complete');
|
|
130
|
-
}
|
|
131
|
-
// Wait for the test command to complete
|
|
132
|
-
logger_1.logger.info('Monitoring test execution...');
|
|
133
|
-
const result = await processManager.wait();
|
|
134
|
-
// Get all captured snapshots
|
|
135
|
-
let snapshots = [];
|
|
136
|
-
if (binding) {
|
|
137
|
-
snapshots = binding.getSnapshots();
|
|
138
|
-
logger_1.logger.info(`Captured ${snapshots.length} snapshot(s)`);
|
|
139
|
-
binding.cleanup();
|
|
140
|
-
}
|
|
141
|
-
// Clean up browser connection
|
|
142
|
-
if (client) {
|
|
143
|
-
await client.disconnect();
|
|
144
|
-
}
|
|
145
|
-
// Generate report
|
|
146
|
-
logger_1.logger.info('Generating visual report...');
|
|
147
|
-
const reportData = (0, generator_1.generateReport)({
|
|
148
|
-
projectRoot: cwd,
|
|
149
|
-
reportDir: localConfig.reportDir || 'visual-report',
|
|
150
|
-
threshold: localConfig.threshold,
|
|
151
|
-
autoOpen: localConfig.autoOpen,
|
|
152
|
-
});
|
|
153
|
-
// Print summary
|
|
154
|
-
const { summary } = reportData;
|
|
155
|
-
console.log();
|
|
156
|
-
console.log(chalk_1.default.cyan(' ═══ Visual Report Summary ═══'));
|
|
157
|
-
console.log(` Total: ${summary.total} | ` +
|
|
158
|
-
chalk_1.default.green(`Passed: ${summary.passed}`) + ' | ' +
|
|
159
|
-
chalk_1.default.red(`Changed: ${summary.changed}`) + ' | ' +
|
|
160
|
-
chalk_1.default.yellow(`New: ${summary.newSnapshots}`));
|
|
161
|
-
if (summary.changed > 0 || summary.newSnapshots > 0) {
|
|
162
|
-
console.log();
|
|
163
|
-
console.log(chalk_1.default.gray(' To approve all: npx testivai approve --all'));
|
|
164
|
-
}
|
|
165
|
-
// Exit code
|
|
166
|
-
if (localConfig.failOnDiff && summary.changed > 0) {
|
|
167
|
-
process.exit(1);
|
|
168
|
-
}
|
|
169
|
-
process.exit(result.exitCode || 0);
|
|
170
|
-
}
|
|
171
|
-
// ── Cloud mode (existing flow) ──────────────────────────────────────
|
|
172
|
-
// Load configuration
|
|
173
|
-
const config = (0, common_1.loadConfig)();
|
|
174
|
-
const apiKey = (0, common_1.getApiKey)();
|
|
175
|
-
// Check debug flag from command line or config
|
|
176
|
-
const isDebug = options.debug || config?.debug || false;
|
|
177
|
-
if (!apiKey) {
|
|
178
|
-
logger_1.logger.error('Not authenticated. Run "testivai auth <api-key>" first.');
|
|
179
|
-
process.exit(2);
|
|
180
|
-
}
|
|
181
|
-
// Validate API key
|
|
182
|
-
logger_1.logger.info('Validating API key...');
|
|
183
|
-
const apiClient = new common_1.CoreApiClient(apiKey);
|
|
184
|
-
const validation = await apiClient.validateApiKey();
|
|
185
|
-
if (!validation.valid) {
|
|
186
|
-
logger_1.logger.error(`Invalid API key: ${validation.error}`);
|
|
187
|
-
process.exit(2);
|
|
188
|
-
}
|
|
189
|
-
// Get browser port from config or options
|
|
190
|
-
const resolvedConfig = await config;
|
|
191
|
-
const port = parseInt(options.port || resolvedConfig.browserPort || resolvedConfig.cdpPort || '9222', 10);
|
|
192
|
-
// Get git info first (doesn't require Chrome)
|
|
193
|
-
const gitInfo = await getGitInfo();
|
|
194
|
-
// Detect CI environment
|
|
195
|
-
const ciRunId = (0, ci_1.getCiRunId)();
|
|
196
|
-
const ciInfo = (0, ci_1.getCiInfo)();
|
|
197
|
-
if (ciRunId && isDebug) {
|
|
198
|
-
logger_1.logger.info(`Detected CI environment. Run ID: ${ciRunId}`);
|
|
199
|
-
if (ciInfo) {
|
|
200
|
-
logger_1.logger.info(`CI Info: provider=${ciInfo.provider}, PR=#${ciInfo.prNumber || 'N/A'}`);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
36
|
+
const localConfig = (0, local_config_1.loadLocalConfig)(cwd);
|
|
37
|
+
// Get browser port from options or default
|
|
38
|
+
const port = parseInt(options.port || '9222', 10);
|
|
203
39
|
// Start the test command FIRST (non-blocking)
|
|
204
|
-
// This allows the test runner to launch Chrome
|
|
205
40
|
logger_1.logger.info(`Starting test command: ${chalk_1.default.cyan(command)}`);
|
|
206
41
|
processManager = new process_1.ProcessManager(command, [], {
|
|
207
|
-
cwd
|
|
42
|
+
cwd,
|
|
208
43
|
env: {
|
|
209
44
|
...process.env,
|
|
210
|
-
TESTIVAI_MODE: '
|
|
45
|
+
TESTIVAI_MODE: 'local',
|
|
211
46
|
TESTIVAI_BROWSER_PORT: port.toString(),
|
|
212
47
|
TESTIVAI_CDP_PORT: port.toString(),
|
|
213
48
|
},
|
|
@@ -228,51 +63,64 @@ exports.runCommand = new commander_1.Command('run')
|
|
|
228
63
|
connected = true;
|
|
229
64
|
logger_1.logger.info('Successfully connected to browser');
|
|
230
65
|
}
|
|
231
|
-
catch (
|
|
66
|
+
catch (_error) {
|
|
232
67
|
retryCount++;
|
|
233
68
|
if (retryCount >= maxRetries) {
|
|
234
|
-
|
|
69
|
+
logger_1.logger.warn(`Failed to connect to Chrome after ${maxRetries} attempts. Continuing without browser capture...`);
|
|
70
|
+
break;
|
|
235
71
|
}
|
|
236
72
|
if (!processManager.isRunning()) {
|
|
237
|
-
|
|
73
|
+
logger_1.logger.warn(`Test command exited before Chrome could start. Continuing without browser capture...`);
|
|
74
|
+
break;
|
|
238
75
|
}
|
|
239
76
|
logger_1.logger.info(`Waiting for Chrome on port ${port}... (${retryCount}/${maxRetries})`);
|
|
240
77
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
241
78
|
}
|
|
242
79
|
}
|
|
243
|
-
if
|
|
244
|
-
|
|
80
|
+
// Set up browser binding if connected
|
|
81
|
+
let binding = null;
|
|
82
|
+
if (connected) {
|
|
83
|
+
binding = new binding_1.BrowserBinding(client, { debug: options.debug ?? false });
|
|
84
|
+
await binding.setupBindings();
|
|
85
|
+
logger_1.logger.info('Browser binding setup complete');
|
|
245
86
|
}
|
|
246
|
-
// Get browser info
|
|
247
|
-
const browserInfo = await getBrowserInfo(client);
|
|
248
|
-
// Set up browser binding
|
|
249
|
-
const binding = new binding_1.BrowserBinding(client, { debug: isDebug });
|
|
250
|
-
await binding.setupBindings();
|
|
251
87
|
// Wait for the test command to complete
|
|
252
88
|
logger_1.logger.info('Monitoring test execution...');
|
|
253
89
|
const result = await processManager.wait();
|
|
254
90
|
// Get all captured snapshots
|
|
255
|
-
|
|
256
|
-
|
|
91
|
+
if (binding) {
|
|
92
|
+
const snapshots = binding.getSnapshots();
|
|
93
|
+
logger_1.logger.info(`Captured ${snapshots.length} snapshot(s)`);
|
|
94
|
+
binding.cleanup();
|
|
95
|
+
}
|
|
257
96
|
// Clean up browser connection
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (snapshots.length > 0) {
|
|
261
|
-
batchId = options.batchId || await startBatchWithSnapshots(apiClient, gitInfo, browserInfo, snapshots, isDebug, ciRunId, ciInfo);
|
|
97
|
+
if (client) {
|
|
98
|
+
await client.disconnect();
|
|
262
99
|
}
|
|
263
|
-
|
|
264
|
-
|
|
100
|
+
// Generate report
|
|
101
|
+
logger_1.logger.info('Generating visual report...');
|
|
102
|
+
const reportData = (0, generator_1.generateReport)({
|
|
103
|
+
projectRoot: cwd,
|
|
104
|
+
reportDir: localConfig.reportDir || 'visual-report',
|
|
105
|
+
threshold: localConfig.threshold,
|
|
106
|
+
autoOpen: localConfig.autoOpen,
|
|
107
|
+
});
|
|
108
|
+
// Print summary
|
|
109
|
+
const { summary } = reportData;
|
|
110
|
+
console.log();
|
|
111
|
+
console.log(chalk_1.default.cyan(' === Visual Report Summary ==='));
|
|
112
|
+
console.log(` Total: ${summary.total} | ` +
|
|
113
|
+
chalk_1.default.green(`Passed: ${summary.passed}`) + ' | ' +
|
|
114
|
+
chalk_1.default.red(`Changed: ${summary.changed}`) + ' | ' +
|
|
115
|
+
chalk_1.default.yellow(`New: ${summary.newSnapshots}`));
|
|
116
|
+
if (summary.changed > 0 || summary.newSnapshots > 0) {
|
|
117
|
+
console.log();
|
|
118
|
+
console.log(chalk_1.default.gray(' To approve all: npx testivai approve --all'));
|
|
265
119
|
}
|
|
266
|
-
//
|
|
267
|
-
if (
|
|
268
|
-
|
|
120
|
+
// Exit code
|
|
121
|
+
if (localConfig.failOnDiff && summary.changed > 0) {
|
|
122
|
+
process.exit(1);
|
|
269
123
|
}
|
|
270
|
-
// Print results
|
|
271
|
-
console.log(chalk_1.default.green('\n=== Test Results ==='));
|
|
272
|
-
console.log(`Batch ID: ${batchId}`);
|
|
273
|
-
console.log(`Snapshots: ${snapshots.length}`);
|
|
274
|
-
console.log(`Exit code: ${result.exitCode}`);
|
|
275
|
-
// Exit with same code as test command
|
|
276
124
|
process.exit(result.exitCode || 0);
|
|
277
125
|
}
|
|
278
126
|
catch (error) {
|
|
@@ -287,250 +135,4 @@ exports.runCommand = new commander_1.Command('run')
|
|
|
287
135
|
}
|
|
288
136
|
}
|
|
289
137
|
});
|
|
290
|
-
/**
|
|
291
|
-
* Get browser information
|
|
292
|
-
*/
|
|
293
|
-
async function getBrowserInfo(client) {
|
|
294
|
-
try {
|
|
295
|
-
const connectionInfo = client.getConnectionInfo();
|
|
296
|
-
// Navigate to a blank page to ensure viewport is properly initialized
|
|
297
|
-
await client.send('Page.navigate', { url: 'about:blank' });
|
|
298
|
-
// Wait a moment for the page to load
|
|
299
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
300
|
-
const userAgent = await client.send('Runtime.evaluate', {
|
|
301
|
-
expression: 'navigator.userAgent',
|
|
302
|
-
returnByValue: true,
|
|
303
|
-
});
|
|
304
|
-
const viewport = await client.send('Runtime.evaluate', {
|
|
305
|
-
expression: `
|
|
306
|
-
(function() {
|
|
307
|
-
return {
|
|
308
|
-
width: window.innerWidth,
|
|
309
|
-
height: window.innerHeight
|
|
310
|
-
};
|
|
311
|
-
})()
|
|
312
|
-
`,
|
|
313
|
-
returnByValue: true,
|
|
314
|
-
});
|
|
315
|
-
// Ensure we have valid viewport dimensions
|
|
316
|
-
const width = viewport.result.value?.width || 1920; // Default fallback
|
|
317
|
-
const height = viewport.result.value?.height || 1080; // Default fallback
|
|
318
|
-
return {
|
|
319
|
-
name: 'chrome',
|
|
320
|
-
version: connectionInfo?.browserVersion || 'unknown',
|
|
321
|
-
viewportWidth: width,
|
|
322
|
-
viewportHeight: height,
|
|
323
|
-
userAgent: userAgent.result.value || 'unknown',
|
|
324
|
-
os: 'unknown',
|
|
325
|
-
device: 'desktop',
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
catch (error) {
|
|
329
|
-
logger_1.logger.error('Failed to get browser info:', error);
|
|
330
|
-
// Return sensible defaults if we can't get the actual values
|
|
331
|
-
return {
|
|
332
|
-
name: 'chrome',
|
|
333
|
-
version: 'unknown',
|
|
334
|
-
viewportWidth: 1920,
|
|
335
|
-
viewportHeight: 1080,
|
|
336
|
-
userAgent: 'unknown',
|
|
337
|
-
os: 'unknown',
|
|
338
|
-
device: 'desktop',
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Get git information
|
|
344
|
-
*/
|
|
345
|
-
async function getGitInfo() {
|
|
346
|
-
try {
|
|
347
|
-
const git = (0, simple_git_1.default)();
|
|
348
|
-
const [branch, commit, message, author] = await Promise.all([
|
|
349
|
-
git.revparse(['--abbrev-ref', 'HEAD']).catch(() => 'unknown'),
|
|
350
|
-
git.revparse(['HEAD']).catch(() => 'unknown'),
|
|
351
|
-
git.show(['-s', '--format=%s']).catch(() => ''),
|
|
352
|
-
git.show(['-s', '--format=%an']).catch(() => ''),
|
|
353
|
-
]);
|
|
354
|
-
return {
|
|
355
|
-
branch,
|
|
356
|
-
commit,
|
|
357
|
-
message: message || undefined,
|
|
358
|
-
author: author || undefined,
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
catch (error) {
|
|
362
|
-
logger_1.logger.error('Failed to get git info:', error);
|
|
363
|
-
return {
|
|
364
|
-
branch: 'unknown',
|
|
365
|
-
commit: 'unknown',
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
/**
|
|
370
|
-
* Start a new batch with snapshots (like Playwright SDK)
|
|
371
|
-
*/
|
|
372
|
-
async function startBatchWithSnapshots(apiClient, gitInfo, browserInfo, snapshots, debug, ciRunId, ciInfo) {
|
|
373
|
-
try {
|
|
374
|
-
// Transform snapshots to match API format
|
|
375
|
-
const transformedSnapshots = snapshots.map(snapshot => {
|
|
376
|
-
const structureHtml = snapshot.structure || '';
|
|
377
|
-
if (debug) {
|
|
378
|
-
logger_1.logger.info(`DEBUG: Snapshot ${snapshot.name} - Structure length: ${structureHtml.length} chars`);
|
|
379
|
-
}
|
|
380
|
-
if (structureHtml.length === 0) {
|
|
381
|
-
logger_1.logger.warn(`WARNING: Empty structure for snapshot ${snapshot.name}`);
|
|
382
|
-
}
|
|
383
|
-
else if (debug) {
|
|
384
|
-
logger_1.logger.info(`DEBUG: Structure preview: ${structureHtml.substring(0, 100)}...`);
|
|
385
|
-
}
|
|
386
|
-
return {
|
|
387
|
-
snapshotName: snapshot.name,
|
|
388
|
-
testName: snapshot.name,
|
|
389
|
-
timestamp: new Date(snapshot.timestamp).getTime(),
|
|
390
|
-
url: snapshot.url || 'about:blank',
|
|
391
|
-
viewport: snapshot.viewport || { width: 1920, height: 1080 },
|
|
392
|
-
screenshotData: snapshot.screenshot, // Already base64 encoded
|
|
393
|
-
structure: { html: structureHtml },
|
|
394
|
-
styles: snapshot.styles || { computed_styles: {} },
|
|
395
|
-
performanceMetrics: snapshot.performanceMetrics,
|
|
396
|
-
layout: {
|
|
397
|
-
x: 0,
|
|
398
|
-
y: 0,
|
|
399
|
-
width: snapshot.viewport?.width || 1920,
|
|
400
|
-
height: snapshot.viewport?.height || 1080
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
});
|
|
404
|
-
const batchPayload = {
|
|
405
|
-
git: gitInfo,
|
|
406
|
-
browser: browserInfo,
|
|
407
|
-
snapshots: transformedSnapshots,
|
|
408
|
-
timestamp: Date.now(),
|
|
409
|
-
runId: ciRunId || process.env.CI_RUN_ID || null,
|
|
410
|
-
ci: ciInfo || null,
|
|
411
|
-
};
|
|
412
|
-
// Compress if large
|
|
413
|
-
const compressionHelper = (await Promise.resolve().then(() => __importStar(require('@testivai/common')))).compressionHelper;
|
|
414
|
-
const payloadJson = JSON.stringify(batchPayload);
|
|
415
|
-
const compressionResult = await compressionHelper.compress(payloadJson);
|
|
416
|
-
const apiKey = (0, common_1.getApiKey)();
|
|
417
|
-
if (!apiKey) {
|
|
418
|
-
throw new Error('API key is required');
|
|
419
|
-
}
|
|
420
|
-
const apiUrl = process.env.TESTIVAI_API_URL || common_1.DEFAULT_CORE_API_URL;
|
|
421
|
-
// Create AbortController for timeout
|
|
422
|
-
const controller = new AbortController();
|
|
423
|
-
const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
|
|
424
|
-
const response = await fetch(`${apiUrl}/api/v1/ingest/start-batch`, {
|
|
425
|
-
method: 'POST',
|
|
426
|
-
headers: {
|
|
427
|
-
'X-API-Key': apiKey,
|
|
428
|
-
'Content-Type': 'application/json',
|
|
429
|
-
...(compressionResult.compressionRatio > 0 && {
|
|
430
|
-
'Content-Encoding': 'gzip',
|
|
431
|
-
}),
|
|
432
|
-
},
|
|
433
|
-
body: compressionResult.data,
|
|
434
|
-
signal: controller.signal,
|
|
435
|
-
});
|
|
436
|
-
clearTimeout(timeout);
|
|
437
|
-
if (!response.ok) {
|
|
438
|
-
throw new Error(`Failed to start batch: ${response.statusText}`);
|
|
439
|
-
}
|
|
440
|
-
const result = await response.json();
|
|
441
|
-
const returnedBatchId = result.batch_id || result.batchId;
|
|
442
|
-
if (!returnedBatchId) {
|
|
443
|
-
throw new Error('No batch ID returned from API');
|
|
444
|
-
}
|
|
445
|
-
return returnedBatchId;
|
|
446
|
-
}
|
|
447
|
-
catch (error) {
|
|
448
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
449
|
-
logger_1.logger.error('Failed to start batch: Request timed out after 30 seconds');
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
logger_1.logger.error('Failed to start batch:', error);
|
|
453
|
-
}
|
|
454
|
-
throw error;
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
/**
|
|
458
|
-
* Start a new batch (without snapshots)
|
|
459
|
-
*/
|
|
460
|
-
async function startBatch(apiClient, gitInfo, browserInfo, ciRunId, ciInfo) {
|
|
461
|
-
try {
|
|
462
|
-
const apiKey = (0, common_1.getApiKey)();
|
|
463
|
-
if (!apiKey) {
|
|
464
|
-
throw new Error('API key is required');
|
|
465
|
-
}
|
|
466
|
-
const apiUrl = process.env.TESTIVAI_API_URL || common_1.DEFAULT_CORE_API_URL;
|
|
467
|
-
// Create AbortController for timeout
|
|
468
|
-
const controller = new AbortController();
|
|
469
|
-
const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
|
|
470
|
-
const response = await fetch(`${apiUrl}/api/v1/ingest/start-batch`, {
|
|
471
|
-
method: 'POST',
|
|
472
|
-
headers: {
|
|
473
|
-
'X-API-Key': apiKey,
|
|
474
|
-
'Content-Type': 'application/json',
|
|
475
|
-
},
|
|
476
|
-
body: JSON.stringify({
|
|
477
|
-
git: gitInfo,
|
|
478
|
-
browser: browserInfo,
|
|
479
|
-
snapshots: [],
|
|
480
|
-
timestamp: Date.now(),
|
|
481
|
-
runId: ciRunId || process.env.CI_RUN_ID || null,
|
|
482
|
-
ci: ciInfo || null,
|
|
483
|
-
}),
|
|
484
|
-
signal: controller.signal,
|
|
485
|
-
});
|
|
486
|
-
clearTimeout(timeout);
|
|
487
|
-
if (!response.ok) {
|
|
488
|
-
throw new Error(`Failed to start batch: ${response.statusText}`);
|
|
489
|
-
}
|
|
490
|
-
const result = await response.json();
|
|
491
|
-
logger_1.logger.upload(result.batch_id);
|
|
492
|
-
return result.batch_id;
|
|
493
|
-
}
|
|
494
|
-
catch (error) {
|
|
495
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
496
|
-
logger_1.logger.error('Failed to start batch: Request timed out after 30 seconds');
|
|
497
|
-
}
|
|
498
|
-
else {
|
|
499
|
-
logger_1.logger.error('Failed to start batch:', error);
|
|
500
|
-
}
|
|
501
|
-
throw error;
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* Finish a batch
|
|
506
|
-
*/
|
|
507
|
-
async function finishBatch(batchId) {
|
|
508
|
-
try {
|
|
509
|
-
const apiKey = (0, common_1.getApiKey)();
|
|
510
|
-
if (!apiKey) {
|
|
511
|
-
throw new Error('API key is required');
|
|
512
|
-
}
|
|
513
|
-
const apiUrl = process.env.TESTIVAI_API_URL || common_1.DEFAULT_CORE_API_URL;
|
|
514
|
-
// Create AbortController for timeout
|
|
515
|
-
const controller = new AbortController();
|
|
516
|
-
const timeout = setTimeout(() => controller.abort(), 30000); // 30 second timeout
|
|
517
|
-
const response = await fetch(`${apiUrl}/api/v1/ingest/finish-batch/${batchId}`, {
|
|
518
|
-
method: 'POST',
|
|
519
|
-
headers: {
|
|
520
|
-
'X-API-Key': apiKey,
|
|
521
|
-
'Content-Type': 'application/json',
|
|
522
|
-
},
|
|
523
|
-
signal: controller.signal,
|
|
524
|
-
});
|
|
525
|
-
clearTimeout(timeout);
|
|
526
|
-
if (!response.ok) {
|
|
527
|
-
throw new Error(`Failed to finish batch: ${response.statusText}`);
|
|
528
|
-
}
|
|
529
|
-
logger_1.logger.success(`Batch ${batchId} finished successfully`);
|
|
530
|
-
}
|
|
531
|
-
catch (error) {
|
|
532
|
-
logger_1.logger.error('Failed to finish batch:', error);
|
|
533
|
-
// Don't throw here - we want to exit even if finishing fails
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
138
|
//# sourceMappingURL=run.js.map
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TestivAI Configuration
|
|
3
3
|
*/
|
|
4
|
-
export { loadLocalConfig, createDefaultConfig, localConfigExists,
|
|
4
|
+
export { loadLocalConfig, createDefaultConfig, localConfigExists, getConfigPath, getDefaultConfig, } from './local-config';
|
|
5
5
|
export type { LocalConfig } from './local-config';
|
|
6
|
+
export { validateLocalConfig } from './validate-config';
|
|
7
|
+
export type { ConfigValidation } from './validate-config';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* TestivAI Configuration
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.validateLocalConfig = exports.getDefaultConfig = exports.getConfigPath = exports.localConfigExists = exports.createDefaultConfig = exports.loadLocalConfig = void 0;
|
|
7
7
|
var local_config_1 = require("./local-config");
|
|
8
8
|
Object.defineProperty(exports, "loadLocalConfig", { enumerable: true, get: function () { return local_config_1.loadLocalConfig; } });
|
|
9
9
|
Object.defineProperty(exports, "createDefaultConfig", { enumerable: true, get: function () { return local_config_1.createDefaultConfig; } });
|
|
10
10
|
Object.defineProperty(exports, "localConfigExists", { enumerable: true, get: function () { return local_config_1.localConfigExists; } });
|
|
11
|
-
Object.defineProperty(exports, "isLocalMode", { enumerable: true, get: function () { return local_config_1.isLocalMode; } });
|
|
12
11
|
Object.defineProperty(exports, "getConfigPath", { enumerable: true, get: function () { return local_config_1.getConfigPath; } });
|
|
13
12
|
Object.defineProperty(exports, "getDefaultConfig", { enumerable: true, get: function () { return local_config_1.getDefaultConfig; } });
|
|
13
|
+
var validate_config_1 = require("./validate-config");
|
|
14
|
+
Object.defineProperty(exports, "validateLocalConfig", { enumerable: true, get: function () { return validate_config_1.validateLocalConfig; } });
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAMwB;AALtB,+GAAA,eAAe,OAAA;AACf,mHAAA,mBAAmB,OAAA;AACnB,iHAAA,iBAAiB,OAAA;AACjB,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAKlB,qDAAwD;AAA/C,sHAAA,mBAAmB,OAAA"}
|