@wdio/selenium-devtools 0.0.1 → 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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +15 -15
  3. package/dist/assertPatcher.d.ts +0 -11
  4. package/dist/assertPatcher.js +0 -123
  5. package/dist/assertPatcher.js.map +0 -1
  6. package/dist/bidi.d.ts +0 -6
  7. package/dist/bidi.js +0 -222
  8. package/dist/bidi.js.map +0 -1
  9. package/dist/constants.d.ts +0 -75
  10. package/dist/constants.js +0 -146
  11. package/dist/constants.js.map +0 -1
  12. package/dist/driverPatcher.d.ts +0 -4
  13. package/dist/driverPatcher.js +0 -256
  14. package/dist/driverPatcher.js.map +0 -1
  15. package/dist/helpers/detachedBackend.d.ts +0 -7
  16. package/dist/helpers/detachedBackend.js +0 -34
  17. package/dist/helpers/detachedBackend.js.map +0 -1
  18. package/dist/helpers/runtime.d.ts +0 -3
  19. package/dist/helpers/runtime.js +0 -47
  20. package/dist/helpers/runtime.js.map +0 -1
  21. package/dist/helpers/suiteManager.d.ts +0 -19
  22. package/dist/helpers/suiteManager.js +0 -131
  23. package/dist/helpers/suiteManager.js.map +0 -1
  24. package/dist/helpers/testManager.d.ts +0 -47
  25. package/dist/helpers/testManager.js +0 -158
  26. package/dist/helpers/testManager.js.map +0 -1
  27. package/dist/helpers/utils.d.ts +0 -26
  28. package/dist/helpers/utils.js +0 -187
  29. package/dist/helpers/utils.js.map +0 -1
  30. package/dist/helpers/videoEncoder.d.ts +0 -2
  31. package/dist/helpers/videoEncoder.js +0 -89
  32. package/dist/helpers/videoEncoder.js.map +0 -1
  33. package/dist/index.d.ts +0 -15
  34. package/dist/index.js +0 -801
  35. package/dist/index.js.map +0 -1
  36. package/dist/reporter.d.ts +0 -18
  37. package/dist/reporter.js +0 -72
  38. package/dist/reporter.js.map +0 -1
  39. package/dist/rerunManager.d.ts +0 -8
  40. package/dist/rerunManager.js +0 -78
  41. package/dist/rerunManager.js.map +0 -1
  42. package/dist/runnerHooks.d.ts +0 -6
  43. package/dist/runnerHooks.js +0 -594
  44. package/dist/runnerHooks.js.map +0 -1
  45. package/dist/screencast.d.ts +0 -11
  46. package/dist/screencast.js +0 -179
  47. package/dist/screencast.js.map +0 -1
  48. package/dist/session.d.ts +0 -48
  49. package/dist/session.js +0 -480
  50. package/dist/session.js.map +0 -1
  51. package/dist/setupConsole.d.ts +0 -1
  52. package/dist/setupConsole.js +0 -13
  53. package/dist/setupConsole.js.map +0 -1
  54. package/dist/types.d.ts +0 -235
  55. package/dist/types.js +0 -5
  56. package/dist/types.js.map +0 -1
