sitespeed.io 34.0.3 → 34.1.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,9 @@
1
1
  # CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
2
2
 
3
+ ## 34.1.0 - 2024-06-06
4
+ ### Added
5
+ * Add `--enableVideoRun`. You can use it together with `--video false --visualMetrics true` to do one extra run where the video is kept. This is useful for tests against replay proxies [#4177](https://github.com/sitespeedio/sitespeed.io/pull/4177).
6
+
3
7
  ## 34.0.3 - 2024-06-05
4
8
 
5
9
  ### Fixed
package/lib/cli/cli.js CHANGED
@@ -565,6 +565,12 @@ export async function parseCommandLine() {
565
565
  describe:
566
566
  'Make one extra run that collects the profiling trace log (no other metrics is collected). For Chrome it will collect the timeline trace, for Firefox it will get the Geckoprofiler trace. This means you do not need to get the trace for all runs and can skip the overhead it produces.'
567
567
  })
568
+ .option('browsertime.enableVideoRun', {
569
+ alias: 'enableVideoRun',
570
+ type: 'boolean',
571
+ describe:
572
+ 'Make one extra run that collects video and visual metrics. This means you can do your runs with --visualMetrics true --video false --enableVideoRun true to collect visual metrics from all runs and save a video from the profile/video run. If you run it together with --enableProfileRun it will also collect profiling trace.'
573
+ })
568
574
  .option('browsertime.videoParams.filmstripFullSize', {
569
575
  alias: 'videoParams.filmstripFullSize',
570
576
  type: 'boolean',
@@ -66,22 +66,33 @@ async function preWarmServer(urls, options, scriptOrMultiple) {
66
66
  }
67
67
 
68
68
  async function extraProfileRun(urls, options, scriptOrMultiple) {
69
- log.info('Make one extra run to collect trace information');
69
+ log.info('Make one extra run to collect trace/video information');
70
70
  options.iterations = 1;
71
- if (options.browser === 'firefox') {
72
- options.firefox.geckoProfiler = true;
73
- } else if (options.browser === 'chrome') {
74
- options.chrome.enableTraceScreenshots = true;
75
- options.chrome.traceCategory = ['disabled-by-default-v8.cpu_profiler'];
76
- options.chrome.timeline = true;
71
+ if (options.enableProfileRun) {
72
+ if (options.browser === 'firefox') {
73
+ options.firefox.geckoProfiler = true;
74
+ } else if (options.browser === 'chrome') {
75
+ options.chrome.enableTraceScreenshots = true;
76
+ options.chrome.traceCategory = ['disabled-by-default-v8.cpu_profiler'];
77
+ options.chrome.timeline = true;
78
+ }
79
+ }
80
+ if (options.enableVideoRun) {
81
+ options.video = true;
82
+ options.visualMetrics = true;
83
+ } else {
84
+ options.video = false;
85
+ options.visualMetrics = false;
77
86
  }
78
- options.video = false;
79
- options.visualMetrics = false;
80
87
  const traceEngine = new BrowsertimeEngine(options);
88
+ const scriptCategories = await browserScripts.allScriptCategories();
89
+ let scriptsByCategory =
90
+ await browserScripts.getScriptsForCategories(scriptCategories);
91
+
81
92
  await traceEngine.start();
82
93
  await (scriptOrMultiple
83
- ? traceEngine.runMultiple(urls, {})
84
- : traceEngine.run(urls, {}));
94
+ ? traceEngine.runMultiple(urls, scriptsByCategory)
95
+ : traceEngine.run(urls, scriptsByCategory));
85
96
  await traceEngine.stop();
86
97
  }
87
98
 
@@ -187,13 +198,13 @@ export async function analyzeUrl(
187
198
  await engine.start();
188
199
  if (scriptOrMultiple) {
189
200
  const res = await engine.runMultiple(url, scriptsByCategory, asyncScript);
190
- if (btOptions.enableProfileRun) {
201
+ if (btOptions.enableProfileRun || btOptions.enableVideoRun) {
191
202
  await extraProfileRun(url, btOptions, scriptOrMultiple);
192
203
  }
193
204
  return res;
194
205
  } else {
195
206
  const res = await engine.run(url, scriptsByCategory, asyncScript);
196
- if (btOptions.enableProfileRun) {
207
+ if (btOptions.enableProfileRun || btOptions.enableVideoRun) {
197
208
  await extraProfileRun(url, btOptions, scriptOrMultiple);
198
209
  }
199
210
  return res;
@@ -258,7 +258,7 @@ block content
258
258
  section#waterfall-panel
259
259
  include ../waterfall/index.pug
260
260
 
261
- if options.browsertime.video
261
+ if options.browsertime.video || options.browsertime.enableVideoRun
262
262
  section#video-panel
263
263
  include ../video/index.pug
264
264
 
@@ -7,7 +7,7 @@
7
7
  if d.browsertime && d.browsertime.pageSummary
8
8
  a(id='metrics', href='#metrics', onclick='return selectTab(this, true);')
9
9
  | Metrics
10
- if options.browsertime.video
10
+ if options.browsertime.video || options.enableVideoRun
11
11
  a(id='video', href='#video', onclick='return selectTab(this, true);')
12
12
  | Video
13
13
  if (options.browsertime.visualMetrics && options.videoParams.createFilmstrip) || options.browsertime.chrome && options.browsertime.chrome.enableTraceScreenshots
@@ -1,5 +1,6 @@
1
- - const videoIndex = medianRun ? medianRun.runIndex : iteration;
1
+ - let videoIndex = medianRun ? medianRun.runIndex : iteration;
2
2
  - const width = options.mobile || options.android || (options.safari && options.safari.useSimulator) ? '400' : '800'
3
+ - videoIndex = options.browsertime.enableVideoRun ? '1' : videoIndex;
3
4
 
4
5
  small
5
6
  ||
@@ -13,6 +14,11 @@ h3 Video
13
14
  video(controls, preload='none', width=width)
14
15
  source(src='data/video/' + videoIndex +'.mp4', type='video/mp4')
15
16
 
17
+ if options.browsertime.enableVideoRun
18
+ p Video from --enableVideoRun
19
+
16
20
  a#download-video
17
- - const videoPath = 'data/video/' + (iteration ? iteration : medianRun.runIndex ) +'.mp4'
21
+ - let downloadable = iteration ? iteration : medianRun.runIndex;
22
+ - downloadable = options.browsertime.enableVideoRun ? '1' : downloadable;
23
+ - const videoPath = 'data/video/' + downloadable +'.mp4'
18
24
  a.button.button-download(href=videoPath, download=downloadName + '-video.mp4') Download video
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "sitespeed.io",
3
- "version": "34.0.3",
3
+ "version": "34.1.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "sitespeed.io",
9
- "version": "34.0.3",
9
+ "version": "34.1.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-s3": "3.564.0",
@@ -15,7 +15,7 @@
15
15
  "@sitespeed.io/plugin": "0.0.6",
16
16
  "@tgwf/co2": "0.14.4",
17
17
  "axe-core": "4.9.1",
18
- "browsertime": "22.2.0",
18
+ "browsertime": "22.4.0",
19
19
  "cli-color": "2.0.4",
20
20
  "coach-core": "8.0.2",
21
21
  "concurrent-queue": "7.0.2",
@@ -1846,6 +1846,210 @@
1846
1846
  "node": ">= 8.0.0"
1847
1847
  }
1848
1848
  },
1849
+ "node_modules/@serialport/binding-mock": {
1850
+ "version": "10.2.2",
1851
+ "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz",
1852
+ "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==",
1853
+ "dependencies": {
1854
+ "@serialport/bindings-interface": "^1.2.1",
1855
+ "debug": "^4.3.3"
1856
+ },
1857
+ "engines": {
1858
+ "node": ">=12.0.0"
1859
+ }
1860
+ },
1861
+ "node_modules/@serialport/bindings-cpp": {
1862
+ "version": "12.0.1",
1863
+ "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-12.0.1.tgz",
1864
+ "integrity": "sha512-r2XOwY2dDvbW7dKqSPIk2gzsr6M6Qpe9+/Ngs94fNaNlcTRCV02PfaoDmRgcubpNVVcLATlxSxPTIDw12dbKOg==",
1865
+ "hasInstallScript": true,
1866
+ "dependencies": {
1867
+ "@serialport/bindings-interface": "1.2.2",
1868
+ "@serialport/parser-readline": "11.0.0",
1869
+ "debug": "4.3.4",
1870
+ "node-addon-api": "7.0.0",
1871
+ "node-gyp-build": "4.6.0"
1872
+ },
1873
+ "engines": {
1874
+ "node": ">=16.0.0"
1875
+ },
1876
+ "funding": {
1877
+ "url": "https://opencollective.com/serialport/donate"
1878
+ }
1879
+ },
1880
+ "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": {
1881
+ "version": "11.0.0",
1882
+ "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz",
1883
+ "integrity": "sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==",
1884
+ "engines": {
1885
+ "node": ">=12.0.0"
1886
+ },
1887
+ "funding": {
1888
+ "url": "https://opencollective.com/serialport/donate"
1889
+ }
1890
+ },
1891
+ "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": {
1892
+ "version": "11.0.0",
1893
+ "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-11.0.0.tgz",
1894
+ "integrity": "sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==",
1895
+ "dependencies": {
1896
+ "@serialport/parser-delimiter": "11.0.0"
1897
+ },
1898
+ "engines": {
1899
+ "node": ">=12.0.0"
1900
+ },
1901
+ "funding": {
1902
+ "url": "https://opencollective.com/serialport/donate"
1903
+ }
1904
+ },
1905
+ "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": {
1906
+ "version": "7.0.0",
1907
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz",
1908
+ "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA=="
1909
+ },
1910
+ "node_modules/@serialport/bindings-cpp/node_modules/node-gyp-build": {
1911
+ "version": "4.6.0",
1912
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
1913
+ "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
1914
+ "bin": {
1915
+ "node-gyp-build": "bin.js",
1916
+ "node-gyp-build-optional": "optional.js",
1917
+ "node-gyp-build-test": "build-test.js"
1918
+ }
1919
+ },
1920
+ "node_modules/@serialport/bindings-interface": {
1921
+ "version": "1.2.2",
1922
+ "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz",
1923
+ "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==",
1924
+ "engines": {
1925
+ "node": "^12.22 || ^14.13 || >=16"
1926
+ }
1927
+ },
1928
+ "node_modules/@serialport/parser-byte-length": {
1929
+ "version": "12.0.0",
1930
+ "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-12.0.0.tgz",
1931
+ "integrity": "sha512-0ei0txFAj+s6FTiCJFBJ1T2hpKkX8Md0Pu6dqMrYoirjPskDLJRgZGLqoy3/lnU1bkvHpnJO+9oJ3PB9v8rNlg==",
1932
+ "engines": {
1933
+ "node": ">=12.0.0"
1934
+ },
1935
+ "funding": {
1936
+ "url": "https://opencollective.com/serialport/donate"
1937
+ }
1938
+ },
1939
+ "node_modules/@serialport/parser-cctalk": {
1940
+ "version": "12.0.0",
1941
+ "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-12.0.0.tgz",
1942
+ "integrity": "sha512-0PfLzO9t2X5ufKuBO34DQKLXrCCqS9xz2D0pfuaLNeTkyGUBv426zxoMf3rsMRodDOZNbFblu3Ae84MOQXjnZw==",
1943
+ "engines": {
1944
+ "node": ">=12.0.0"
1945
+ },
1946
+ "funding": {
1947
+ "url": "https://opencollective.com/serialport/donate"
1948
+ }
1949
+ },
1950
+ "node_modules/@serialport/parser-delimiter": {
1951
+ "version": "12.0.0",
1952
+ "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz",
1953
+ "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==",
1954
+ "engines": {
1955
+ "node": ">=12.0.0"
1956
+ },
1957
+ "funding": {
1958
+ "url": "https://opencollective.com/serialport/donate"
1959
+ }
1960
+ },
1961
+ "node_modules/@serialport/parser-inter-byte-timeout": {
1962
+ "version": "12.0.0",
1963
+ "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-12.0.0.tgz",
1964
+ "integrity": "sha512-GnCh8K0NAESfhCuXAt+FfBRz1Cf9CzIgXfp7SdMgXwrtuUnCC/yuRTUFWRvuzhYKoAo1TL0hhUo77SFHUH1T/w==",
1965
+ "engines": {
1966
+ "node": ">=12.0.0"
1967
+ },
1968
+ "funding": {
1969
+ "url": "https://opencollective.com/serialport/donate"
1970
+ }
1971
+ },
1972
+ "node_modules/@serialport/parser-packet-length": {
1973
+ "version": "12.0.0",
1974
+ "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-12.0.0.tgz",
1975
+ "integrity": "sha512-p1hiCRqvGHHLCN/8ZiPUY/G0zrxd7gtZs251n+cfNTn+87rwcdUeu9Dps3Aadx30/sOGGFL6brIRGK4l/t7MuQ==",
1976
+ "engines": {
1977
+ "node": ">=8.6.0"
1978
+ }
1979
+ },
1980
+ "node_modules/@serialport/parser-readline": {
1981
+ "version": "12.0.0",
1982
+ "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz",
1983
+ "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==",
1984
+ "dependencies": {
1985
+ "@serialport/parser-delimiter": "12.0.0"
1986
+ },
1987
+ "engines": {
1988
+ "node": ">=12.0.0"
1989
+ },
1990
+ "funding": {
1991
+ "url": "https://opencollective.com/serialport/donate"
1992
+ }
1993
+ },
1994
+ "node_modules/@serialport/parser-ready": {
1995
+ "version": "12.0.0",
1996
+ "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-12.0.0.tgz",
1997
+ "integrity": "sha512-ygDwj3O4SDpZlbrRUraoXIoIqb8sM7aMKryGjYTIF0JRnKeB1ys8+wIp0RFMdFbO62YriUDextHB5Um5cKFSWg==",
1998
+ "engines": {
1999
+ "node": ">=12.0.0"
2000
+ },
2001
+ "funding": {
2002
+ "url": "https://opencollective.com/serialport/donate"
2003
+ }
2004
+ },
2005
+ "node_modules/@serialport/parser-regex": {
2006
+ "version": "12.0.0",
2007
+ "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-12.0.0.tgz",
2008
+ "integrity": "sha512-dCAVh4P/pZrLcPv9NJ2mvPRBg64L5jXuiRxIlyxxdZGH4WubwXVXY/kBTihQmiAMPxbT3yshSX8f2+feqWsxqA==",
2009
+ "engines": {
2010
+ "node": ">=12.0.0"
2011
+ },
2012
+ "funding": {
2013
+ "url": "https://opencollective.com/serialport/donate"
2014
+ }
2015
+ },
2016
+ "node_modules/@serialport/parser-slip-encoder": {
2017
+ "version": "12.0.0",
2018
+ "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-12.0.0.tgz",
2019
+ "integrity": "sha512-0APxDGR9YvJXTRfY+uRGhzOhTpU5akSH183RUcwzN7QXh8/1jwFsFLCu0grmAUfi+fItCkR+Xr1TcNJLR13VNA==",
2020
+ "engines": {
2021
+ "node": ">=12.0.0"
2022
+ },
2023
+ "funding": {
2024
+ "url": "https://opencollective.com/serialport/donate"
2025
+ }
2026
+ },
2027
+ "node_modules/@serialport/parser-spacepacket": {
2028
+ "version": "12.0.0",
2029
+ "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-12.0.0.tgz",
2030
+ "integrity": "sha512-dozONxhPC/78pntuxpz/NOtVps8qIc/UZzdc/LuPvVsqCoJXiRxOg6ZtCP/W58iibJDKPZPAWPGYeZt9DJxI+Q==",
2031
+ "engines": {
2032
+ "node": ">=12.0.0"
2033
+ },
2034
+ "funding": {
2035
+ "url": "https://opencollective.com/serialport/donate"
2036
+ }
2037
+ },
2038
+ "node_modules/@serialport/stream": {
2039
+ "version": "12.0.0",
2040
+ "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-12.0.0.tgz",
2041
+ "integrity": "sha512-9On64rhzuqKdOQyiYLYv2lQOh3TZU/D3+IWCR5gk0alPel2nwpp4YwDEGiUBfrQZEdQ6xww0PWkzqth4wqwX3Q==",
2042
+ "dependencies": {
2043
+ "@serialport/bindings-interface": "1.2.2",
2044
+ "debug": "4.3.4"
2045
+ },
2046
+ "engines": {
2047
+ "node": ">=12.0.0"
2048
+ },
2049
+ "funding": {
2050
+ "url": "https://opencollective.com/serialport/donate"
2051
+ }
2052
+ },
1849
2053
  "node_modules/@sindresorhus/merge-streams": {
1850
2054
  "version": "2.3.0",
1851
2055
  "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
@@ -2649,6 +2853,11 @@
2649
2853
  "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
2650
2854
  "dev": true
2651
2855
  },
2856
+ "node_modules/@types/w3c-web-usb": {
2857
+ "version": "1.0.10",
2858
+ "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz",
2859
+ "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ=="
2860
+ },
2652
2861
  "node_modules/@ungap/structured-clone": {
2653
2862
  "version": "1.2.0",
2654
2863
  "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -3327,9 +3536,9 @@
3327
3536
  }
3328
3537
  },
3329
3538
  "node_modules/browsertime": {
3330
- "version": "22.2.0",
3331
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-22.2.0.tgz",
3332
- "integrity": "sha512-hA6eaqzOx65bvkP2rry1OBWyfVBZhCT3Sv8LlSMSOuyCD0WoO5J9X+mQgeHBta1o3ylAaCvsy+fv5G9ssOAmwA==",
3539
+ "version": "22.4.0",
3540
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-22.4.0.tgz",
3541
+ "integrity": "sha512-UdJh7OTXWHiCeP56lGDd76vGUOT5VadQ5YUJmlhA1mwpsocAqhtM4qoMWwbh0FZq4IjF9Jct8qEQx6sWC5XMww==",
3333
3542
  "dependencies": {
3334
3543
  "@cypress/xvfb": "1.2.4",
3335
3544
  "@devicefarmer/adbkit": "3.2.6",
@@ -3356,6 +3565,7 @@
3356
3565
  "lodash.pick": "4.4.0",
3357
3566
  "lodash.set": "4.3.2",
3358
3567
  "selenium-webdriver": "4.21.0",
3568
+ "usb-power-profiling": "^1.2.0",
3359
3569
  "yargs": "17.7.2"
3360
3570
  },
3361
3571
  "bin": {
@@ -4076,6 +4286,11 @@
4076
4286
  "node": ">=10.0.0"
4077
4287
  }
4078
4288
  },
4289
+ "node_modules/crc-full": {
4290
+ "version": "1.1.0",
4291
+ "resolved": "https://registry.npmjs.org/crc-full/-/crc-full-1.1.0.tgz",
4292
+ "integrity": "sha512-7YK4t8C9PiekOSnBotYjU2roaaorUXHyT+Xzb12Zgg4DsfG58AxmPk2/wx7XnC9UXyriqRvl3c+U0zFsZkdVYg=="
4293
+ },
4079
4294
  "node_modules/cross-spawn": {
4080
4295
  "version": "7.0.3",
4081
4296
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -7986,13 +8201,33 @@
7986
8201
  "version": "4.8.0",
7987
8202
  "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz",
7988
8203
  "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==",
7989
- "dev": true,
7990
8204
  "bin": {
7991
8205
  "node-gyp-build": "bin.js",
7992
8206
  "node-gyp-build-optional": "optional.js",
7993
8207
  "node-gyp-build-test": "build-test.js"
7994
8208
  }
7995
8209
  },
8210
+ "node_modules/node-hid": {
8211
+ "version": "3.1.0",
8212
+ "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.0.tgz",
8213
+ "integrity": "sha512-YCTD1Ad3PHavx2+hY0QA468pn/gKa44U+fWB1KkRswisWtTROtBzdbmY+Xrm+QZSBCGTkdkgke7Ce606WcGxiQ==",
8214
+ "hasInstallScript": true,
8215
+ "dependencies": {
8216
+ "node-addon-api": "^3.2.1",
8217
+ "pkg-prebuilds": "^1.0.0"
8218
+ },
8219
+ "bin": {
8220
+ "hid-showdevices": "src/show-devices.js"
8221
+ },
8222
+ "engines": {
8223
+ "node": ">=10.16"
8224
+ }
8225
+ },
8226
+ "node_modules/node-hid/node_modules/node-addon-api": {
8227
+ "version": "3.2.1",
8228
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
8229
+ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
8230
+ },
7996
8231
  "node_modules/node-releases": {
7997
8232
  "version": "2.0.14",
7998
8233
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
@@ -8645,6 +8880,21 @@
8645
8880
  "node": ">=4.0.0"
8646
8881
  }
8647
8882
  },
8883
+ "node_modules/pkg-prebuilds": {
8884
+ "version": "1.0.0",
8885
+ "resolved": "https://registry.npmjs.org/pkg-prebuilds/-/pkg-prebuilds-1.0.0.tgz",
8886
+ "integrity": "sha512-D9wlkXZCmjxj2kBHTw3fGSyjoahr33breGBoJcoezpi7ouYS59DJVOHMZ+dgqacSrZiJo4qtkXxLQTE+BqXJmQ==",
8887
+ "dependencies": {
8888
+ "yargs": "^17.7.2"
8889
+ },
8890
+ "bin": {
8891
+ "pkg-prebuilds-copy": "bin/copy.mjs",
8892
+ "pkg-prebuilds-verify": "bin/verify.mjs"
8893
+ },
8894
+ "engines": {
8895
+ "node": ">= 14.15.0"
8896
+ }
8897
+ },
8648
8898
  "node_modules/plur": {
8649
8899
  "version": "5.1.0",
8650
8900
  "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz",
@@ -9667,6 +9917,33 @@
9667
9917
  "url": "https://github.com/sponsors/sindresorhus"
9668
9918
  }
9669
9919
  },
9920
+ "node_modules/serialport": {
9921
+ "version": "12.0.0",
9922
+ "resolved": "https://registry.npmjs.org/serialport/-/serialport-12.0.0.tgz",
9923
+ "integrity": "sha512-AmH3D9hHPFmnF/oq/rvigfiAouAKyK/TjnrkwZRYSFZxNggJxwvbAbfYrLeuvq7ktUdhuHdVdSjj852Z55R+uA==",
9924
+ "dependencies": {
9925
+ "@serialport/binding-mock": "10.2.2",
9926
+ "@serialport/bindings-cpp": "12.0.1",
9927
+ "@serialport/parser-byte-length": "12.0.0",
9928
+ "@serialport/parser-cctalk": "12.0.0",
9929
+ "@serialport/parser-delimiter": "12.0.0",
9930
+ "@serialport/parser-inter-byte-timeout": "12.0.0",
9931
+ "@serialport/parser-packet-length": "12.0.0",
9932
+ "@serialport/parser-readline": "12.0.0",
9933
+ "@serialport/parser-ready": "12.0.0",
9934
+ "@serialport/parser-regex": "12.0.0",
9935
+ "@serialport/parser-slip-encoder": "12.0.0",
9936
+ "@serialport/parser-spacepacket": "12.0.0",
9937
+ "@serialport/stream": "12.0.0",
9938
+ "debug": "4.3.4"
9939
+ },
9940
+ "engines": {
9941
+ "node": ">=16.0.0"
9942
+ },
9943
+ "funding": {
9944
+ "url": "https://opencollective.com/serialport/donate"
9945
+ }
9946
+ },
9670
9947
  "node_modules/set-blocking": {
9671
9948
  "version": "2.0.0",
9672
9949
  "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -10793,6 +11070,39 @@
10793
11070
  "requires-port": "^1.0.0"
10794
11071
  }
10795
11072
  },
