@wdio/nightwatch-devtools 1.1.1 → 1.3.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 (39) hide show
  1. package/README.md +66 -1
  2. package/dist/bidi-OH4ZFDN5.js +215 -0
  3. package/dist/bidi-OH4ZFDN5.js.map +1 -0
  4. package/dist/chunk-DKSBYMPM.js +191 -0
  5. package/dist/chunk-DKSBYMPM.js.map +1 -0
  6. package/dist/index.d.ts +111 -16
  7. package/dist/index.js +6253 -770
  8. package/dist/index.js.map +1 -1
  9. package/package.json +20 -13
  10. package/dist/constants.d.ts +0 -55
  11. package/dist/constants.js +0 -95
  12. package/dist/constants.js.map +0 -1
  13. package/dist/helpers/browserProxy.d.ts +0 -46
  14. package/dist/helpers/browserProxy.js +0 -314
  15. package/dist/helpers/browserProxy.js.map +0 -1
  16. package/dist/helpers/capturePerformance.d.ts +0 -5
  17. package/dist/helpers/capturePerformance.js +0 -53
  18. package/dist/helpers/capturePerformance.js.map +0 -1
  19. package/dist/helpers/cucumberHooks.cjs +0 -54
  20. package/dist/helpers/cucumberHooks.cjs.map +0 -1
  21. package/dist/helpers/cucumberHooks.d.cts +0 -21
  22. package/dist/helpers/suiteManager.d.ts +0 -43
  23. package/dist/helpers/suiteManager.js +0 -143
  24. package/dist/helpers/suiteManager.js.map +0 -1
  25. package/dist/helpers/testManager.d.ts +0 -45
  26. package/dist/helpers/testManager.js +0 -143
  27. package/dist/helpers/testManager.js.map +0 -1
  28. package/dist/helpers/utils.d.ts +0 -83
  29. package/dist/helpers/utils.js +0 -447
  30. package/dist/helpers/utils.js.map +0 -1
  31. package/dist/reporter.d.ts +0 -44
  32. package/dist/reporter.js +0 -185
  33. package/dist/reporter.js.map +0 -1
  34. package/dist/session.d.ts +0 -78
  35. package/dist/session.js +0 -643
  36. package/dist/session.js.map +0 -1
  37. package/dist/types.d.ts +0 -190
  38. package/dist/types.js +0 -5
  39. package/dist/types.js.map +0 -1
