lighthouse 10.2.0 → 10.3.0-dev.20230614

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/cli/test/smokehouse/__snapshots__/report-assert-test.js.snap +4 -6
  2. package/core/audits/accessibility/html-xml-lang-mismatch.d.ts +10 -0
  3. package/core/audits/accessibility/html-xml-lang-mismatch.js +47 -0
  4. package/core/audits/accessibility/input-button-name.d.ts +10 -0
  5. package/core/audits/accessibility/input-button-name.js +44 -0
  6. package/core/audits/accessibility/table-fake-caption.d.ts +10 -0
  7. package/core/audits/accessibility/table-fake-caption.js +47 -0
  8. package/core/audits/accessibility/td-has-header.d.ts +10 -0
  9. package/core/audits/accessibility/td-has-header.js +45 -0
  10. package/core/audits/audit.d.ts +2 -1
  11. package/core/audits/audit.js +5 -2
  12. package/core/audits/byte-efficiency/byte-efficiency-audit.d.ts +3 -3
  13. package/core/audits/byte-efficiency/byte-efficiency-audit.js +14 -19
  14. package/core/audits/deprecations.js +1 -1
  15. package/core/audits/largest-contentful-paint-element.d.ts +14 -2
  16. package/core/audits/largest-contentful-paint-element.js +49 -31
  17. package/core/audits/layout-shift-elements.d.ts +3 -2
  18. package/core/audits/layout-shift-elements.js +10 -2
  19. package/core/audits/metrics.js +0 -2
  20. package/core/audits/network-requests.js +6 -0
  21. package/core/audits/seo/crawlable-anchors.js +4 -0
  22. package/core/audits/server-response-time.d.ts +2 -1
  23. package/core/audits/server-response-time.js +17 -3
  24. package/core/audits/uses-rel-preconnect.js +20 -4
  25. package/core/computed/entity-classification.d.ts +14 -1
  26. package/core/computed/entity-classification.js +61 -6
  27. package/core/computed/metrics/cumulative-layout-shift.d.ts +2 -9
  28. package/core/computed/metrics/cumulative-layout-shift.js +3 -16
  29. package/core/computed/metrics/time-to-first-byte.js +10 -7
  30. package/core/computed/metrics/timing-summary.js +0 -3
  31. package/core/config/default-config.js +8 -0
  32. package/core/gather/driver/execution-context.js +13 -5
  33. package/core/gather/driver/target-manager.d.ts +13 -0
  34. package/core/gather/driver/target-manager.js +49 -0
  35. package/core/gather/gatherers/accessibility.js +19 -20
  36. package/core/gather/gatherers/anchor-elements.js +2 -0
  37. package/core/gather/gatherers/global-listeners.js +38 -21
  38. package/core/gather/gatherers/inspector-issues.js +2 -1
  39. package/core/gather/gatherers/trace-elements.d.ts +3 -2
  40. package/core/gather/gatherers/trace-elements.js +10 -19
  41. package/core/legacy/config/config.d.ts +1 -1
  42. package/core/legacy/config/config.js +1 -1
  43. package/core/legacy/gather/driver.d.ts +1 -0
  44. package/core/legacy/gather/driver.js +11 -0
  45. package/core/lib/asset-saver.d.ts +4 -0
  46. package/core/lib/asset-saver.js +19 -0
  47. package/core/lib/bf-cache-strings.d.ts +3 -0
  48. package/core/lib/bf-cache-strings.js +248 -232
  49. package/core/lib/cdt/generated/SourceMap.d.ts +18 -31
  50. package/core/lib/cdt/generated/SourceMap.js +51 -101
  51. package/core/lib/dependency-graph/simulator/network-analyzer.d.ts +6 -2
  52. package/core/lib/dependency-graph/simulator/network-analyzer.js +45 -13
  53. package/core/lib/deprecation-description.d.ts +17 -0
  54. package/core/lib/deprecation-description.js +71 -0
  55. package/core/lib/deprecations-strings.d.ts +282 -63
  56. package/core/lib/deprecations-strings.js +282 -551
  57. package/core/lib/lh-error.d.ts +9 -4
  58. package/core/lib/lh-error.js +15 -11
  59. package/core/lib/network-request.d.ts +13 -6
  60. package/core/lib/network-request.js +39 -14
  61. package/core/lib/stack-packs.js +4 -0
  62. package/core/lib/tracehouse/trace-processor.js +1 -1
  63. package/core/lib/url-utils.js +4 -0
  64. package/core/runner.js +4 -2
  65. package/dist/report/bundle.esm.js +24 -7
  66. package/dist/report/flow.js +3 -3
  67. package/dist/report/standalone.js +8 -8
  68. package/package.json +13 -13
  69. package/readme.md +7 -0
  70. package/report/assets/styles.css +18 -2
  71. package/report/assets/templates.html +4 -0
  72. package/report/renderer/category-renderer.js +5 -2
  73. package/report/renderer/components.js +2 -2
  74. package/report/renderer/dom.d.ts +4 -1
  75. package/report/renderer/dom.js +3 -2
  76. package/shared/localization/locales/ar-XB.json +20 -170
  77. package/shared/localization/locales/ar.json +20 -170
  78. package/shared/localization/locales/bg.json +19 -169
  79. package/shared/localization/locales/ca.json +19 -169
  80. package/shared/localization/locales/cs.json +19 -169
  81. package/shared/localization/locales/da.json +19 -169
  82. package/shared/localization/locales/de.json +19 -169
  83. package/shared/localization/locales/el.json +19 -169
  84. package/shared/localization/locales/en-GB.json +9 -159
  85. package/shared/localization/locales/en-US.json +166 -70
  86. package/shared/localization/locales/en-XA.json +20 -170
  87. package/shared/localization/locales/en-XL.json +166 -70
  88. package/shared/localization/locales/es-419.json +19 -169
  89. package/shared/localization/locales/es.json +19 -169
  90. package/shared/localization/locales/fi.json +19 -169
  91. package/shared/localization/locales/fil.json +17 -167
  92. package/shared/localization/locales/fr.json +18 -168
  93. package/shared/localization/locales/he.json +19 -169
  94. package/shared/localization/locales/hi.json +20 -170
  95. package/shared/localization/locales/hr.json +19 -169
  96. package/shared/localization/locales/hu.json +19 -169
  97. package/shared/localization/locales/id.json +19 -169
  98. package/shared/localization/locales/it.json +19 -169
  99. package/shared/localization/locales/ja.json +19 -169
  100. package/shared/localization/locales/ko.json +19 -169
  101. package/shared/localization/locales/lt.json +20 -170
  102. package/shared/localization/locales/lv.json +20 -170
  103. package/shared/localization/locales/nl.json +18 -168
  104. package/shared/localization/locales/no.json +19 -169
  105. package/shared/localization/locales/pl.json +19 -169
  106. package/shared/localization/locales/pt-PT.json +19 -169
  107. package/shared/localization/locales/pt.json +19 -169
  108. package/shared/localization/locales/ro.json +19 -169
  109. package/shared/localization/locales/ru.json +19 -169
  110. package/shared/localization/locales/sk.json +20 -170
  111. package/shared/localization/locales/sl.json +19 -169
  112. package/shared/localization/locales/sr-Latn.json +19 -169
  113. package/shared/localization/locales/sr.json +19 -169
  114. package/shared/localization/locales/sv.json +19 -169
  115. package/shared/localization/locales/ta.json +19 -169
  116. package/shared/localization/locales/te.json +19 -169
  117. package/shared/localization/locales/th.json +19 -169
  118. package/shared/localization/locales/tr.json +19 -169
  119. package/shared/localization/locales/uk.json +19 -169
  120. package/shared/localization/locales/vi.json +20 -170
  121. package/shared/localization/locales/zh-HK.json +19 -169
  122. package/shared/localization/locales/zh-TW.json +19 -169
  123. package/shared/localization/locales/zh.json +19 -169
  124. package/shared/util.d.ts +6 -0
  125. package/shared/util.js +14 -1
  126. package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +2 -1
  127. package/tsconfig-base.json +1 -1
  128. package/types/artifacts.d.ts +10 -8
  129. package/types/audit.d.ts +5 -0
  130. package/types/gatherer.d.ts +1 -0
  131. package/types/lhr/audit-details.d.ts +1 -0
  132. package/types/lhr/audit-result.d.ts +10 -0
  133. package/types/internal/es-main.d.ts +0 -18