11073
+ "node_modules/usb": {
11074
+ "version": "2.13.0",
11075
+ "resolved": "https://registry.npmjs.org/usb/-/usb-2.13.0.tgz",
11076
+ "integrity": "sha512-pTNKyxD1DfC1DYu8kFcIdpE8f33e0c2Sbmmi0HEs28HTVC555uocvYR1g5DDv4CBibacCh4BqRyYZJylN4mBbw==",
11077
+ "hasInstallScript": true,
11078
+ "dependencies": {
11079
+ "@types/w3c-web-usb": "^1.0.6",
11080
+ "node-addon-api": "^8.0.0",
11081
+ "node-gyp-build": "^4.5.0"
11082
+ },
11083
+ "engines": {
11084
+ "node": ">=12.22.0 <13.0 || >=14.17.0"
11085
+ }
11086
+ },
11087
+ "node_modules/usb-power-profiling": {
11088
+ "version": "1.2.0",
11089
+ "resolved": "https://registry.npmjs.org/usb-power-profiling/-/usb-power-profiling-1.2.0.tgz",
11090
+ "integrity": "sha512-FE0fed7biDZLv0/dvYugnSS8JUyshJx2AA9X3OW0pKw5grQwDP6hpjo5iSjR93dD9ngSvTjsaJmFZeoBHRHtwA==",
11091
+ "dependencies": {
11092
+ "crc-full": "^1.1.0",
11093
+ "node-hid": "^3.0.0",
11094
+ "serialport": "^12.0.0",
11095
+ "usb": "^2.9.0"
11096
+ }
11097
+ },
11098
+ "node_modules/usb/node_modules/node-addon-api": {
11099
+ "version": "8.0.0",
11100
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.0.0.tgz",
11101
+ "integrity": "sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw==",
11102
+ "engines": {
11103
+ "node": "^18 || ^20 || >= 21"
11104
+ }
11105
+ },
10796
11106
  "node_modules/utcstring": {
10797
11107
  "version": "0.1.0",
10798
11108
  "resolved": "https://registry.npmjs.org/utcstring/-/utcstring-0.1.0.tgz",
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "sitespeed.io": "./bin/sitespeed.js",
6
6
  "sitespeed.io-wpr": "./bin/browsertimeWebPageReplay.js"
7
7
  },
8
- "version": "34.0.3",
8
+ "version": "34.1.0",
9
9
  "description": "sitespeed.io is an open-source tool for comprehensive web performance analysis, enabling you to test, monitor, and optimize your website’s speed using real browsers in various environments.",
10
10
  "keywords": [
11
11
  "performance",
@@ -85,7 +85,7 @@
85
85
  "@tgwf/co2": "0.14.4",
86
86
  "@aws-sdk/client-s3": "3.564.0",
87
87
  "axe-core": "4.9.1",
88
- "browsertime": "22.2.0",
88
+ "browsertime": "22.4.0",
89
89
  "coach-core": "8.0.2",
90
90
  "cli-color": "2.0.4",
91
91
  "concurrent-queue": "7.0.2",