@@ -1,447 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as net from 'node:net';
3
- import * as path from 'node:path';
4
- import { parse as parseStackTrace } from 'stacktrace-parser';
5
- import logger from '@wdio/logger';
6
- import { ANSI_REGEX, LOG_LEVEL_PATTERNS, TEST_FILE_PATTERN, CONFIG_FILENAMES } from '../constants.js';
7
- export function determineTestState(testcase) {
8
- if (testcase.passed === 0 && testcase.failed === 0) {
9
- return 'skipped';
10
- }
11
- return testcase.passed > 0 && testcase.failed === 0 ? 'passed' : 'failed';
12
- }
13
- // Track test occurrences to generate stable UIDs
14
- const signatureCounters = new Map();
15
- /**
16
- * Generate stable UID for test/suite.
17
- * Accepts either (item: SuiteStats | TestStats) or (file: string, name: string).
18
- */
19
- export function generateStableUid(itemOrFile, name) {
20
- let file, testName;
21
- if (typeof itemOrFile === 'object' &&
22
- itemOrFile !== null &&
23
- name === undefined) {
24
- file = itemOrFile.file || '';
25
- testName = String(itemOrFile.fullTitle || itemOrFile.title);
26
- }
27
- else {
28
- file = itemOrFile || '';
29
- testName = String(name || '');
30
- }
31
- const signature = `${file}::${testName}`;
32
- const count = signatureCounters.get(signature) || 0;
33
- signatureCounters.set(signature, count + 1);
34
- const hashInput = count > 0 ? `${signature}::${count}` : signature;
35
- const hash = hashInput
36
- .split('')
37
- .reduce((acc, char) => ((acc << 5) - acc + char.charCodeAt(0)) | 0, 0);
38
- return `stable-${Math.abs(hash).toString(36)}`;
39
- }
40
- /** Reset counters at the start of each test run. */
41
- export function resetSignatureCounters() {
42
- signatureCounters.clear();
43
- }
44
- /**
45
- * Compute a purely deterministic UID from arbitrary string parts.
46
- * Unlike generateStableUid this NEVER uses the signature counter, so calling
47
- * it multiple times with the same inputs always returns the same value.
48
- * Use this wherever the same entity (e.g. a Cucumber scenario) must map to
49
- * the same UID across retries.
50
- */
51
- export function deterministicUid(...parts) {
52
- const hash = parts
53
- .join('::')
54
- .split('')
55
- .reduce((acc, char) => ((acc << 5) - acc + char.charCodeAt(0)) | 0, 0);
56
- return `stable-${Math.abs(hash).toString(36)}`;
57
- }
58
- /** Returns true if a stack frame belongs to user code (not dependencies, internals, or build output). */
59
- function isUserCodeFrame(frame) {
60
- const { file } = frame;
61
- return !!(file &&
62
- !file.includes('/node_modules/') &&
63
- !file.includes('<anonymous>') &&
64
- !file.includes('node:internal') &&
65
- !file.includes('/dist/') &&
66
- !file.includes('/index.js'));
67
- }
68
- /** Strips the file:// protocol and any trailing :line:col suffix from a file path. */
69
- function normalizeFilePath(filePath) {
70
- return filePath.replace(/^file:\/\//, '').split(':')[0];
71
- }
72
- /**
73
- * Find test file from stack trace.
74
- * Parses call stack to find the first frame that looks like a test file.
75
- */
76
- export function findTestFileFromStack() {
77
- const stack = new Error().stack;
78
- if (!stack) {
79
- return undefined;
80
- }
81
- // Prefer a frame whose filename matches *.test.ts / *.spec.ts (strong
82
- // signal). Fall back to the first plain user-code frame so arbitrary
83
- // project layouts (e.g. Cucumber step files under `src/steps/`) still
84
- // surface their owning file instead of going undetected.
85
- const frames = parseStackTrace(stack);
86
- const preferred = frames.find((f) => isUserCodeFrame(f) && TEST_FILE_PATTERN.test(f.file));
87
- const frame = preferred ?? frames.find(isUserCodeFrame);
88
- if (!frame?.file) {
89
- return undefined;
90
- }
91
- const filePath = normalizeFilePath(frame.file);
92
- return fs.existsSync(filePath) ? filePath : undefined;
93
- }
94
- /**
95
- * Extract suite and test names — and their line numbers — from a test file.
96
- * Returns a TestFileMetadata object used to build `callSource` strings for
97
- * the TestLens eye-icon navigation.
98
- */
99
- export function extractTestMetadata(filePath) {
100
- const result = {
101
- suiteTitle: null,
102
- suiteLine: null,
103
- testNames: [],
104
- testLines: []
105
- };
106
- if (!fs.existsSync(filePath)) {
107
- return result;
108
- }
109
- try {
110
- const lines = fs.readFileSync(filePath, 'utf-8').split('\n');
111
- for (let i = 0; i < lines.length; i++) {
112
- const line = lines[i];
113
- const lineNum = i + 1;
114
- if (result.suiteTitle === null) {
115
- const m = line.match(/(?:describe|suite|context)\s*\(\s*['"`]([^'"`]+)['"`]/);
116
- if (m) {
117
- result.suiteTitle = m[1];
118
- result.suiteLine = lineNum;
119
- }
120
- }
121
- // describe/it style: it('name', ...) / test('name', ...) / specify('name', ...)
122
- const itMatch = line.match(/(?:it|test|specify)\s*\(\s*['"`]([^'"`]+)['"`]/);
123
- if (itMatch) {
124
- result.testNames.push(itMatch[1]);
125
- result.testLines.push(lineNum);
126
- continue;
127
- }
128
- // Object-export style (NightwatchTests): 'Test name': () => { / 'Test name': function() {
129
- // This is the default format generated by `npx nightwatch --yes`
130
- const objMatch = line.match(/^\s*['"`]([^'"`]+)['"`]\s*:\s*(?:async\s+)?(?:\([^)]*\)\s*=>|function\s*\()/);
131
- if (objMatch) {
132
- result.testNames.push(objMatch[1]);
133
- result.testLines.push(lineNum);
134
- }
135
- }
136
- }
137
- catch {
138
- // skip unparseable files
139
- }
140
- return result;
141
- }
142
- /**
143
- * Get call source info from stack trace.
144
- * Returns { filePath, callSource } where callSource has the filename:line format.
145
- */
146
- export function getCallSourceFromStack() {
147
- const stack = new Error().stack;
148
- if (!stack) {
149
- return { filePath: undefined, callSource: 'unknown:0' };
150
- }
151
- const frame = parseStackTrace(stack).find(isUserCodeFrame);
152
- if (!frame?.file) {
153
- return { filePath: undefined, callSource: 'unknown:0' };
154
- }
155
- const filePath = normalizeFilePath(frame.file);
156
- return { filePath, callSource: `${filePath}:${frame.lineNumber ?? 0}` };
157
- }
158
- /**
159
- * Find test file by searching the workspace for a matching filename.
160
- * Used when the stack trace doesn't have the file yet (e.g. in beforeEach).
161
- */
162
- export function findTestFileByName(filename, workspaceRoot) {
163
- if (!filename || !workspaceRoot) {
164
- return undefined;
165
- }
166
- const baseFilename = filename.replace(/\.[cm]?[jt]sx?$/, '');
167
- function searchDir(dir, depth = 0) {
168
- if (depth > 5) {
169
- return undefined;
170
- }
171
- try {
172
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
173
- const fullPath = path.join(dir, entry.name);
174
- if (entry.isDirectory()) {
175
- const found = searchDir(fullPath, depth + 1);
176
- if (found) {
177
- return found;
178
- }
179
- }
180
- else if (TEST_FILE_PATTERN.test(entry.name) &&
181
- entry.name.replace(TEST_FILE_PATTERN, '') === baseFilename) {
182
- return fullPath;
183
- }
184
- }
185
- }
186
- catch {
187
- // Permission denied or other error — skip
188
- }
189
- return undefined;
190
- }
191
- return searchDir(workspaceRoot);
192
- }
193
- // ---------------------------------------------------------------------------
194
- // Console / log helpers (used by SessionCapturer)
195
- // ---------------------------------------------------------------------------
196
- /**
197
- * Strip ANSI escape codes from a string.
198
- */
199
- export const stripAnsiCodes = (text) => text.replace(ANSI_REGEX, '');
200
- /** Infer a log level from the text content of a line. */
201
- export function detectLogLevel(text) {
202
- const normalised = stripAnsiCodes(text).toLowerCase();
203
- for (const { level, pattern } of LOG_LEVEL_PATTERNS) {
204
- if (pattern.test(normalised)) {
205
- return level;
206
- }
207
- }
208
- return 'log';
209
- }
210
- /**
211
- * Build a ConsoleLog entry.
212
- */
213
- export function createConsoleLogEntry(type, args, source) {
214
- return { timestamp: Date.now(), type, args, source };
215
- }
216
- /** Map a Chrome DevTools log level string to our LogLevel union. */
217
- export function chromeLogLevelToLogLevel(level) {
218
- const levelName = (typeof level === 'object' ? (level?.name ?? '') : (level ?? '')).toUpperCase();
219
- switch (levelName) {
220
- case 'SEVERE':
221
- return 'error';
222
- case 'WARNING':
223
- return 'warn';
224
- case 'INFO':
225
- return 'info';
226
- case 'DEBUG':
227
- return 'debug';
228
- default:
229
- return 'log';
230
- }
231
- }
232
- /** Derive a human-readable request type from URL and MIME type. */
233
- export function getRequestType(url, mimeType) {
234
- const contentType = mimeType?.toLowerCase() ?? '';
235
- const urlLower = url.toLowerCase();
236
- if (contentType.includes('text/html')) {
237
- return 'document';
238
- }
239
- if (contentType.includes('text/css')) {
240
- return 'stylesheet';
241
- }
242
- if (contentType.includes('javascript') ||
243
- contentType.includes('ecmascript')) {
244
- return 'script';
245
- }
246
- if (contentType.includes('image/')) {
247
- return 'image';
248
- }
249
- if (contentType.includes('font/') || contentType.includes('woff')) {
250
- return 'font';
251
- }
252
- if (contentType.includes('application/json')) {
253
- return 'fetch';
254
- }
255
- if (urlLower.endsWith('.html') || urlLower.endsWith('.htm')) {
256
- return 'document';
257
- }
258
- if (urlLower.endsWith('.css')) {
259
- return 'stylesheet';
260
- }
261
- if (urlLower.endsWith('.js') || urlLower.endsWith('.mjs')) {
262
- return 'script';
263
- }
264
- if (/\.(png|jpg|jpeg|gif|svg|webp|ico)$/.test(urlLower)) {
265
- return 'image';
266
- }
267
- if (/\.(woff|woff2|ttf|eot|otf)$/.test(urlLower)) {
268
- return 'font';
269
- }
270
- return 'xhr';
271
- }
272
- // ---------------------------------------------------------------------------
273
- // Cucumber helpers
274
- // ---------------------------------------------------------------------------
275
- /**
276
- * Parse a feature file for a given scenario in a single pass, returning:
277
- * - `featureLine` — 1-based line of the `Feature:` declaration
278
- * - `scenarioLine` — 1-based line of the matching `Scenario:` block
279
- * - `stepLines` — 1-based line numbers for each step (for TestLens navigation)
280
- * - `stepKeywords` — BDD keyword (Given/When/Then/And/But) for each step (for labels)
281
- */
282
- export function parseCucumberScenario(featureContent, scenarioName, stepTexts) {
283
- const stepCount = stepTexts.length;
284
- if (!featureContent) {
285
- return {
286
- featureLine: 1,
287
- scenarioLine: 1,
288
- stepLines: [],
289
- stepKeywords: Array(stepCount).fill('')
290
- };
291
- }
292
- const lines = featureContent.split('\n');
293
- const stepRe = /^\s*(Given|When|Then|And|But)\s+/i;
294
- let featureLine = 1;
295
- let scenarioLine = 1;
296
- const stepLines = [];
297
- const stepKeywords = [];
298
- for (let i = 0; i < lines.length; i++) {
299
- const line = lines[i];
300
- const lineNum = i + 1;
301
- if (featureLine === 1 && /^\s*Feature:/i.test(line)) {
302
- featureLine = lineNum;
303
- continue;
304
- }
305
- if (/^\s*Scenario:/i.test(line) && line.includes(scenarioName)) {
306
- scenarioLine = lineNum;
307
- for (let j = i + 1; j < lines.length && stepLines.length < stepCount; j++) {
308
- if (/^\s*(?:Scenario:|Feature:)/i.test(lines[j])) {
309
- break;
310
- }
311
- const m = stepRe.exec(lines[j]);
312
- if (m) {
313
- stepLines.push(j + 1);
314
- stepKeywords.push(m[1]);
315
- }
316
- }
317
- break;
318
- }
319
- }
320
- while (stepKeywords.length < stepCount) {
321
- stepKeywords.push('');
322
- }
323
- return { featureLine, scenarioLine, stepLines, stepKeywords };
324
- }
325
- /** Maps Cucumber parameter type placeholder names to their regex equivalents. */
326
- const CUCUMBER_TYPE_PATTERNS = {
327
- int: '-?\\d+',
328
- float: '-?\\d+(?:\\.\\d+)?',
329
- string: '(?:"[^"]*"|\'[^\']*\')',
330
- word: '\\S+'
331
- };
332
- /**
333
- * Convert a Cucumber expression pattern to a regular expression and test it
334
- * against the given step text. Handles {int}, {float}, {string}, {word}, and
335
- * arbitrary {type} placeholders.
336
- */
337
- function matchesCucumberExpression(pattern, text) {
338
- if (pattern === text) {
339
- return true;
340
- }
341
- const regexSource = pattern
342
- .split(/(\{[^}]*\})/)
343
- .map((part, idx) => {
344
- if (idx % 2 === 1) {
345
- const type = part.slice(1, -1);
346
- return CUCUMBER_TYPE_PATTERNS[type] ?? '[\\s\\S]+';
347
- }
348
- return part.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
349
- })
350
- .join('');
351
- try {
352
- return new RegExp(`^${regexSource}$`).test(text);
353
- }
354
- catch {
355
- return false;
356
- }
357
- }
358
- /**
359
- * Find the file and 1-based line number of the step definition that matches
360
- * the given step text. Searches the provided step definition files in order.
361
- * Handles both string/Cucumber-expression patterns and regex literals.
362
- */
363
- export function findStepDefinitionLine(stepDefFiles, stepText) {
364
- const stepDefRe = /(?:Given|When|Then|And|But)\s*\(/i;
365
- for (const { filePath, content } of stepDefFiles) {
366
- const lines = content.split('\n');
367
- for (let i = 0; i < lines.length; i++) {
368
- const line = lines[i];
369
- if (!stepDefRe.test(line)) {
370
- continue;
371
- }
372
- // String / Cucumber-expression: Given('pattern', ...) or Given("pattern", ...)
373
- const literalMatch = line.match(/(?:Given|When|Then|And|But)\s*\(\s*(['"`])(.*?)\1/i);
374
- if (literalMatch) {
375
- if (matchesCucumberExpression(literalMatch[2], stepText)) {
376
- return { filePath, line: i + 1 };
377
- }
378
- continue;
379
- }
380
- // Regex literal: Given(/pattern/flags, ...)
381
- const regexMatch = line.match(/(?:Given|When|Then|And|But)\s*\(\s*\/(.+?)\/([gimy]*)/i);
382
- if (regexMatch) {
383
- try {
384
- if (new RegExp(regexMatch[1], regexMatch[2]).test(stepText)) {
385
- return { filePath, line: i + 1 };
386
- }
387
- }
388
- catch {
389
- // invalid regex — skip
390
- }
391
- }
392
- }
393
- }
394
- return null;
395
- }
396
- // ---------------------------------------------------------------------------
397
- // Port / network helpers (used by the plugin startup)
398
- // ---------------------------------------------------------------------------
399
- const log = logger('@wdio/nightwatch-devtools');
400
- export function isPortInUse(port, hostname) {
401
- return new Promise((resolve) => {
402
- const server = net.createServer();
403
- server.once('error', () => resolve(true));
404
- server.once('listening', () => server.close(() => resolve(false)));
405
- server.listen(port, hostname);
406
- });
407
- }
408
- export async function findFreePort(startPort, hostname) {
409
- let port = startPort;
410
- while (await isPortInUse(port, hostname)) {
411
- log.warn(`Port ${port} is in use, trying ${port + 1}...`);
412
- port++;
413
- }
414
- return port;
415
- }
416
- export function resolveNightwatchConfig() {
417
- // Prefer the config explicitly passed via -c / --config to avoid picking up
418
- // an unrelated config file that happens to sit higher in the directory tree.
419
- const configFlagIdx = process.argv.findIndex((arg) => arg === '--config' || arg === '-c');
420
- if (configFlagIdx !== -1 && process.argv[configFlagIdx + 1]) {
421
- const argvConfig = process.argv[configFlagIdx + 1];
422
- const resolved = path.isAbsolute(argvConfig)
423
- ? argvConfig
424
- : path.resolve(process.cwd(), argvConfig);
425
- if (fs.existsSync(resolved)) {
426
- return resolved;
427
- }
428
- }
429
- // Fallback: walk up the directory tree
430
- let dir = process.cwd();
431
- const root = path.parse(dir).root;
432
- while (dir && dir !== root) {
433
- for (const file of CONFIG_FILENAMES) {
434
- const candidate = path.join(dir, file);
435
- if (fs.existsSync(candidate)) {
436
- return candidate;
437
- }
438
- }
439
- const parent = path.dirname(dir);
440
- if (parent === dir) {
441
- break;
442
- }
443
- dir = parent;
444
- }
445
- return undefined;
446
- }
447
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/helpers/utils.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import type { SuiteStats, TestStats } from './types.js';
2
- export declare class TestReporter {
3
- #private;
4
- constructor(report: (data: any) => void);
5
- /**
6
- * Called when a suite starts
7
- */
8
- onSuiteStart(suiteStats: SuiteStats): void;
9
- /**
10
- * Clear execution data when a rerun starts.
11
- * Resets test name cache and suites so they're repopulated fresh during the new run.
12
- */
13
- clearExecutionData(): void;
14
- /**
15
- * Update the upstream reporter callback (used after a WebDriver session change
16
- * so suite data is sent over the new WebSocket without rebuilding the reporter).
17
- */
18
- updateUpstream(report: (data: any) => void): void;
19
- /**
20
- * Update the suites data (send to UI)
21
- */
22
- updateSuites(): void;
23
- /**
24
- * Get the current suite
25
- */
26
- getCurrentSuite(): SuiteStats | undefined;
27
- /**
28
- * Called when a test starts
29
- */
30
- onTestStart(testStats: TestStats): void;
31
- /**
32
- * Called when a test ends
33
- */
34
- onTestEnd(testStats: TestStats): void;
35
- /**
36
- * Called when a suite ends - create skipped tests
37
- */
38
- onSuiteEnd(suiteStats: SuiteStats): void;
39
- /**
40
- * Update a specific suite and send to UI (used when updating suite title)
41
- */
42
- updateSuite(suiteStats: SuiteStats): void;
43
- get report(): SuiteStats[];
44
- }