@@ -993,13 +993,13 @@
993
993
  "message": "This is the largest contentful element painted within the viewport. [Learn more about the Largest Contentful Paint element](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)"
994
994
  },
995
995
  "core/audits/largest-contentful-paint-element.js | itemLoadDelay": {
996
- "message": "Load Delay"
996
+ "message": "Load delay"
997
997
  },
998
998
  "core/audits/largest-contentful-paint-element.js | itemLoadTime": {
999
- "message": "Load Time"
999
+ "message": "Load time"
1000
1000
  },
1001
1001
  "core/audits/largest-contentful-paint-element.js | itemRenderDelay": {
1002
- "message": "Render Delay"
1002
+ "message": "Render delay"
1003
1003
  },
1004
1004
  "core/audits/largest-contentful-paint-element.js | itemTTFB": {
1005
1005
  "message": "TTFB"
@@ -2138,156 +2138,6 @@
2138
2138
  "core/lib/csp-evaluator.js | unsafeInlineFallback": {
2139
2139
  "message": "Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers."
2140
2140
  },
2141
- "core/lib/deprecations-strings.js | authorizationCoveredByWildcard": {
2142
- "message": "Authorisation will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling."
2143
- },
2144
- "core/lib/deprecations-strings.js | canRequestURLHTTPContainingNewline": {
2145
- "message": "Resource requests whose URLs contained both removed whitespace `(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources."
2146
- },
2147
- "core/lib/deprecations-strings.js | chromeLoadTimesConnectionInfo": {
2148
- "message": "`chrome.loadTimes()` is deprecated. Instead, use standardised API: Navigation Timing 2."
2149
- },
2150
- "core/lib/deprecations-strings.js | chromeLoadTimesFirstPaintAfterLoadTime": {
2151
- "message": "`chrome.loadTimes()` is deprecated. Instead, use standardised API: Paint Timing."
2152
- },
2153
- "core/lib/deprecations-strings.js | chromeLoadTimesWasAlternateProtocolAvailable": {
2154
- "message": "`chrome.loadTimes()` is deprecated. Instead, use standardised API: `nextHopProtocol` in Navigation Timing 2."
2155
- },
2156
- "core/lib/deprecations-strings.js | cookieWithTruncatingChar": {
2157
- "message": "Cookies containing a `(0|r|n)` character will be rejected instead of truncated."
2158
- },
2159
- "core/lib/deprecations-strings.js | crossOriginAccessBasedOnDocumentDomain": {
2160
- "message": "Relaxing the same-origin policy by setting `document.domain` is deprecated and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`."
2161
- },
2162
- "core/lib/deprecations-strings.js | crossOriginWindowApi": {
2163
- "message": "Triggering {PH1} from cross-origin iframes has been deprecated and will be removed in the future."
2164
- },
2165
- "core/lib/deprecations-strings.js | cssSelectorInternalMediaControlsOverlayCastButton": {
2166
- "message": "The `disableRemotePlayback` attribute should be used in order to disable the default cast integration instead of using `-internal-media-controls-overlay-cast-button` selector."
2167
- },
2168
- "core/lib/deprecations-strings.js | deprecatedWithReplacement": {
2169
- "message": "{PH1} is deprecated. Please use {PH2} instead."
2170
- },
2171
- "core/lib/deprecations-strings.js | deprecationExample": {
2172
- "message": "This is an example of a translated deprecation issue message."
2173
- },
2174
- "core/lib/deprecations-strings.js | documentDomainSettingWithoutOriginAgentClusterHeader": {
2175
- "message": "Relaxing the same-origin policy by setting `document.domain` is deprecated and will be disabled by default. To continue using this feature, please opt out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details."
2176
- },
2177
- "core/lib/deprecations-strings.js | eventPath": {
2178
- "message": "`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead."
2179
- },
2180
- "core/lib/deprecations-strings.js | expectCTHeader": {
2181
- "message": "The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after 30 April 2018."
2182
- },
2183
- "core/lib/deprecations-strings.js | feature": {
2184
- "message": "Check the feature status page for more details."
2185
- },
2186
- "core/lib/deprecations-strings.js | geolocationInsecureOrigin": {
2187
- "message": "`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."
2188
- },
2189
- "core/lib/deprecations-strings.js | geolocationInsecureOriginDeprecatedNotRemoved": {
2190
- "message": "`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."
2191
- },
2192
- "core/lib/deprecations-strings.js | getUserMediaInsecureOrigin": {
2193
- "message": "`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."
2194
- },
2195
- "core/lib/deprecations-strings.js | hostCandidateAttributeGetter": {
2196
- "message": "`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead."
2197
- },
2198
- "core/lib/deprecations-strings.js | identityInCanMakePaymentEvent": {
2199
- "message": "The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`."
2200
- },
2201
- "core/lib/deprecations-strings.js | insecurePrivateNetworkSubresourceRequest": {
2202
- "message": "The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the Internet, increasing the risk of a cross-site request forgery (CSRF) attack and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts and will start blocking them."
2203
- },
2204
- "core/lib/deprecations-strings.js | localCSSFileExtensionRejected": {
2205
- "message": "CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension."
2206
- },
2207
- "core/lib/deprecations-strings.js | mediaSourceAbortRemove": {
2208
- "message": "Using `SourceBuffer.abort()` to abort `remove()`'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the `updateend` event instead. `abort()` is intended to only abort an asynchronous media append or reset parser state."
2209
- },
2210
- "core/lib/deprecations-strings.js | mediaSourceDurationTruncatingBuffered": {
2211
- "message": "Setting `MediaSource.duration` below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit `remove(newDuration, oldDuration)` on all `sourceBuffers`, where `newDuration < oldDuration`."
2212
- },
2213
- "core/lib/deprecations-strings.js | milestone": {
2214
- "message": "This change will go into effect with milestone {milestone}."
2215
- },
2216
- "core/lib/deprecations-strings.js | noSysexWebMIDIWithoutPermission": {
2217
- "message": "Web MIDI will ask permission to use even if the sysex is not specified in the `MIDIOptions`."
2218
- },
2219
- "core/lib/deprecations-strings.js | notificationInsecureOrigin": {
2220
- "message": "The notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."
2221
- },
2222
- "core/lib/deprecations-strings.js | notificationPermissionRequestedIframe": {
2223
- "message": "Permission for the notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead."
2224
- },
2225
- "core/lib/deprecations-strings.js | obsoleteWebRtcCipherSuite": {
2226
- "message": "Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed."
2227
- },
2228
- "core/lib/deprecations-strings.js | openWebDatabaseInsecureContext": {
2229
- "message": "WebSQL in non-secure contexts is deprecated and will be removed soon. Please use web storage or indexed database."
2230
- },
2231
- "core/lib/deprecations-strings.js | overflowVisibleOnReplacedElement": {
2232
- "message": "Specifying `overflow: visible` on img, video and canvas tags may cause them to produce visual content outside of the element bounds. See https://github.com/WICG/shared-element-transitions/blob/main/debugging_overflow_on_images.md."
2233
- },
2234
- "core/lib/deprecations-strings.js | paymentInstruments": {
2235
- "message": "`paymentManager.instruments` is deprecated. Please use just-in-time install for payment handlers instead."
2236
- },
2237
- "core/lib/deprecations-strings.js | paymentRequestCSPViolation": {
2238
- "message": "Your `PaymentRequest` call bypassed Content-Security-Policy (CSP) `connect-src` directive. This bypass is deprecated. Please add the payment method identifier from the `PaymentRequest` API (in `supportedMethods` field) to your CSP `connect-src` directive."
2239
- },
2240
- "core/lib/deprecations-strings.js | persistentQuotaType": {
2241
- "message": "`StorageType.persistent` is deprecated. Please use standardised `navigator.storage` instead."
2242
- },
2243
- "core/lib/deprecations-strings.js | pictureSourceSrc": {
2244
- "message": "`<source src>` with a `<picture>` parent is invalid and, therefore, ignored. Please use `<source srcset>` instead."
2245
- },
2246
- "core/lib/deprecations-strings.js | prefixedStorageInfo": {
2247
- "message": "`window.webkitStorageInfo` is deprecated. Please use standardised `navigator.storage` instead."
2248
- },
2249
- "core/lib/deprecations-strings.js | requestedSubresourceWithEmbeddedCredentials": {
2250
- "message": "Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked."
2251
- },
2252
- "core/lib/deprecations-strings.js | rtcConstraintEnableDtlsSrtpFalse": {
2253
- "message": "The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead."
2254
- },
2255
- "core/lib/deprecations-strings.js | rtcConstraintEnableDtlsSrtpTrue": {
2256
- "message": "The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness."
2257
- },
2258
- "core/lib/deprecations-strings.js | rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics": {
2259
- "message": "`Complex Plan B SDP` detected. This dialect of the `Session Description Protocol` is no longer supported. Please use `Unified Plan SDP` instead."
2260
- },
2261
- "core/lib/deprecations-strings.js | rtcPeerConnectionSdpSemanticsPlanB": {
2262
- "message": "`Plan B SDP semantics`, which is used when constructing an `RTCPeerConnection` with `{sdpSemantics:plan-b}`, is a legacy non-standard version of the `Session Description Protocol` that has been permanently deleted from the web platform. It is still available when building with `IS_FUCHSIA`, but we intend to delete it as soon as possible. Stop depending on it. See https://crbug.com/1302249 for status."
2263
- },
2264
- "core/lib/deprecations-strings.js | rtcpMuxPolicyNegotiate": {
2265
- "message": "The `rtcpMuxPolicy` option is deprecated and will be removed."
2266
- },
2267
- "core/lib/deprecations-strings.js | sharedArrayBufferConstructedWithoutIsolation": {
2268
- "message": "`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details."
2269
- },
2270
- "core/lib/deprecations-strings.js | textToSpeech_DisallowedByAutoplay": {
2271
- "message": "`speechSynthesis.speak()` without user activation is deprecated and will be removed."
2272
- },
2273
- "core/lib/deprecations-strings.js | title": {
2274
- "message": "Deprecated feature used"
2275
- },
2276
- "core/lib/deprecations-strings.js | v8SharedArrayBufferConstructedInExtensionWithoutIsolation": {
2277
- "message": "Extensions should opt in to cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/."
2278
- },
2279
- "core/lib/deprecations-strings.js | vendorSpecificApi": {
2280
- "message": "{PH1} is vendor-specific. Please use the standard {PH2} instead."
2281
- },
2282
- "core/lib/deprecations-strings.js | xhrJSONEncodingDetection": {
2283
- "message": "UTF-16 is not supported by response JSON in `XMLHttpRequest`"
2284
- },
2285
- "core/lib/deprecations-strings.js | xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload": {
2286
- "message": "Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects on the end user’s experience. For more help, check https://xhr.spec.whatwg.org/."
2287
- },
2288
- "core/lib/deprecations-strings.js | xrSupportsSession": {
2289
- "message": "`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved Boolean value instead."
2290
- },
2291
2141
  "core/lib/i18n/i18n.js | columnBlockingTime": {
2292
2142
  "message": "Main-thread blocking time"
2293
2143
  },
@@ -2760,10 +2610,10 @@
2760
2610
  "message": "Use [Ezoic Leap](https://pubdash.ezoic.com/speed) and enable `Resize Images` to resize images to a device-appropriate size, reducing network payload sizes."
2761
2611
  },
