sitespeed.io 24.5.0 → 24.7.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,21 @@
1
1
  # CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
2
2
 
3
+ ## 24.7.0 - 2022-05-11
4
+ ### Added
5
+ Updated to [Browsertime 16.4.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1640---2022-05-11) fixes a bug for LCP in the video and also output when LCP happens in the video.
6
+
7
+ ### Fixed
8
+ * Make sure we got CLS from Browsertime when we try to render it [#3650](https://github.com/sitespeedio/sitespeed.io/pull/3650).
9
+ ## 24.6.0 - 2022-05-10
10
+ ### Added
11
+ * 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).
12
+
13
+ * Show total download time per domain [#3648](https://github.com/sitespeedio/sitespeed.io/pull/3648).
14
+ ## 24.5.1 - 2022-05-06
15
+ ### Fixed
16
+ * 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.
17
+ * Updated PageXray/Coach Core that include SSL times in the total timings per domain (that was missed before).
18
+ * Added more safe check when we miss Crux data.
3
19
  ## 24.5.0 - 2022-05-05
4
20
  ### Added
5
21
  * Add INP and TTFB to the CRUX metrics [#3645](https://github.com/sitespeedio/sitespeed.io/pull/3645).
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
 
@@ -14,108 +14,111 @@ mixin sizeCell(title, size)
14
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
- - 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)];
67
-
68
- - 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)];
69
-
70
- script(type='text/javascript').
71
- document.addEventListener("DOMContentLoaded", function() {
72
-
73
- function drawPie(id, series, labels) {
74
- new Chartist.Pie(id, {
75
- series,
76
- labels,
77
- }, {
78
- showLabel: false,
79
- plugins: [
80
- Chartist.plugins.legend(
81
- { clickable: false,
82
- position: 'bottom'
83
- }
84
- )
85
- ]
86
- });
87
- }
88
-
89
- drawPie('#chartFCP#{experience + formFactor}', [#{FCPs}], ['Fast: #{FCPs[0]}%', 'Moderate #{FCPs[1]}%', 'Slow: #{FCPs[2]}%']);
90
- drawPie('#chartLCP#{experience + formFactor}', [#{LCPs}], ['Fast: #{LCPs[0]}%', 'Moderate #{LCPs[1]}%', 'Slow: #{LCPs[2]}%']);
91
- drawPie('#chartFID#{experience + formFactor}', [#{FIDs}], ['Fast: #{FIDs[0]}%', 'Moderate #{FIDs[1]}%', 'Slow: #{FIDs[2]}%']);
92
- drawPie('#chartCLS#{experience + formFactor}', [#{CLSs}], ['Good: #{CLSs[0]}%', 'Need improvement: #{CLSs[1]}%', 'Poor: #{CLSs[2]}%']);
93
- drawPie('#chartTTFB#{experience + formFactor}', [#{TTFBs}], ['Good: #{TTFBs[0]}%', 'Need improvement: #{TTFBs[1]}%', 'Poor: #{TTFBs[2]}%']);
94
- drawPie('#chartITNP#{experience + formFactor}', [#{ITNPs}], ['Good: #{ITNPs[0]}%', 'Need improvement: #{ITNPs[1]}%', 'Poor: #{ITNPs[2]}%']);
95
-
96
-
97
- });
98
- .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}
99
45
  table
100
- tr
101
- th #{metrics['first_contentful_paint']}
102
- th #{metrics['largest_contentful_paint']}
103
- th #{metrics['first_input_delay']}
104
- tr
105
- td(data-title=metrics['first_contentful_paint'])
106
- .ct-chart(id='chartFCP' + experience + formFactor)
107
- td(data-title=metrics['largest_contentful_paint'])
108
- .ct-chart(id='chartLCP' + experience + formFactor)
109
- td(data-title=metrics['first_input_delay'])
110
- .ct-chart(id='chartFID' + experience + formFactor)
111
- tr
112
- th #{metrics['cumulative_layout_shift']}
113
- th #{metrics['experimental_interaction_to_next_paint']}
114
- th #{metrics['experimental_time_to_first_byte']}
115
- tr
116
- td(data-title=metrics['cumulative_layout_shift'])
117
- .ct-chart(id='chartCLS' + experience + formFactor)
118
- td(data-title=metrics['experimental_interaction_to_next_paint'])
119
- .ct-chart(id='chartITNP' + experience + formFactor)
120
- td(data-title=metrics['experimental_time_to_first_byte'])
121
- .ct-chart(id='chartTTFB' + 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.
@@ -142,10 +142,11 @@ if browsertime
142
142
  td
143
143
  a(href='#largestContentfulPaint') Largest Contentful Paint (LCP)
144
144
  td.number #{h.time.ms(Math.max(timings.largestContentfulPaint.loadTime,timings.largestContentfulPaint.renderTime, timings.largestContentfulPaint.loadTime,timings.largestContentfulPaint.loadTime))}
145
- tr
146
- td
147
- a(href='#cumulativeLayoutShift') Cumulative Layout Shift (CLS)
148
- td.number #{browsertime.pageinfo.cumulativeLayoutShift.toFixed(2)}
145
+ if (browsertime.pageinfo && browsertime.pageinfo.cumulativeLayoutShift)
146
+ tr
147
+ td
148
+ a(href='#cumulativeLayoutShift') Cumulative Layout Shift (CLS)
149
+ td.number #{browsertime.pageinfo.cumulativeLayoutShift.toFixed(2)}
149
150
  if browsertime.timings.firstInput !== undefined
150
151
  tr
151
152
  td
@@ -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.5.0",
3
+ "version": "24.7.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "sitespeed.io",
9
- "version": "24.5.0",
9
+ "version": "24.7.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.1",
16
+ "browsertime": "16.4.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.1",
1685
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.2.1.tgz",
1686
- "integrity": "sha512-5WQMbePZ1HWlyW4JzxHqHrz73+VkM0ehvvQFaKSh2If9zqDvoge4NXp2xFTTipdqqFxZkTklby2A13u4kd/qGQ==",
1684
+ "version": "16.4.0",
1685
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.4.0.tgz",
1686
+ "integrity": "sha512-rbkN9KVJZLHICrWV0V9RNw/MBeta+zDGOI0sYJYQC/Usp+JOII1UJJt4qNHp54ixjAP8yxIQOJMTfAyDqnJTBw==",
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.1",
9765
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.2.1.tgz",
9766
- "integrity": "sha512-5WQMbePZ1HWlyW4JzxHqHrz73+VkM0ehvvQFaKSh2If9zqDvoge4NXp2xFTTipdqqFxZkTklby2A13u4kd/qGQ==",
9764
+ "version": "16.4.0",
9765
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.4.0.tgz",
9766
+ "integrity": "sha512-rbkN9KVJZLHICrWV0V9RNw/MBeta+zDGOI0sYJYQC/Usp+JOII1UJJt4qNHp54ixjAP8yxIQOJMTfAyDqnJTBw==",
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.5.0",
7
+ "version": "24.7.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.1",
84
- "coach-core": "7.1.1",
83
+ "browsertime": "16.4.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",