sitespeed.io 24.4.0 → 24.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,22 @@
1
1
  # CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
2
2
 
3
+ ## 24.6.0 - 2022-05-10
4
+ ### Added
5
+ * Updated to [Browsertime 16.3.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1630---2022-05-07) that collects Largest Contentful Paint from the browser (if the browser suppoorts the LCP API).
6
+
7
+ * Show total download time per domain [#3648[](https://github.com/sitespeedio/sitespeed.io/pull/3648).
8
+ ## 24.5.1 - 2022-05-06
9
+ ### Fixed
10
+ * Reverted to Ubuntu 20 in the Docker container. Ubuntu 22 gave Firefox problems on ARM and we also seen other problems with NodeJS in that container.
11
+ * Updated PageXray/Coach Core that include SSL times in the total timings per domain (that was missed before).
12
+ * Added more safe check when we miss Crux data.
13
+ ## 24.5.0 - 2022-05-05
14
+ ### Added
15
+ * Add INP and TTFB to the CRUX metrics [#3645](https://github.com/sitespeedio/sitespeed.io/pull/3645).
16
+ * Updated the Chrome USer Experience dashboard to include the new metrics. You can see the dahsboard [here](https://dashboard.sitespeed.io/d/t_bhsNGMk/chrome-user-experience-report) and download the new one from [here](https://github.com/sitespeedio/grafana-bootstrap-docker/blob/main/dashboards/graphite/ChromeUserExperienceReport.json).
17
+
18
+ ### Fixed
19
+ * Bumped Browsertime with a new fix release for the upcoming portable visual metrics script.
3
20
  ## 24.4.0 - 2022-05-04
4
21
  ### Added
5
22
  * Updated to Edge 101 in the Docker container. Updated to latest [Browsertime 16.2.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1620---2022-05-01) with Edgedriver and Chromedriver 101.
package/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM sitespeedio/webbrowsers:chrome-101.0-firefox-100.0-edge-101.0
1
+ FROM sitespeedio/webbrowsers:chrome-101.0-firefox-100.0-edge-101.0-b
2
2
 
3
3
  ARG TARGETPLATFORM=linux/amd64
4
4
 
package/lib/cli/cli.js CHANGED
@@ -1454,7 +1454,7 @@ module.exports.parseCommandLine = function parseCommandLine() {
1454
1454
  })
1455
1455
  .option('firstParty', {
1456
1456
  describe:
1457
- 'A regex running against each request and categorize it as first vs third party URL. (ex: ".*sitespeed.*")'
1457
+ 'A regex running against each request and categorize it as first vs third party URL. (ex: ".*sitespeed.*"). If you do not set a regular expression parts of the domain from the tested URL will be used: ".*domain.*" '
1458
1458
  })
1459
1459
  .option('urlAlias', {
1460
1460
  describe:
@@ -14,13 +14,17 @@ const DEFAULT_METRICS_PAGESUMMARY = [
14
14
  'loadingExperience.*.FIRST_CONTENTFUL_PAINT_MS.*',
15
15
  'loadingExperience.*.FIRST_INPUT_DELAY_MS.*',
16
16
  'loadingExperience.*.LARGEST_CONTENTFUL_PAINT_MS.*',
17
- 'loadingExperience.*.CUMULATIVE_LAYOUT_SHIFT_SCORE.*'
17
+ 'loadingExperience.*.CUMULATIVE_LAYOUT_SHIFT_SCORE.*',
18
+ 'loadingExperience.*.TIME_TO_FIRST_BYTE_MS.*',
19
+ 'loadingExperience.*.INTERACTION_TO_NEXT_PAINT_MS.*'
18
20
  ];
19
21
  const DEFAULT_METRICS_SUMMARY = [
20
22
  'originLoadingExperience.*.FIRST_CONTENTFUL_PAINT_MS.*',
21
23
  'originLoadingExperience.*.FIRST_INPUT_DELAY_MS.*',
22
24
  'originLoadingExperience.*.LARGEST_CONTENTFUL_PAINT_MS.*',
23
- 'originLoadingExperience.*.CUMULATIVE_LAYOUT_SHIFT_SCORE.*'
25
+ 'originLoadingExperience.*.CUMULATIVE_LAYOUT_SHIFT_SCORE.*',
26
+ 'originLoadingExperience.*.TIME_TO_FIRST_BYTE_MS.*',
27
+ 'originLoadingExperience.*.INTERACTION_TO_NEXT_PAINT_MS.*'
24
28
  ];
25
29
 
26
30
  function wait(ms) {
@@ -11,97 +11,114 @@ mixin sizeCell(title, size)
11
11
  td.number(data-title=title, data-value= size)= h.size.format(size)
12
12
 
13
13
  - const crux = pageInfo.data.crux.pageSummary;
14
- - const metrics = {first_contentful_paint:'First Contentful Paint (FCP)', largest_contentful_paint: 'Largest Contentful Paint (LCP)', first_input_delay:'First Input Delay (FID)', cumulative_layout_shift: 'Cumulative Layout Shift (CLS)'};
14
+ - const metrics = {first_contentful_paint:'First Contentful Paint (FCP)', largest_contentful_paint: 'Largest Contentful Paint (LCP)', first_input_delay:'First Input Delay (FID)', cumulative_layout_shift: 'Cumulative Layout Shift (CLS)',experimental_interaction_to_next_paint: 'Interaction to next paint (INP)', experimental_time_to_first_byte: 'Time to first byte (TTFB)'};
15
15
  - const experiences = ['loadingExperience','originLoadingExperience'];
16
16
 
17
- small
18
- || 
17
+ if experiences
18
+ small
19
+ || 
20
+ each experience in experiences
21
+ each formFactor in Object.keys(crux[experience])
22
+ a(href='#' + experience + '-' + formFactor) #{experience} #{formFactor} |
23
+ |  | 
24
+
25
+ a#crux
26
+ h2 CrUx
27
+ p.small Chrome User Experience Report (CrUx) is powered by real user measurement across the public web, aggregated from users who have opted-in to syncing their browsing history, have not set up a Sync passphrase, and have usage statistic reporting enabled and is using Chrome.
28
+
29
+ p.small The CrUx data has four different buckets (form factor) depending on device: DESKTOP, PHONE, TABLET and ALL. You can choose which data to get with
30
+ code --crux.formFactor
31
+ | .
32
+
19
33
  each experience in experiences
20
- each formFactor in Object.keys(crux[experience])
21
- a(href='#' + experience + '-' + formFactor) #{experience} #{formFactor} |
22
- |  | 
23
-
24
- a#crux
25
- h2 CrUx
26
- p.small Chrome User Experience Report (CrUx) is powered by real user measurement across the public web, aggregated from users who have opted-in to syncing their browsing history, have not set up a Sync passphrase, and have usage statistic reporting enabled and is using Chrome.
27
-
28
- p.small The CrUx data has four different buckets (form factor) depending on device: DESKTOP, PHONE, TABLET and ALL. You can choose which data to get with
29
- code --crux.formFactor
30
- | .
31
-
32
- each experience in experiences
33
- if experience === 'loadingExperience' && crux[experience]
34
- p Over the last 30 days, this is the field data for this page for Chrome users.
35
- else if crux[experience]
36
- h4 All pages served from this origin
37
- p This is a summary of all pages served from this origin over the last 30 days for Chrome users.
38
-
39
- if crux[experience]
40
- each formFactor in Object.keys(crux[experience])
41
- if (crux[experience][formFactor] && crux[experience][formFactor].data)
42
- a(id=experience + '-' + formFactor)
43
- h3 Form Factor #{formFactor}
44
- table
45
- thead
46
- tr
47
- th Metric
48
- th Value
49
- tbody
50
- each name, key in metrics
51
- if crux[experience][formFactor].data.record.metrics[key]
52
- tr
53
- td #{name} 75 percentile
54
- td #{key.indexOf('cumulative') > -1 ? crux[experience][formFactor].data.record.metrics[key].percentiles.p75 : h.time.ms(crux[experience][formFactor].data.record.metrics[key].percentiles.p75)}
55
-
56
- h4 Distribution
57
- - let cruxus = `${experience}.${formFactor}.data.record.metrics`;
58
- - let FCPs = [Number(get(crux, `${cruxus}.first_contentful_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_contentful_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_contentful_paint.histogram[2].density`, 0)*100).toFixed(2)];
59
-
60
- - let LCPs = [Number(get(crux, `${cruxus}.largest_contentful_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.largest_contentful_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.largest_contentful_paint.histogram[2].density`, 0)*100).toFixed(2)];
61
-
62
- - let FIDs = [Number(get(crux, `${cruxus}.first_input_delay.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_input_delay.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_input_delay.histogram[2].density`, 0)*100).toFixed(2)];
63
-
64
- - let CLSs = [Number(get(crux, `${cruxus}.cumulative_layout_shift.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.cumulative_layout_shift.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.cumulative_layout_shift.histogram[2].density`, 0)*100).toFixed(2)];
65
-
66
- script(type='text/javascript').
67
- document.addEventListener("DOMContentLoaded", function() {
68
-
69
- function drawPie(id, series, labels) {
70
- new Chartist.Pie(id, {
71
- series,
72
- labels,
73
- }, {
74
- showLabel: false,
75
- plugins: [
76
- Chartist.plugins.legend(
77
- { clickable: false,
78
- position: 'bottom'
79
- }
80
- )
81
- ]
82
- });
83
- }
84
-
85
- drawPie('#chartFCP#{experience + formFactor}', [#{FCPs}], ['Fast: #{FCPs[0]}%', 'Moderate #{FCPs[1]}%', 'Slow: #{FCPs[2]}%']);
86
- drawPie('#chartLCP#{experience + formFactor}', [#{LCPs}], ['Fast: #{LCPs[0]}%', 'Moderate #{LCPs[1]}%', 'Slow: #{LCPs[2]}%']);
87
- drawPie('#chartFID#{experience + formFactor}', [#{FIDs}], ['Fast: #{FIDs[0]}%', 'Moderate #{FIDs[1]}%', 'Slow: #{FIDs[2]}%']);
88
- drawPie('#chartCLS#{experience + formFactor}', [#{CLSs}], ['Good: #{CLSs[0]}%', 'Need improvement: #{CLSs[1]}%', 'Poor: #{CLSs[2]}%']);
89
-
90
-
91
- });
92
- .responsive
34
+ if experience === 'loadingExperience' && crux[experience]
35
+ p Over the last 30 days, this is the field data for this page for Chrome users.
36
+ else if crux[experience]
37
+ h4 All pages served from this origin
38
+ p This is a summary of all pages served from this origin over the last 30 days for Chrome users.
39
+
40
+ if crux[experience]
41
+ each formFactor in Object.keys(crux[experience])
42
+ if (crux[experience][formFactor] && crux[experience][formFactor].data)
43
+ a(id=experience + '-' + formFactor)
44
+ h3 Form Factor #{formFactor}
93
45
  table
94
- tr
95
- th #{metrics['first_contentful_paint']}
96
- th #{metrics['largest_contentful_paint']}
97
- th #{metrics['first_input_delay']}
98
- th #{metrics['cumulative_layout_shift']}
99
- tr
100
- td(data-title=metrics['first_contentful_paint'])
101
- .ct-chart(id='chartFCP' + experience + formFactor)
102
- td(data-title=metrics['largest_contentful_paint'])
103
- .ct-chart(id='chartLCP' + experience + formFactor)
104
- td(data-title=metrics['first_input_delay'])
105
- .ct-chart(id='chartFID' + experience + formFactor)
106
- td(data-title=metrics['cumulative_layout_shift'])
107
- .ct-chart(id='chartCLS' + experience + formFactor)
46
+ thead
47
+ tr
48
+ th Metric
49
+ th Value
50
+ tbody
51
+ each name, key in metrics
52
+ if crux[experience][formFactor].data.record.metrics[key]
53
+ tr
54
+ td #{name} 75 percentile
55
+ td #{key.indexOf('cumulative') > -1 ? crux[experience][formFactor].data.record.metrics[key].percentiles.p75 : h.time.ms(crux[experience][formFactor].data.record.metrics[key].percentiles.p75)}
56
+
57
+ h4 Distribution
58
+ - let cruxus = `${experience}.${formFactor}.data.record.metrics`;
59
+ - let FCPs = [Number(get(crux, `${cruxus}.first_contentful_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_contentful_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_contentful_paint.histogram[2].density`, 0)*100).toFixed(2)];
60
+
61
+ - let LCPs = [Number(get(crux, `${cruxus}.largest_contentful_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.largest_contentful_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.largest_contentful_paint.histogram[2].density`, 0)*100).toFixed(2)];
62
+
63
+ - let FIDs = [Number(get(crux, `${cruxus}.first_input_delay.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_input_delay.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_input_delay.histogram[2].density`, 0)*100).toFixed(2)];
64
+
65
+ - let CLSs = [Number(get(crux, `${cruxus}.cumulative_layout_shift.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.cumulative_layout_shift.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.cumulative_layout_shift.histogram[2].density`, 0)*100).toFixed(2)];
66
+
67
+ - let TTFBs = [Number(get(crux, `${cruxus}.experimental_time_to_first_byte.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.experimental_time_to_first_byte.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.experimental_time_to_first_byte.histogram[2].density`, 0)*100).toFixed(2)];
68
+
69
+ - let ITNPs = [Number(get(crux, `${cruxus}.experimental_interaction_to_next_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.experimental_interaction_to_next_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.experimental_interaction_to_next_paint.histogram[2].density`, 0)*100).toFixed(2)];
70
+
71
+ script(type='text/javascript').
72
+ document.addEventListener("DOMContentLoaded", function() {
73
+
74
+ function drawPie(id, series, labels) {
75
+ new Chartist.Pie(id, {
76
+ series,
77
+ labels,
78
+ }, {
79
+ showLabel: false,
80
+ plugins: [
81
+ Chartist.plugins.legend(
82
+ { clickable: false,
83
+ position: 'bottom'
84
+ }
85
+ )
86
+ ]
87
+ });
88
+ }
89
+
90
+ drawPie('#chartFCP#{experience + formFactor}', [#{FCPs}], ['Fast: #{FCPs[0]}%', 'Moderate #{FCPs[1]}%', 'Slow: #{FCPs[2]}%']);
91
+ drawPie('#chartLCP#{experience + formFactor}', [#{LCPs}], ['Fast: #{LCPs[0]}%', 'Moderate #{LCPs[1]}%', 'Slow: #{LCPs[2]}%']);
92
+ drawPie('#chartFID#{experience + formFactor}', [#{FIDs}], ['Fast: #{FIDs[0]}%', 'Moderate #{FIDs[1]}%', 'Slow: #{FIDs[2]}%']);
93
+ drawPie('#chartCLS#{experience + formFactor}', [#{CLSs}], ['Good: #{CLSs[0]}%', 'Need improvement: #{CLSs[1]}%', 'Poor: #{CLSs[2]}%']);
94
+ drawPie('#chartTTFB#{experience + formFactor}', [#{TTFBs}], ['Good: #{TTFBs[0]}%', 'Need improvement: #{TTFBs[1]}%', 'Poor: #{TTFBs[2]}%']);
95
+ drawPie('#chartITNP#{experience + formFactor}', [#{ITNPs}], ['Good: #{ITNPs[0]}%', 'Need improvement: #{ITNPs[1]}%', 'Poor: #{ITNPs[2]}%']);
96
+
97
+
98
+ });
99
+ .responsive
100
+ table
101
+ tr
102
+ th #{metrics['first_contentful_paint']}
103
+ th #{metrics['largest_contentful_paint']}
104
+ th #{metrics['first_input_delay']}
105
+ tr
106
+ td(data-title=metrics['first_contentful_paint'])
107
+ .ct-chart(id='chartFCP' + experience + formFactor)
108
+ td(data-title=metrics['largest_contentful_paint'])
109
+ .ct-chart(id='chartLCP' + experience + formFactor)
110
+ td(data-title=metrics['first_input_delay'])
111
+ .ct-chart(id='chartFID' + experience + formFactor)
112
+ tr
113
+ th #{metrics['cumulative_layout_shift']}
114
+ th #{metrics['experimental_interaction_to_next_paint']}
115
+ th #{metrics['experimental_time_to_first_byte']}
116
+ tr
117
+ td(data-title=metrics['cumulative_layout_shift'])
118
+ .ct-chart(id='chartCLS' + experience + formFactor)
119
+ td(data-title=metrics['experimental_interaction_to_next_paint'])
120
+ .ct-chart(id='chartITNP' + experience + formFactor)
121
+ td(data-title=metrics['experimental_time_to_first_byte'])
122
+ .ct-chart(id='chartTTFB' + experience + formFactor)
123
+ else
124
+ p No data availible in the Chrome User Experience report.
@@ -46,6 +46,35 @@ module.exports = function (cruxResult) {
46
46
  .density
47
47
  };
48
48
  }
49
+
50
+ if (cruxResult.record.metrics.experimental_interaction_to_next_paint) {
51
+ result.INTERACTION_TO_NEXT_PAINT_MS = {
52
+ p75: cruxResult.record.metrics.experimental_interaction_to_next_paint
53
+ .percentiles.p75,
54
+ fast: cruxResult.record.metrics.experimental_interaction_to_next_paint
55
+ .histogram[0].density,
56
+ moderate:
57
+ cruxResult.record.metrics.experimental_interaction_to_next_paint
58
+ .histogram[1].density,
59
+ slow: cruxResult.record.metrics.experimental_interaction_to_next_paint
60
+ .histogram[2].density
61
+ };
62
+ }
63
+
64
+ if (cruxResult.record.metrics.experimental_time_to_first_byte) {
65
+ result.TIME_TO_FIRST_BYTE_MS = {
66
+ p75: cruxResult.record.metrics.experimental_time_to_first_byte.percentiles
67
+ .p75,
68
+ fast: cruxResult.record.metrics.experimental_time_to_first_byte
69
+ .histogram[0].density,
70
+ moderate:
71
+ cruxResult.record.metrics.experimental_time_to_first_byte.histogram[1]
72
+ .density,
73
+ slow: cruxResult.record.metrics.experimental_time_to_first_byte
74
+ .histogram[2].density
75
+ };
76
+ }
77
+
49
78
  result.data = cruxResult;
50
79
  return result;
51
80
  };
@@ -10,7 +10,7 @@ small
10
10
  |  | 
11
11
  a(href='#requests-and-sizes-per-content-type') Requests and sizes per content type
12
12
  |  | 
13
- a(href='#sizes-per-domain') Size and requests per domain
13
+ a(href='#data-per-domain') Data per domain
14
14
  |  | 
15
15
  a(href='#expires-and-last-modified-stats') Expires and last modified statistics
16
16
  |  | 
@@ -1,12 +1,12 @@
1
- a#sizes-per-domain
2
- h3 Size and requests per domain
1
+ a#data-per-domain
2
+ h3 Data per domain
3
3
  .responsive
4
4
  table(data-sortable, id='contentSizePerDomain')
5
- +rowHeading(['Domain', 'Header Size', 'Transfer Size', 'Content Size', 'Requests'])
5
+ +rowHeading(['Domain', 'Total download time', 'Transfer Size', 'Content Size', 'Requests'])
6
6
  each data, domain in pagexray.domains
7
7
  tr
8
8
  td(data-title='Domain') #{domain}
9
- +sizeCell('headerSize', data.headerSize)
9
+ +timeCell('totalTime', data.totalTime)
10
10
  +sizeCell('transferSize', data.transferSize)
11
11
  +sizeCell('contentSize', data.contentSize)
12
12
  +numberCell('requests', data.requests)
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "sitespeed.io",
3
- "version": "24.4.0",
3
+ "version": "24.6.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "sitespeed.io",
9
- "version": "24.4.0",
9
+ "version": "24.6.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@google-cloud/storage": "5.19.3",
13
13
  "@tgwf/co2": "0.8.0",
14
14
  "aws-sdk": "2.1121.0",
15
15
  "axe-core": "4.4.1",
16
- "browsertime": "16.2.0",
16
+ "browsertime": "16.3.0",
17
17
  "cli-color": "2.0.2",
18
- "coach-core": "7.1.1",
18
+ "coach-core": "7.1.2",
19
19
  "concurrent-queue": "7.0.2",
20
20
  "dayjs": "1.11.1",
21
21
  "fast-crc32c": "2.0.0",
@@ -1681,9 +1681,9 @@
1681
1681
  }
1682
1682
  },
1683
1683
  "node_modules/browsertime": {
1684
- "version": "16.2.0",
1685
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.2.0.tgz",
1686
- "integrity": "sha512-kkyAij+uQYYgVSkQ/O4fvFvZbgAYL0sKYV/dLfQNL4qU956/dn1nFFskD9/YULEEOauJy0lPGDGHeeKKibK/zw==",
1684
+ "version": "16.3.0",
1685
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.3.0.tgz",
1686
+ "integrity": "sha512-T0zhFU9MR/hrMdSzpXetg8cAZ2WC13AUmofUknGemNbKRjeBfB1lIOBk5TrhoN2E2dPBt18WsR/ThQgEoAXmxA==",
1687
1687
  "dependencies": {
1688
1688
  "@cypress/xvfb": "1.2.4",
1689
1689
  "@devicefarmer/adbkit": "2.11.3",
@@ -2168,17 +2168,17 @@
2168
2168
  }
2169
2169
  },
2170
2170
  "node_modules/coach-core": {
2171
- "version": "7.1.1",
2172
- "resolved": "https://registry.npmjs.org/coach-core/-/coach-core-7.1.1.tgz",
2173
- "integrity": "sha512-TS+ZgrYNg55z18tT3Q21UanYBmEvWFH8aNBqAxSWrjReWI6BTfUANfdRv7q707fbGraQmzZDXPyh0PfG4kbj3g==",
2171
+ "version": "7.1.2",
2172
+ "resolved": "https://registry.npmjs.org/coach-core/-/coach-core-7.1.2.tgz",
2173
+ "integrity": "sha512-MuziK7sWmkQPHgkVy7vpegtpEJgt8LE9no2x5TwTQIhSMqSeUeREhzr6ayQ0XCjezRZV3+nB68TblEK7GKTbyQ==",
2174
2174
  "dependencies": {
2175
2175
  "filter-files": "0.4.0",
2176
2176
  "json-stable-stringify": "1.0.1",
2177
2177
  "lodash.groupby": "4.6.0",
2178
2178
  "lodash.merge": "4.6.2",
2179
2179
  "lodash.sortby": "4.7.0",
2180
- "pagexray": "4.4.1",
2181
- "third-party-web": "0.15.0",
2180
+ "pagexray": "4.4.2",
2181
+ "third-party-web": "0.17.1",
2182
2182
  "wappalyzer-core": "6.6.0"
2183
2183
  },
2184
2184
  "engines": {
@@ -6175,9 +6175,9 @@
6175
6175
  }
6176
6176
  },
6177
6177
  "node_modules/pagexray": {
6178
- "version": "4.4.1",
6179
- "resolved": "https://registry.npmjs.org/pagexray/-/pagexray-4.4.1.tgz",
6180
- "integrity": "sha512-vBl50PgflqBcb5w97vUGqYdA1o8TY5QOG7ec/sLkam5QngaVG0XlXwNP/Pm2kgCgu8I1pT+EAIqbcoDmDmsjeA==",
6178
+ "version": "4.4.2",
6179
+ "resolved": "https://registry.npmjs.org/pagexray/-/pagexray-4.4.2.tgz",
6180
+ "integrity": "sha512-Cw1WhyuqEy4nACgUMzTfuZn7EcQrsq4ozpTnkVlsGjm4eMbdGXKN8QwflFi1g7p2FpgSq1ElKgTGFrzVNdbEyQ==",
6181
6181
  "dependencies": {
6182
6182
  "minimist": "1.2.6"
6183
6183
  },
@@ -7814,9 +7814,9 @@
7814
7814
  "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
7815
7815
  },
7816
7816
  "node_modules/third-party-web": {
7817
- "version": "0.15.0",
7818
- "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.15.0.tgz",
7819
- "integrity": "sha512-kv+TVeppmasvDBXHfKCuQ4HNXapsyEXAGVANguzVDJ98xXm88ggtb9B09rVWvwDqapU5VZ4Q4JkCu2viyD/k0w=="
7817
+ "version": "0.17.1",
7818
+ "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.17.1.tgz",
7819
+ "integrity": "sha512-X9Mha8cVeBwakunlZXkXL6xRzw8VCcDGWqT59EzeTYAJIi8ien3CuufnEGEx4ZUFahumNQdoOwf4H2T9Ca6lBg=="
7820
7820
  },
7821
7821
  "node_modules/through": {
7822
7822
  "version": "2.3.8",
@@ -9761,9 +9761,9 @@
9761
9761
  }
9762
9762
  },
9763
9763
  "browsertime": {
9764
- "version": "16.2.0",
9765
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.2.0.tgz",
9766
- "integrity": "sha512-kkyAij+uQYYgVSkQ/O4fvFvZbgAYL0sKYV/dLfQNL4qU956/dn1nFFskD9/YULEEOauJy0lPGDGHeeKKibK/zw==",
9764
+ "version": "16.3.0",
9765
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.3.0.tgz",
9766
+ "integrity": "sha512-T0zhFU9MR/hrMdSzpXetg8cAZ2WC13AUmofUknGemNbKRjeBfB1lIOBk5TrhoN2E2dPBt18WsR/ThQgEoAXmxA==",
9767
9767
  "requires": {
9768
9768
  "@cypress/xvfb": "1.2.4",
9769
9769
  "@devicefarmer/adbkit": "2.11.3",
@@ -10132,17 +10132,17 @@
10132
10132
  }
10133
10133
  },
10134
10134
  "coach-core": {
10135
- "version": "7.1.1",
10136
- "resolved": "https://registry.npmjs.org/coach-core/-/coach-core-7.1.1.tgz",
10137
- "integrity": "sha512-TS+ZgrYNg55z18tT3Q21UanYBmEvWFH8aNBqAxSWrjReWI6BTfUANfdRv7q707fbGraQmzZDXPyh0PfG4kbj3g==",
10135
+ "version": "7.1.2",
10136
+ "resolved": "https://registry.npmjs.org/coach-core/-/coach-core-7.1.2.tgz",
10137
+ "integrity": "sha512-MuziK7sWmkQPHgkVy7vpegtpEJgt8LE9no2x5TwTQIhSMqSeUeREhzr6ayQ0XCjezRZV3+nB68TblEK7GKTbyQ==",
10138
10138
  "requires": {
10139
10139
  "filter-files": "0.4.0",
10140
10140
  "json-stable-stringify": "1.0.1",
10141
10141
  "lodash.groupby": "4.6.0",
10142
10142
  "lodash.merge": "4.6.2",
10143
10143
  "lodash.sortby": "4.7.0",
10144
- "pagexray": "4.4.1",
10145
- "third-party-web": "0.15.0",
10144
+ "pagexray": "4.4.2",
10145
+ "third-party-web": "0.17.1",
10146
10146
  "wappalyzer-core": "6.6.0"
10147
10147
  }
10148
10148
  },
@@ -13201,9 +13201,9 @@
13201
13201
  "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
13202
13202
  },
13203
13203
  "pagexray": {
13204
- "version": "4.4.1",
13205
- "resolved": "https://registry.npmjs.org/pagexray/-/pagexray-4.4.1.tgz",
13206
- "integrity": "sha512-vBl50PgflqBcb5w97vUGqYdA1o8TY5QOG7ec/sLkam5QngaVG0XlXwNP/Pm2kgCgu8I1pT+EAIqbcoDmDmsjeA==",
13204
+ "version": "4.4.2",
13205
+ "resolved": "https://registry.npmjs.org/pagexray/-/pagexray-4.4.2.tgz",
13206
+ "integrity": "sha512-Cw1WhyuqEy4nACgUMzTfuZn7EcQrsq4ozpTnkVlsGjm4eMbdGXKN8QwflFi1g7p2FpgSq1ElKgTGFrzVNdbEyQ==",
13207
13207
  "requires": {
13208
13208
  "minimist": "1.2.6"
13209
13209
  }
@@ -14502,9 +14502,9 @@
14502
14502
  "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
14503
14503
  },
14504
14504
  "third-party-web": {
14505
- "version": "0.15.0",
14506
- "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.15.0.tgz",
14507
- "integrity": "sha512-kv+TVeppmasvDBXHfKCuQ4HNXapsyEXAGVANguzVDJ98xXm88ggtb9B09rVWvwDqapU5VZ4Q4JkCu2viyD/k0w=="
14505
+ "version": "0.17.1",
14506
+ "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.17.1.tgz",
14507
+ "integrity": "sha512-X9Mha8cVeBwakunlZXkXL6xRzw8VCcDGWqT59EzeTYAJIi8ien3CuufnEGEx4ZUFahumNQdoOwf4H2T9Ca6lBg=="
14508
14508
  },
14509
14509
  "through": {
14510
14510
  "version": "2.3.8",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "sitespeed.io": "./bin/sitespeed.js",
5
5
  "sitespeed.io-wpr": "./bin/browsertimeWebPageReplay.js"
6
6
  },
7
- "version": "24.4.0",
7
+ "version": "24.6.0",
8
8
  "description": "Analyze the web performance of your site",
9
9
  "keywords": [
10
10
  "performance",
@@ -80,8 +80,8 @@
80
80
  "@tgwf/co2": "0.8.0",
81
81
  "aws-sdk": "2.1121.0",
82
82
  "axe-core": "4.4.1",
83
- "browsertime": "16.2.0",
84
- "coach-core": "7.1.1",
83
+ "browsertime": "16.3.0",
84
+ "coach-core": "7.1.2",
85
85
  "cli-color": "2.0.2",
86
86
  "concurrent-queue": "7.0.2",
87
87
  "dayjs": "1.11.1",