2762
2612
  "node_modules/lighthouse-stack-packs/packs/gatsby.js | modern-image-formats": {
2763
- "message": "Use the `gatsby-plugin-image` component instead of `<img>` to automatically optimize image format. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2613
+ "message": "Use the `gatsby-plugin-image` component instead of `<img>` to optimise the image format automatically. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2764
2614
  },
2765
2615
  "node_modules/lighthouse-stack-packs/packs/gatsby.js | offscreen-images": {
2766
- "message": "Use the `gatsby-plugin-image` component instead of `<img>` to automatically lazy-load images. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2616
+ "message": "Use the `gatsby-plugin-image` component instead of `<img>` to lazy-load images automatically. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2767
2617
  },
2768
2618
  "node_modules/lighthouse-stack-packs/packs/gatsby.js | prioritize-lcp-image": {
2769
2619
  "message": "Use the `gatsby-plugin-image` component and set the `loading` prop to `eager`. [Learn more](https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image#shared-props)."
@@ -2772,7 +2622,7 @@
2772
2622
  "message": "Use the `Gatsby Script API` to defer loading of non-critical third-party scripts. [Learn more](https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-script/)."
2773
2623
  },
2774
2624
  "node_modules/lighthouse-stack-packs/packs/gatsby.js | unused-css-rules": {
2775
- "message": "Use the `PurgeCSS` `Gatsby` plugin to remove unused rules from stylesheets. [Learn more](https://purgecss.com/plugins/gatsby.html)."
2625
+ "message": "Use the `PurgeCSS` `Gatsby` plug-in to remove unused rules from stylesheets. [Learn more](https://purgecss.com/plugins/gatsby.html)."
2776
2626
  },
