browsertime 21.5.4 → 21.6.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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Browsertime changelog (we do [semantic versioning](https://semver.org))
2
2
 
3
+ ## 21.6.0 - 2024-03-20
4
+ ### Added
5
+ * Chrome 123, Firefox 124 and Edge 122 in the Docker container [#2110](https://github.com/sitespeedio/browsertime/pull/2110).
6
+ * Chromedriver 123 and Edgedriver 122 [#2111](https://github.com/sitespeedio/browsertime/pull/2111).
7
+
8
+ ### Fixed
9
+ * Fix a bug in stopAsError so that you can continue to measure other pages after the stop. Also follow the documentation and mark the run as a failure [#2107](https://github.com/sitespeedio/browsertime/pull/2107).
10
+ * Use bidi for Firefox when using `--basicAuth` [#2093](https://github.com/sitespeedio/browsertime/pull/2093) (needs Firefox 124).
11
+ * Use bidi for Firefox when using `--cookie` [#2090](https://github.com/sitespeedio/browsertime/pull/2090) (needs Firefox 124).
12
+
3
13
  ## 21.5.4 - 2024-03-13
4
14
  ### Fixed
5
15
  * Fix for `--injectJs` for Firefox [#2103](https://github.com/sitespeedio/browsertime/pull/2103).
@@ -46,7 +56,7 @@
46
56
 
47
57
  ## 21.2.1 - 2024-02-11
48
58
  ### Fixed
49
- * Fix correct JavaScript signaure for stopAsError in types.
59
+ * Fix correct JavaScript signature for stopAsError in types.
50
60
 
51
61
  ## 21.2.0 - 2024-02-11
52
62
  ### Added
@@ -27,7 +27,13 @@ const CHROME_FEATURES_THAT_WE_DISABLES = [
27
27
  'MediaRouter',
28
28
  'OfflinePagesPrefetching',
29
29
  'OptimizationHints',
30
- 'Translate'
30
+ 'Translate',
31
+ 'msAutofillEdgeCoupons',
32
+ 'msShoppingTrigger',
33
+ 'msEdgeShoppingUI',
34
+ 'msEntityExtraction',
35
+ 'msEntityExtractionProactive',
36
+ 'msWebAssist'
31
37
  ];
32
38
 
33
39
  export function setupChromiumOptions(
@@ -32,7 +32,7 @@ export class Bidi {
32
32
  */
33
33
  async onMessage(f) {
34
34
  if (this.browserName === 'firefox') {
35
- const client = this.engineDelegate.getBidi();
35
+ const client = await this.engineDelegate.getBidi();
36
36
  const ws = await client.socket;
37
37
  ws.on('message', f);
38
38
  } else {
@@ -65,7 +65,7 @@ export class Bidi {
65
65
  */
66
66
  async subscribe(messageType) {
67
67
  if (this.browserName === 'firefox') {
68
- const client = this.engineDelegate.getBidi();
68
+ const client = await this.engineDelegate.getBidi();
69
69
  return client.subscribe(messageType, [
70
70
  await this.engineDelegate.getWindowHandle()
71
71
  ]);
@@ -85,7 +85,7 @@ export class Bidi {
85
85
  */
86
86
  async unsubscribe(messageType) {
87
87
  if (this.browserName === 'firefox') {
88
- const client = this.engineDelegate.getBidi();
88
+ const client = await this.engineDelegate.getBidi();
89
89
  return client.unsubscribe(messageType, [
90
90
  this.engineDelegate.getWindowHandle()
91
91
  ]);
@@ -113,7 +113,7 @@ export class Bidi {
113
113
  async send(parameters) {
114
114
  if (this.browserName === 'firefox') {
115
115
  try {
116
- const client = this.engineDelegate.getBidi();
116
+ const client = await this.engineDelegate.getBidi();
117
117
  return client.send(parameters);
118
118
  } catch (error) {
119
119
  log.error(
@@ -205,11 +205,14 @@ export class Measure {
205
205
  } else {
206
206
  this.result.at(-1).error.push(message);
207
207
  }
208
- } else {
209
- // error not associated to a start/run so far
210
- log.error('No page that could be associated with the error:' + message);
211
208
  }
212
209
  }
210
+ // Add the error in the generic failure
211
+ if (this.result.failureMessages) {
212
+ this.result.failureMessages.push(message);
213
+ } else {
214
+ this.result.failureMessages = [message];
215
+ }
213
216
  }
214
217
 
215
218
  /**
@@ -217,7 +220,7 @@ export class Measure {
217
220
  * @private
218
221
  */
219
222
  _failure(message) {
220
- log.debug('Mark run as failure with message %s', message);
223
+ log.info('Mark run as failure with message: %s', message);
221
224
  this.result.markedAsFailure = 1;
222
225
  if (this.result.failureMessages) {
223
226
  this.result.failureMessages.push(message);
@@ -378,14 +381,22 @@ export class Measure {
378
381
  *
379
382
  * @async
380
383
  * @param {string} errorMessage - The message about the error. This will end up on the HTML report for sitespeed.io so give it a good message so you know what's gone wrong.
381
- * @param {string} optionalURL - The URL of the page that you wanted to test. If you don't know the URL (you clicked on a link etc) skip it.
382
384
  * @returns {Promise} A promise that resolves when the stop process has completed.
383
385
  * @since 21.2.0
384
386
  */
385
- async stopAsError(errorMessage, optionalURL) {
386
- this._error(errorMessage);
387
+ async stopAsError(errorMessage) {
388
+ this._failure(errorMessage);
387
389
  this.areWeMeasuring = false;
388
- return this.stop(optionalURL, false);
390
+ // Remove the last result
391
+ this.result.pop();
392
+
393
+ await this._stopVideo();
394
+
395
+ if (this.options.tcpdump) {
396
+ await this.tcpDump.stop();
397
+ }
398
+
399
+ return;
389
400
  }
390
401
  /**
391
402
  * Stops the measurement process, collects metrics, and handles any post-measurement tasks.
@@ -397,7 +408,7 @@ export class Measure {
397
408
  * @throws {Error} Throws an error if there are issues in stopping the measurement or collecting data.
398
409
  * @returns {Promise} A promise that resolves with the collected metrics data.
399
410
  */
400
- async stop(testedStartUrl, collectMeasurements = true) {
411
+ async stop(testedStartUrl) {
401
412
  log.debug('Stop measuring');
402
413
  // If we don't have a URL (tested using clicking on link etc) get the URL from the browser
403
414
  let url =
@@ -454,6 +465,7 @@ export class Measure {
454
465
  ) {
455
466
  res.alias = this.options.urlMetaData[url];
456
467
  }
468
+
457
469
  this.result[this.numberOfMeasuredPages] = merge(
458
470
  this.result[this.numberOfMeasuredPages],
459
471
  res
@@ -463,7 +475,7 @@ export class Measure {
463
475
  await this.tcpDump.stop();
464
476
  }
465
477
 
466
- return collectMeasurements === false ? undefined : this.collect(url);
478
+ return this.collect(url);
467
479
  }
468
480
 
469
481
  /**
@@ -321,6 +321,7 @@ export class Engine {
321
321
  if (data.error) {
322
322
  errorsOutsideTheBrowser.push(...data.error);
323
323
  }
324
+
324
325
  // Catch failures like starting the browser
325
326
  if (data.markedAsFailure) {
326
327
  failures.push(...data.failureMessages);
@@ -18,8 +18,6 @@ export class ExtensionServer {
18
18
  (options.cacheClearRaw ||
19
19
  options.requestheader ||
20
20
  options.block ||
21
- options.basicAuth ||
22
- options.cookie ||
23
21
  options.clearCacheKeepCookies)
24
22
  ? true
25
23
  : false;
@@ -24,16 +24,6 @@ function generateURL(port, testUrl, options) {
24
24
  query.ba = options.basicAuth + '@' + testUrl;
25
25
  }
26
26
 
27
- if (options.cookie) {
28
- const cookies = toArray(options.cookie);
29
- query.cookie = [];
30
- for (const cookie of cookies) {
31
- const name = cookie.slice(0, Math.max(0, cookie.indexOf('=')));
32
- const value = cookie.slice(Math.max(0, cookie.indexOf('=') + 1));
33
- query.cookie.push(name + '@' + value + '@' + testUrl);
34
- }
35
- }
36
-
37
27
  return format({
38
28
  protocol: 'http',
39
29
  hostname: '127.0.0.1',
@@ -1,10 +1,13 @@
1
+ import { Bidi } from '../core/engine/command/bidi.js';
1
2
  import intel from 'intel';
3
+ import { toArray } from '../support/util.js';
2
4
  const log = intel.getLogger('browsertime.firefox.bidi');
3
5
 
4
6
  export class FirefoxBidi {
5
- constructor(bidi, browsingContextId, options) {
7
+ constructor(bidi, browsingContextId, driver, options) {
6
8
  this.options = options;
7
9
  this.bidi = bidi;
10
+ this.driver = driver;
8
11
  this.browsingContextId = browsingContextId;
9
12
  }
10
13
 
@@ -17,9 +20,81 @@ export class FirefoxBidi {
17
20
  };
18
21
 
19
22
  try {
20
- await this.bidi.send(params);
23
+ const result = await this.bidi.send(params);
24
+ if (result.type != 'success') {
25
+ log.error(result);
26
+ }
21
27
  } catch (error) {
22
28
  log.error('Could not inject JavaScript:' + error);
23
29
  }
24
30
  }
31
+
32
+ async setBasicAuth(basicAuth) {
33
+ const parts = basicAuth.split('@');
34
+ const bidi = new Bidi(this.driver, this.options.browser);
35
+
36
+ const command = {
37
+ method: 'network.addIntercept',
38
+ params: {
39
+ phases: ['authRequired']
40
+ }
41
+ };
42
+ await bidi.send(command);
43
+
44
+ await bidi.subscribe('network.authRequired');
45
+
46
+ await bidi.onMessage(async function (event) {
47
+ const parsedEvent = JSON.parse(Buffer.from(event.toString()));
48
+ if (parsedEvent.method === 'network.authRequired') {
49
+ const continueWithAuth = {
50
+ method: 'network.continueWithAuth',
51
+ params: {
52
+ request: parsedEvent.params.request.request,
53
+ action: 'provideCredentials',
54
+ credentials: {
55
+ type: 'password',
56
+ username: parts[0],
57
+ password: parts[1]
58
+ }
59
+ }
60
+ };
61
+ const result = await bidi.send(continueWithAuth);
62
+ if (result.type != 'success') {
63
+ log.error(result);
64
+ }
65
+ }
66
+ });
67
+ }
68
+
69
+ async setCookie(url, cookie) {
70
+ const cookies = toArray(cookie);
71
+ for (let cookieParts of cookies) {
72
+ const parts = new Array(
73
+ cookieParts.slice(0, cookieParts.indexOf('=')),
74
+ cookieParts.slice(cookieParts.indexOf('=') + 1, cookieParts.length)
75
+ );
76
+
77
+ const params = {
78
+ method: 'storage.setCookie',
79
+ params: {
80
+ cookie: {
81
+ name: parts[0],
82
+ value: {
83
+ type: 'string',
84
+ value: parts[1]
85
+ },
86
+ domain: new URL(url).hostname
87
+ }
88
+ }
89
+ };
90
+ try {
91
+ const result = await this.bidi.send(params);
92
+ if (result.type != 'success') {
93
+ log.error(result);
94
+ }
95
+ } catch (error) {
96
+ log.error('Could not set cookie:' + error);
97
+ }
98
+ }
99
+ }
25
100
  }
@@ -93,6 +93,10 @@ export class Firefox {
93
93
  await this.browsertimeBidi.injectJavaScript(this.options.injectJs);
94
94
  }
95
95
 
96
+ if (this.options.basicAuth) {
97
+ await this.browsertimeBidi.setBasicAuth(this.options.basicAuth);
98
+ }
99
+
96
100
  if (
97
101
  this.firefoxConfig.appendToUserAgent ||
98
102
  this.options.appendToUserAgent
@@ -111,7 +115,7 @@ export class Firefox {
111
115
  /**
112
116
  * Before each URL/test runs.
113
117
  */
114
- async beforeEachURL(runner) {
118
+ async beforeEachURL(runner, url) {
115
119
  await runner.runPrivilegedScript(`
116
120
  new Promise(async function(resolve) {
117
121
  await Services.fog.testFlushAllChildren(); // force any data that wasn't recorded yet to be immediately put in the buffers
@@ -141,6 +145,12 @@ export class Firefox {
141
145
  await this.geckoProfiler.start();
142
146
  }
143
147
 
148
+ if (this.options.cookie && url) {
149
+ await this.browsertimeBidi.setCookie(url, this.options.cookie);
150
+ } else if (this.options.cookie) {
151
+ log.info('Could not set cookie because the URL is unknown');
152
+ }
153
+
144
154
  if (this.firefoxConfig.perfStats) {
145
155
  this.perfStats = new PerfStats(runner, this.firefoxConfig);
146
156
  return this.perfStats.start();
@@ -53,6 +53,12 @@ export class DesktopRecorder {
53
53
  async stop(destination) {
54
54
  log.debug('Stop screen recording');
55
55
  await _stop(this.recording);
56
+
57
+ // This was a test with and error and probably not a navigation
58
+ // The user script use stopAsError
59
+ if (!destination) {
60
+ return;
61
+ }
56
62
  // FIXME update to rename/move file
57
63
  // The destination file could exixt of we use --resultDir
58
64
  // so make sure we remove it first
@@ -58,14 +58,18 @@ export class Video {
58
58
  */
59
59
  async stop(url) {
60
60
  this.isRecording = false;
61
- this.videoPath = join(
62
- this.storageManager.directory,
63
- pathToFolder(url, this.options),
64
- 'video',
65
- this.index + '.mp4'
66
- );
67
- await this.setupDirs(this.index, url);
68
- return this.recorder.stop(this.videoPath);
61
+ if (url === undefined) {
62
+ return this.recorder.stop(this.videoPath);
63
+ } else {
64
+ this.videoPath = join(
65
+ this.storageManager.directory,
66
+ pathToFolder(url, this.options),
67
+ 'video',
68
+ this.index + '.mp4'
69
+ );
70
+ await this.setupDirs(this.index, url);
71
+ return this.recorder.stop(this.videoPath);
72
+ }
69
73
  }
70
74
 
71
75
  async cleanup() {
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "browsertime",
3
3
  "description": "Get performance metrics from your web page using Browsertime.",
4
- "version": "21.5.4",
4
+ "version": "21.6.0",
5
5
  "bin": "./bin/browsertime.js",
6
6
  "type": "module",
7
7
  "types": "./types/scripting.d.ts",
8
8
  "dependencies": {
9
9
  "@cypress/xvfb": "1.2.4",
10
10
  "@devicefarmer/adbkit": "3.2.6",
11
- "@sitespeed.io/chromedriver": "122.0.6261-69",
12
- "@sitespeed.io/edgedriver": "121.0.2277-128",
11
+ "@sitespeed.io/chromedriver": "123.0.6312-58",
12
+ "@sitespeed.io/edgedriver": "122.0.2365-92",
13
13
  "@sitespeed.io/geckodriver": "0.34.0",
14
14
  "@sitespeed.io/throttle": "5.0.0",
15
15
  "@sitespeed.io/tracium": "0.3.3",
@@ -34,21 +34,21 @@
34
34
  "yargs": "17.7.2"
35
35
  },
36
36
  "optionalDependencies": {
37
- "jimp": "0.22.10"
37
+ "jimp": "0.22.12"
38
38
  },
39
39
  "devDependencies": {
40
- "@types/selenium-webdriver": "4.1.21",
41
- "ava": "6.1.1",
40
+ "@types/selenium-webdriver": "4.1.22",
41
+ "ava": "6.1.2",
42
42
  "clean-jsdoc-theme": "4.2.17",
43
- "eslint": "8.56.0",
43
+ "eslint": "8.57.0",
44
44
  "eslint-config-prettier": "9.1.0",
45
45
  "eslint-plugin-prettier": "5.1.3",
46
- "eslint-plugin-unicorn": "50.0.1",
46
+ "eslint-plugin-unicorn": "51.0.1",
47
47
  "jsdoc": "4.0.2",
48
- "prettier": "3.2.4",
48
+ "prettier": "3.2.5",
49
49
  "serve": "14.2.1",
50
50
  "serve-handler": "6.1.5",
51
- "typescript": "5.3.3"
51
+ "typescript": "5.4.2"
52
52
  },
53
53
  "engines": {
54
54
  "node": ">=18.0.0"
@@ -161,11 +161,10 @@ export class Measure {
161
161
  *
162
162
  * @async
163
163
  * @param {string} errorMessage - The message about the error. This will end up on the HTML report for sitespeed.io so give it a good message so you know what's gone wrong.
164
- * @param {string} optionalURL - The URL of the page that you wanted to test. If you don't know the URL (you clicked on a link etc) skip it.
165
164
  * @returns {Promise} A promise that resolves when the stop process has completed.
166
165
  * @since 21.2.0
167
166
  */
168
- stopAsError(errorMessage: string, optionalURL: string): Promise<any>;
167
+ stopAsError(errorMessage: string): Promise<any>;
169
168
  /**
170
169
  * Stops the measurement process, collects metrics, and handles any post-measurement tasks.
171
170
  * It finalizes the URL being tested, manages any URL-specific metadata, stops any ongoing video recordings,
@@ -176,7 +175,7 @@ export class Measure {
176
175
  * @throws {Error} Throws an error if there are issues in stopping the measurement or collecting data.
177
176
  * @returns {Promise} A promise that resolves with the collected metrics data.
178
177
  */
179
- stop(testedStartUrl: string, collectMeasurements?: boolean): Promise<any>;
178
+ stop(testedStartUrl: string): Promise<any>;
180
179
  /**
181
180
  * Adds a custom metric to the current measurement result.
182
181
  * This method should be called after a measurement has started and before it has stopped.
@@ -1 +1 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../../lib/core/engine/command/measure.js"],"names":[],"mappings":"AA6BA;;;;;;GAMG;AACH;IACE,sRA4GC;IA5FC;;OAEG;IACH,gBAAsB;IACtB;;OAEG;IACH,0BAA0C;IAC1C;;OAEG;IACH,cAAkB;IAClB;;OAEG;IACH,eAAoB;IACpB;;OAEG;IACH,uBAAoC;IACpC;;OAEG;IACH,gBAAsB;IACtB;;OAEG;IACH,0BAA0C;IAC1C;;OAEG;IACH,uBAAoC;IACpC;;OAEG;IACH,oBAAyD;IACzD;;OAEG;IACH,wBAAsC;IACtC;;OAEG;IACH,eAAoB;IACpB;;OAEG;IACH,0BAA0C;IAC1C;;OAEG;IACH,+BAAoD;IACpD;;OAEG;IACH,uBAAoC;IACpC;;OAEG;IACH,gBAAsB;IACtB;;OAEG;IACH,8BAA8B;IAC9B;;OAEG;IACH,6BAA6B;IAC7B;;OAEG;IACH,uBAA2B;IAC3B;;OAEG;IACH,mBAAoB;IACpB;;OAEG;IACH,gBAA6D;IAC7D;;OAEG;IACH,2BAAsE;IACtE;;OAEG;IACH,uBAA8D;IAC9D;;OAEG;IACH,2BAAqE;IAGvE;;;OAGG;IACH,oBAsBC;IArBC,aAAuE;IAuBzE;;;OAGG;IACH,mBAKC;IAED;;;OAGG;IACH,eAsBC;IAED;;;OAGG;IACH,iBAQC;IAED;;;;;;;;;;;;OAYG;IACH,kBAuBC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBALW,MAAM,kBACN,MAAM,GAEJ,QAAQ,IAAI,CAAC,CAwFzB;IAED;;;;;;;;;OASG;IACH,0BALW,MAAM,eACL,MAAM,gBAQjB;IACD;;;;;;;;;OASG;IACH,qBAJW,MAAM,+CAuEhB;IAED;;;;;;;OAOG;IACH,UAJW,MAAM,oBAYhB;IAED;;;;;;;OAOG;IACH,6BAOC;IAED;;;OAGG;IACH,gBA4KC;CACF;sBAnqBqB,yBAAyB"}
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../../lib/core/engine/command/measure.js"],"names":[],"mappings":"AA6BA;;;;;;GAMG;AACH;IACE,sRA4GC;IA5FC;;OAEG;IACH,gBAAsB;IACtB;;OAEG;IACH,0BAA0C;IAC1C;;OAEG;IACH,cAAkB;IAClB;;OAEG;IACH,eAAoB;IACpB;;OAEG;IACH,uBAAoC;IACpC;;OAEG;IACH,gBAAsB;IACtB;;OAEG;IACH,0BAA0C;IAC1C;;OAEG;IACH,uBAAoC;IACpC;;OAEG;IACH,oBAAyD;IACzD;;OAEG;IACH,wBAAsC;IACtC;;OAEG;IACH,eAAoB;IACpB;;OAEG;IACH,0BAA0C;IAC1C;;OAEG;IACH,+BAAoD;IACpD;;OAEG;IACH,uBAAoC;IACpC;;OAEG;IACH,gBAAsB;IACtB;;OAEG;IACH,8BAA8B;IAC9B;;OAEG;IACH,6BAA6B;IAC7B;;OAEG;IACH,uBAA2B;IAC3B;;OAEG;IACH,mBAAoB;IACpB;;OAEG;IACH,gBAA6D;IAC7D;;OAEG;IACH,2BAAsE;IACtE;;OAEG;IACH,uBAA8D;IAC9D;;OAEG;IACH,2BAAqE;IAGvE;;;OAGG;IACH,oBAsBC;IArBC,aAAuE;IAuBzE;;;OAGG;IACH,mBAKC;IAED;;;OAGG;IACH,eAyBC;IAED;;;OAGG;IACH,iBAQC;IAED;;;;;;;;;;;;OAYG;IACH,kBAuBC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBALW,MAAM,kBACN,MAAM,GAEJ,QAAQ,IAAI,CAAC,CAwFzB;IAED;;;;;;;;OAQG;IACH,0BAJW,MAAM,gBAiBhB;IACD;;;;;;;;;OASG;IACH,qBAJW,MAAM,gBAwEhB;IAED;;;;;;;OAOG;IACH,UAJW,MAAM,oBAYhB;IAED;;;;;;;OAOG;IACH,6BAOC;IAED;;;OAGG;IACH,gBA4KC;CACF;sBA/qBqB,yBAAyB"}
@@ -16,12 +16,12 @@ export class DesktopRecorder {
16
16
  options: any;
17
17
  start(file: any): Promise<{
18
18
  filePath: any;
19
- ffmpegProcess: any;
19
+ ffmpegProcess: import("execa").ExecaChildProcess<string>;
20
20
  }>;
21
21
  filePath: any;
22
22
  recording: Promise<{
23
23
  filePath: any;
24
- ffmpegProcess: any;
24
+ ffmpegProcess: import("execa").ExecaChildProcess<string>;
25
25
  }>;
26
26
  stop(destination: any): Promise<void>;
27
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"desktopRecorder.d.ts","sourceRoot":"","sources":["../../../../lib/video/screenRecording/desktop/desktopRecorder.js"],"names":[],"mappings":"AAkBA;IACE,0BAYC;IAXC,aAA8D;IAC9D,eAAkE;IAClE,UAA+C;IAC/C,SAAgD;IAChD,aAA4D;IAC5D,aAA4D;IAC5D,cAAoC;IACpC,aAAkD;IAClD,eAAmB;IACnB;;;MAA4B;IAC5B,aAAsB;IAGxB;;;OAiBC;IAhBC,cAAoB;IAEpB;;;OAWE;IAKJ,sCA8BC;CACF"}
1
+ {"version":3,"file":"desktopRecorder.d.ts","sourceRoot":"","sources":["../../../../lib/video/screenRecording/desktop/desktopRecorder.js"],"names":[],"mappings":"AAkBA;IACE,0BAYC;IAXC,aAA8D;IAC9D,eAAkE;IAClE,UAA+C;IAC/C,SAAgD;IAChD,aAA4D;IAC5D,aAA4D;IAC5D,cAAoC;IACpC,aAAkD;IAClD,eAAmB;IACnB;;;MAA4B;IAC5B,aAAsB;IAGxB;;;OAiBC;IAhBC,cAAoB;IAEpB;;;OAWE;IAKJ,sCAoCC;CACF"}
@@ -11,7 +11,7 @@ export function start({ display, origin, size, filePath, offset, framerate, crf,
11
11
  taskset: any;
12
12
  }): Promise<{
13
13
  filePath: any;
14
- ffmpegProcess: any;
14
+ ffmpegProcess: import("execa").ExecaChildProcess<string>;
15
15
  }>;
16
16
  export function stop(recording: any): Promise<any>;
17
17
  //# sourceMappingURL=ffmpegRecorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../lib/video/video.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IACE,6DAMC;IALC,aAAsB;IACtB,oBAAoC;IACpC,YAAsC;IACtC,iXAA0D;IAC1D,qBAAwB;IAG1B,+CAeC;IAbC,WAAkB;IAElB,cAEC;IAMD,kBAEC;IAGH;;;OAGG;IACH,0EAUC;IATC,gBAA4B;IAE5B,uBAA0C;IAS5C;;;OAGG;IACH,6BAUC;IARC,kBAKC;IAKH,yBAUC;IAED;;;OAGG;IACH;;;OA0BC;IAED,6BAEC;IAED,2BAEC;CACF"}
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../lib/video/video.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH;IACE,6DAMC;IALC,aAAsB;IACtB,oBAAoC;IACpC,YAAsC;IACtC,iXAA0D;IAC1D,qBAAwB;IAG1B,+CAeC;IAbC,WAAkB;IAElB,cAEC;IAMD,kBAEC;IAGH;;;OAGG;IACH,0EAUC;IATC,gBAA4B;IAE5B,uBAA0C;IAS5C;;;OAGG;IACH,6BAcC;IATG,kBAKC;IAML,yBAUC;IAED;;;OAGG;IACH;;;OA0BC;IAED,6BAEC;IAED,2BAEC;CACF"}