@@ -1,89 +0,0 @@
1
- // VP8/WebM encoder for screencast frames.
2
- import fs from 'node:fs/promises';
3
- import path from 'node:path';
4
- import os from 'node:os';
5
- import { createRequire } from 'node:module';
6
- import logger from '@wdio/logger';
7
- const require = createRequire(import.meta.url);
8
- const log = logger('@wdio/selenium-devtools:VideoEncoder');
9
- export async function encodeToVideo(frames, outputPath, options = {}) {
10
- if (frames.length === 0) {
11
- throw new Error('VideoEncoder: no frames to encode');
12
- }
13
- const span = frames[frames.length - 1].timestamp - frames[0].timestamp;
14
- const totalBytes = frames.reduce((sum, f) => sum + Math.floor((f.data?.length ?? 0) * 0.75), 0);
15
- log.info(`🎬 Encoding ${frames.length} frame(s), captured over ${(span / 1000).toFixed(1)}s ` +
16
- `(~${(totalBytes / 1024 / 1024).toFixed(1)} MB raw)`);
17
- let ffmpeg;
18
- try {
19
- ffmpeg = require('fluent-ffmpeg');
20
- }
21
- catch {
22
- throw new Error('VideoEncoder: fluent-ffmpeg is required for screencast encoding. ' +
23
- 'Install it with: npm install fluent-ffmpeg');
24
- }
25
- const ext = options.captureFormat === 'png' ? 'png' : 'jpg';
26
- const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'selenium-devtools-screencast-'));
27
- try {
28
- const manifestLines = ['ffconcat version 1.0'];
29
- for (let i = 0; i < frames.length; i++) {
30
- const frameName = `frame-${String(i).padStart(6, '0')}.${ext}`;
31
- const framePath = path.join(tmpDir, frameName);
32
- await fs.writeFile(framePath, Buffer.from(frames[i].data, 'base64'));
33
- const nextTs = frames[i + 1]?.timestamp ?? frames[i].timestamp + 100;
34
- const durationSecs = Math.max((nextTs - frames[i].timestamp) / 1000, 0.01);
35
- manifestLines.push(`file '${framePath}'`);
36
- manifestLines.push(`duration ${durationSecs.toFixed(6)}`);
37
- }
38
- const lastFramePath = path.join(tmpDir, `frame-${String(frames.length - 1).padStart(6, '0')}.${ext}`);
39
- manifestLines.push(`file '${lastFramePath}'`);
40
- const manifestPath = path.join(tmpDir, 'manifest.txt');
41
- await fs.writeFile(manifestPath, manifestLines.join('\n'));
42
- log.info(`encoding ${frames.length} frames → ${outputPath}`);
43
- await new Promise((resolve, reject) => {
44
- ffmpeg()
45
- .input(manifestPath)
46
- .inputOptions(['-f', 'concat', '-safe', '0'])
47
- .videoCodec('libvpx')
48
- .outputOptions([
49
- '-b:v',
50
- '1M',
51
- '-pix_fmt',
52
- 'yuv420p',
53
- // CFR @ 10fps — VFR WebMs don't write Cues reliably, so the
54
- // dashboard's <video> can't read duration/seek.
55
- '-vsync',
56
- 'cfr',
57
- '-r',
58
- '10',
59
- '-auto-alt-ref',
60
- '0',
61
- '-disposition:v',
62
- 'default'
63
- ])
64
- .output(outputPath)
65
- .on('end', () => resolve())
66
- .on('error', (err) => {
67
- const msg = err.message || '';
68
- if (msg.includes('Cannot find ffmpeg') ||
69
- msg.includes('ENOENT') ||
70
- msg.includes('spawn') ||
71
- msg.includes('not found')) {
72
- reject(new Error('VideoEncoder: ffmpeg binary not found on PATH. ' +
73
- 'Install ffmpeg: https://ffmpeg.org/download.html'));
74
- }
75
- else {
76
- reject(new Error(`VideoEncoder: ffmpeg error — ${msg}`));
77
- }
78
- })
79
- .run();
80
- });
81
- log.info(`✓ video saved: ${outputPath}`);
82
- }
83
- finally {
84
- await fs.rm(tmpDir, { recursive: true, force: true }).catch((rmErr) => {
85
- log.warn(`failed to clean temp dir — ${rmErr.message}`);
86
- });
87
- }
88
- }
89
- //# sourceMappingURL=videoEncoder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"videoEncoder.js","sourceRoot":"","sources":["../../src/helpers/videoEncoder.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import './setupConsole.js';
2
- import { TEST_STATE, NAVIGATION_COMMANDS } from './constants.js';
3
- import { type DevToolsOptions, type TestStats } from './types.js';
4
- export declare const DevTools: {
5
- configure: (opts: {
6
- rerunCommand?: string;
7
- }) => void;
8
- startTest: (name: string, meta?: {
9
- file?: string;
10
- }) => void;
11
- endTest: (state?: TestStats["state"]) => void;
12
- };
13
- export default DevTools;
14
- export { TEST_STATE, NAVIGATION_COMMANDS };
15
- export type { DevToolsOptions, TestStats };