2777
2627
  "node_modules/lighthouse-stack-packs/packs/gatsby.js | unused-javascript": {
2778
2628
  "message": "Use `Webpack Bundle Analyzer` to detect unused JavaScript code. [Learn more](https://www.gatsbyjs.com/plugins/gatsby-plugin-webpack-bundle-analyser-v2/)"
@@ -2784,7 +2634,7 @@
2784
2634
  "message": "Use the `gatsby-plugin-image` component instead of `<img>` to adjust image quality. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2785
2635
  },
2786
2636
  "node_modules/lighthouse-stack-packs/packs/gatsby.js | uses-responsive-images": {
2787
- "message": "Use the `gatsby-plugin-image` component to set appropriate `sizes`. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2637
+ "message": "Use the `gatsby-plugin-image` component to set the appropriate `sizes`. [Learn more](https://www.gatsbyjs.com/docs/how-to/images-and-media/using-gatsby-plugin-image)."
2788
2638
  },
2789
2639
  "node_modules/lighthouse-stack-packs/packs/joomla.js | efficient-animated-content": {
2790
2640
  "message": "Consider uploading your GIF to a service that will make it available to embed as an HTML5 video."
@@ -2865,10 +2715,10 @@
2865
2715
  "message": "`<link rel=preload>` tags can be added by [modifying a themes's layout](https://devdocs.magento.com/guides/v2.3/frontend-dev-guide/layouts/xml-manage.html)."
2866
2716
  },
2867
2717
  "node_modules/lighthouse-stack-packs/packs/next.js | modern-image-formats": {
2868
- "message": "Use the `next/image` component instead of `<img>` to automatically optimize image format. [Learn more](https://nextjs.org/docs/basic-features/image-optimization)."
2718
+ "message": "Use the `next/image` component instead of `<img>` to optimise the image format automatically. [Learn more](https://nextjs.org/docs/basic-features/image-optimization)."
2869
2719
  },
2870
2720
  "node_modules/lighthouse-stack-packs/packs/next.js | offscreen-images": {
2871
- "message": "Use the `next/image` component instead of `<img>` to automatically lazy-load images. [Learn more](https://nextjs.org/docs/basic-features/image-optimization)."
2721
+ "message": "Use the `next/image` component instead of `<img>` to lazy-load images automatically. [Learn more](https://nextjs.org/docs/basic-features/image-optimization)."
2872
2722
  },
2873
2723
  "node_modules/lighthouse-stack-packs/packs/next.js | prioritize-lcp-image": {
2874
2724
  "message": "Use the `next/image` component and set 'priority' to true to preload an LCP image. [Learn more](https://nextjs.org/docs/api-reference/next/image#priority)."