lighthouse 9.6.1 → 9.6.4
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 +56 -0
- package/dist/report/bundle.esm.js +45 -19
- package/dist/report/flow.js +1 -1
- package/dist/report/standalone.js +1 -1
- package/lighthouse-core/audits/network-requests.js +79 -62
- package/lighthouse-core/audits/preload-lcp-image.js +33 -7
- package/lighthouse-core/gather/driver.js +21 -14
- package/lighthouse-core/lib/dependency-graph/network-node.js +1 -1
- package/lighthouse-core/util-commonjs.js +20 -18
- package/package.json +2 -2
- package/report/renderer/util.js +20 -18
- package/shared/localization/locales/en-US.json +2 -2
- package/shared/localization/locales/en-XL.json +2 -2
package/changelog.md
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
|
+
<a name="9.6.4"></a>
|
|
2
|
+
# 9.6.4 (2022-07-26)
|
|
3
|
+
[Full Changelog](https://github.com/compare/v9.6.3...v9.6.4)
|
|
4
|
+
|
|
5
|
+
We expect this release to ship in the DevTools of [Chrome 106](https://chromiumdash.appspot.com/schedule), and to PageSpeed Insights within 2 weeks.
|
|
6
|
+
|
|
7
|
+
## Deps
|
|
8
|
+
|
|
9
|
+
* lighthouse-stack-packs: upgrade to 1.8.2 ([#14218](https://github.com/GoogleChrome/lighthouse/pull/14218))
|
|
10
|
+
|
|
11
|
+
## Clients
|
|
12
|
+
|
|
13
|
+
* lr: expose listenForStatus ([#14024](https://github.com/GoogleChrome/lighthouse/pull/14024))
|
|
14
|
+
|
|
15
|
+
## Misc
|
|
16
|
+
|
|
17
|
+
* misc: keep scripts package.json in npm ([#14239](https://github.com/GoogleChrome/lighthouse/pull/14239))
|
|
18
|
+
|
|
19
|
+
<a name="9.6.3"></a>
|
|
20
|
+
# 9.6.3 (2022-06-28)
|
|
21
|
+
[Full Changelog](https://github.com/compare/v9.6.2...v9.6.3)
|
|
22
|
+
|
|
23
|
+
This is an npm-only release and affects only the raw JSON report. We have no plans to release this specific version to DevTools or PSI, but the changes will be rolled up into the next release in those clients.
|
|
24
|
+
|
|
25
|
+
## Core
|
|
26
|
+
|
|
27
|
+
* network-requests: add frame and preload debug data ([#14161](https://github.com/GoogleChrome/lighthouse/pull/14161))
|
|
28
|
+
* preload-lcp-image: enrich debugData ([#14155](https://github.com/GoogleChrome/lighthouse/pull/14155))
|
|
29
|
+
|
|
30
|
+
<a name="9.6.2"></a>
|
|
31
|
+
# 9.6.2 (2022-06-01)
|
|
32
|
+
[Full Changelog](https://github.com/compare/v9.6.1...v9.6.2)
|
|
33
|
+
|
|
34
|
+
We expect this release to ship in the DevTools of [Chrome 104](https://chromiumdash.appspot.com/schedule), and to PageSpeed Insights within 2 weeks.
|
|
35
|
+
|
|
36
|
+
## Core
|
|
37
|
+
|
|
38
|
+
* driver: fix legacy runner hanging oopifs in some cases ([#14074](https://github.com/GoogleChrome/lighthouse/pull/14074))
|
|
39
|
+
|
|
40
|
+
## Report
|
|
41
|
+
|
|
42
|
+
* avoid really slow regexes for data urls ([#13791](https://github.com/GoogleChrome/lighthouse/pull/13791))
|
|
43
|
+
|
|
44
|
+
## Clients
|
|
45
|
+
|
|
46
|
+
* psi: expose the swapLocale types ([#14062](https://github.com/GoogleChrome/lighthouse/pull/14062))
|
|
47
|
+
|
|
48
|
+
## Tests
|
|
49
|
+
|
|
50
|
+
* smoke: fix ToT node id failures ([#14077](https://github.com/GoogleChrome/lighthouse/pull/14077))
|
|
51
|
+
* devtools: sync web tests ([#14061](https://github.com/GoogleChrome/lighthouse/pull/14061))
|
|
52
|
+
|
|
53
|
+
## Misc
|
|
54
|
+
|
|
55
|
+
* build: fix lightrider report generator bundle ([#14031](https://github.com/GoogleChrome/lighthouse/pull/14031))
|
|
56
|
+
|
|
1
57
|
<a name="9.6.1"></a>
|
|
2
58
|
# 9.6.1 (2022-05-11)
|
|
3
59
|
[Full Changelog](https://github.com/compare/v9.6.0...v9.6.1)
|
|
@@ -314,24 +314,26 @@ class Util {
|
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
const MAX_LENGTH = 64;
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
317
|
+
if (parsedUrl.protocol !== 'data:') {
|
|
318
|
+
// Always elide hexadecimal hash
|
|
319
|
+
name = name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, `$1${ELLIPSIS}`);
|
|
320
|
+
// Also elide other hash-like mixed-case strings
|
|
321
|
+
name = name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,
|
|
322
|
+
`$1${ELLIPSIS}`);
|
|
323
|
+
// Also elide long number sequences
|
|
324
|
+
name = name.replace(/(\d{3})\d{6,}/g, `$1${ELLIPSIS}`);
|
|
325
|
+
// Merge any adjacent ellipses
|
|
326
|
+
name = name.replace(/\u2026+/g, ELLIPSIS);
|
|
327
|
+
|
|
328
|
+
// Elide query params first
|
|
329
|
+
if (name.length > MAX_LENGTH && name.includes('?')) {
|
|
330
|
+
// Try to leave the first query parameter intact
|
|
331
|
+
name = name.replace(/\?([^=]*)(=)?.*/, `?$1$2${ELLIPSIS}`);
|
|
332
|
+
|
|
333
|
+
// Remove it all if it's still too long
|
|
334
|
+
if (name.length > MAX_LENGTH) {
|
|
335
|
+
name = name.replace(/\?.*/, `?${ELLIPSIS}`);
|
|
336
|
+
}
|
|
335
337
|
}
|
|
336
338
|
}
|
|
337
339
|
|
|
@@ -5702,6 +5704,30 @@ function renderReport(lhr, opts = {}) {
|
|
|
5702
5704
|
return rootEl;
|
|
5703
5705
|
}
|
|
5704
5706
|
|
|
5705
|
-
|
|
5707
|
+
/**
|
|
5708
|
+
* Returns a new LHR with all strings changed to the new requestedLocale.
|
|
5709
|
+
* @param {LH.Result} lhr
|
|
5710
|
+
* @param {LH.Locale} requestedLocale
|
|
5711
|
+
* @return {{lhr: LH.Result, missingIcuMessageIds: string[]}}
|
|
5712
|
+
*/
|
|
5713
|
+
function swapLocale(lhr, requestedLocale) {
|
|
5714
|
+
// Stub function only included for types
|
|
5715
|
+
return {
|
|
5716
|
+
lhr,
|
|
5717
|
+
missingIcuMessageIds: [],
|
|
5718
|
+
};
|
|
5719
|
+
}
|
|
5720
|
+
|
|
5721
|
+
/**
|
|
5722
|
+
* Populate the i18n string lookup dict with locale data
|
|
5723
|
+
* Used when the host environment selects the locale and serves lighthouse the intended locale file
|
|
5724
|
+
* @see https://docs.google.com/document/d/1jnt3BqKB-4q3AE94UWFA0Gqspx8Sd_jivlB7gQMlmfk/edit
|
|
5725
|
+
* @param {LH.Locale} locale
|
|
5726
|
+
* @param {Record<string, {message: string}>} lhlMessages
|
|
5727
|
+
*/
|
|
5728
|
+
function registerLocaleData(locale, lhlMessages) {
|
|
5729
|
+
// Stub function only included for types
|
|
5730
|
+
}
|
|
5731
|
+
const format = {registerLocaleData};
|
|
5706
5732
|
|
|
5707
5733
|
export { DOM, ReportRenderer, ReportUIFeatures, format, renderReport, swapLocale };
|
package/dist/report/flow.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
15
|
* See the License for the specific language governing permissions and
|
|
16
16
|
* limitations under the License.
|
|
17
|
-
*/const oe="…",re="data:image/jpeg;base64,",se={label:"pass",minScore:.9},le={label:"average",minScore:.5},pe={label:"fail"},ue={label:"error"},ce=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"];class de{static i18n=null;static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return"%10d ms"}static prepareReportResult(e){const a=JSON.parse(JSON.stringify(e));a.configSettings.locale||(a.configSettings.locale="en"),a.configSettings.formFactor||(a.configSettings.formFactor=a.configSettings.emulatedFormFactor);for(const e of Object.values(a.audits))if("not_applicable"!==e.scoreDisplayMode&&"not-applicable"!==e.scoreDisplayMode||(e.scoreDisplayMode="notApplicable"),e.details&&(void 0!==e.details.type&&"diagnostic"!==e.details.type||(e.details.type="debugdata"),"filmstrip"===e.details.type))for(const a of e.details.items)a.data.startsWith(re)||(a.data=re+a.data);if("object"!=typeof a.categories)throw new Error("No categories provided.");const n=new Map,[t]=a.lighthouseVersion.split(".").map(Number),i=a.categories.performance;if(t<9&&i){a.categoryGroups||(a.categoryGroups={}),a.categoryGroups.hidden={title:""};for(const e of i.auditRefs)e.group?["load-opportunities","diagnostics"].includes(e.group)&&delete e.group:e.group="hidden"}for(const e of Object.values(a.categories))e.auditRefs.forEach((e=>{e.relevantAudits&&e.relevantAudits.forEach((a=>{const t=n.get(a)||[];t.push(e),n.set(a,t)}))})),e.auditRefs.forEach((e=>{const t=a.audits[e.id];e.result=t,n.has(e.id)&&(e.relevantMetrics=n.get(e.id)),a.stackPacks&&a.stackPacks.forEach((a=>{a.descriptions[e.id]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:a.title,iconDataURL:a.iconDataURL,description:a.descriptions[e.id]}))}))}));return a}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=se.minScore}}static calculateRating(e,a){if("manual"===a||"notApplicable"===a)return se.label;if("error"===a)return ue.label;if(null===e)return pe.label;let n=pe.label;return e>=se.minScore?n=se.label:e>=le.minScore&&(n=le.label),n}static splitMarkdownCodeSpans(e){const a=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){const t=n[e];if(!t)continue;const i=e%2!=0;a.push({isCode:i,text:t})}return a}static splitMarkdownLink(e){const a=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){const[e,t,i]=n.splice(0,3);e&&a.push({isLink:!1,text:e}),t&&i&&a.push({isLink:!0,text:t,linkHref:i})}return a}static getURLDisplayName(e,a){const n=void 0!==(a=a||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?a.numPathParts:2,t=void 0===a.preserveQuery||a.preserveQuery,i=a.preserveHost||!1;let o;if("about:"===e.protocol||"data:"===e.protocol)o=e.href;else{o=e.pathname;const a=o.split("/").filter((e=>e.length));n&&a.length>n&&(o=oe+a.slice(-1*n).join("/")),i&&(o=`${e.host}/${o.replace(/^\//,"")}`),t&&(o=`${o}${e.search}`)}if(o=o.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,"$1…"),o=o.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,"$1…"),o=o.replace(/(\d{3})\d{6,}/g,"$1…"),o=o.replace(/\u2026+/g,oe),o.length>64&&o.includes("?")&&(o=o.replace(/\?([^=]*)(=)?.*/,"?$1$2…"),o.length>64&&(o=o.replace(/\?.*/,"?…"))),o.length>64){const e=o.lastIndexOf(".");o=e>=0?o.slice(0,63-(o.length-e))+`…${o.slice(e)}`:o.slice(0,63)+oe}return o}static parseURL(e){const a=new URL(e);return{file:de.getURLDisplayName(a),hostname:a.hostname,origin:a.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){const a=e.split(".").slice(-2);return ce.includes(a[0])?`.${a.join(".")}`:`.${a[a.length-1]}`}static getRootDomain(e){const a=de.createOrReturnURL(e).hostname,n=de.getTld(a).split(".");return a.split(".").slice(-n.length).join(".")}static getEmulationDescriptions(e){let a,n,t;const i=e.throttling;switch(e.throttlingMethod){case"provided":t=n=a=de.i18n.strings.throttlingProvided;break;case"devtools":{const{cpuSlowdownMultiplier:e,requestLatencyMs:o}=i;a=`${de.i18n.formatNumber(e)}x slowdown (DevTools)`,n=`${de.i18n.formatNumber(o)} ms HTTP RTT, ${de.i18n.formatNumber(i.downloadThroughputKbps)} Kbps down, ${de.i18n.formatNumber(i.uploadThroughputKbps)} Kbps up (DevTools)`;t=(()=>562.5===o&&i.downloadThroughputKbps===1638.4*.9&&675===i.uploadThroughputKbps)()?de.i18n.strings.runtimeSlow4g:de.i18n.strings.runtimeCustom;break}case"simulate":{const{cpuSlowdownMultiplier:e,rttMs:o,throughputKbps:r}=i;a=`${de.i18n.formatNumber(e)}x slowdown (Simulated)`,n=`${de.i18n.formatNumber(o)} ms TCP RTT, ${de.i18n.formatNumber(r)} Kbps throughput (Simulated)`;t=(()=>150===o&&1638.4===r)()?de.i18n.strings.runtimeSlow4g:de.i18n.strings.runtimeCustom;break}default:t=a=n=de.i18n.strings.runtimeUnknown}return{deviceEmulation:{mobile:de.i18n.strings.runtimeMobileEmulation,desktop:de.i18n.strings.runtimeDesktopEmulation}[e.formFactor]||de.i18n.strings.runtimeNoEmulation,cpuThrottling:a,networkThrottling:n,summary:t}}static filterRelevantLines(e,a,n){if(0===a.length)return e.slice(0,2*n+1);const t=new Set;return(a=a.sort(((e,a)=>(e.lineNumber||0)-(a.lineNumber||0)))).forEach((({lineNumber:e})=>{let a=e-n,i=e+n;for(;a<1;)a++,i++;t.has(a-3-1)&&(a-=3);for(let e=a;e<=i;e++){const a=e;t.add(a)}})),e.filter((e=>t.has(e.lineNumber)))}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return"timespan"===e||"snapshot"===e}static calculateCategoryFraction(e){let a=0,n=0,t=0,i=0;for(const o of e.auditRefs){const e=de.showAsPassed(o.result);"hidden"!==o.group&&"manual"!==o.result.scoreDisplayMode&&"notApplicable"!==o.result.scoreDisplayMode&&("informative"!==o.result.scoreDisplayMode?(++a,i+=o.weight,e&&n++):e||++t)}return{numPassed:n,numPassableAudits:a,numInformative:t,totalWeight:i}}}de.reportJson=null,de.getUniqueSuffix=(()=>{let e=0;return function(){return e++}})();de.UIStrings={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",viewOriginalTraceLabel:"View Original Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G4",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling"};const me=()=>D("svg",{width:"14",viewBox:"0 0 18 16",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M0 2C0 1.17 0.67 0.5 1.5 0.5C2.33 0.5 3 1.17 3 2C3 2.83 2.33 3.5 1.5 3.5C0.67 3.5 0 2.83 0 2ZM0 8C0 7.17 0.67 6.5 1.5 6.5C2.33 6.5 3 7.17 3 8C3 8.83 2.33 9.5 1.5 9.5C0.67 9.5 0 8.83 0 8ZM1.5 12.5C0.67 12.5 0 13.18 0 14C0 14.82 0.68 15.5 1.5 15.5C2.32 15.5 3 14.82 3 14C3 13.18 2.33 12.5 1.5 12.5ZM18 15H5V13H18V15ZM5 9H18V7H5V9ZM5 3V1H18V3H5Z",fill:"currentColor"},void 0)},void 0),he=()=>D("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a navigation report",children:D("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"},void 0)},void 0),ge=()=>D("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a timespan report",children:[D("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"},void 0),D("path",{d:"m 8,4 v 4 l 4,1.9999998",stroke:"currentColor","stroke-width":"1.5"},void 0)]},void 0),ve=()=>D("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a snapshot report",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M 12.2038,12.2812 C 11.1212,13.3443 9.6372,14 8,14 7.81038,14 7.62281,13.9912 7.43768,13.974 L 10.3094,9 Z M 12.8925,11.4741 10.0207,6.5 H 13.811 C 13.9344,6.97943 14,7.48205 14,8 c 0,1.2947 -0.4101,2.4937 -1.1075,3.4741 z M 13.456,5.5 H 7.71135 L 9.6065,2.21749 C 11.3203,2.69259 12.7258,3.90911 13.456,5.5 Z M 8.5624,2.02601 C 8.3772,2.0088 8.1896,2 8,2 6.36282,2 4.8788,2.65572 3.79622,3.71885 L 5.69061,7.00002 Z M 3.10749,4.52594 C 2.4101,5.5063 2,6.70526 2,8 2,8.5179 2.06563,9.0206 2.18903,9.5 H 5.97927 Z M 2.54404,10.5 c 0.73017,1.5909 2.1357,2.8074 3.84949,3.2825 L 8.2887,10.5 Z M 16,8 c 0,4.4183 -3.5817,8 -8,8 C 3.58172,16 0,12.4183 0,8 0,3.58172 3.58172,0 8,0 c 4.4183,0 8,3.58172 8,8 z",fill:"currentColor"},void 0)},void 0),fe=()=>D("svg",{xmlns:"http://www.w3.org/2000/svg",height:"24px",viewBox:"0 0 24 24",width:"24px",fill:"currentColor",role:"img","aria-label":"Icon representing a close action",children:[D("path",{d:"M0 0h24v24H0V0z",fill:"none"},void 0),D("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"},void 0)]},void 0),be=()=>D("svg",{width:"15",height:"12",viewBox:"0 0 15 12",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.33317 2.00008H13.9998V0.666748H3.33317C2.59984 0.666748 1.99984 1.26675 1.99984 2.00008V9.33341H0.666504V11.3334H7.99984V9.33341H3.33317V2.00008ZM13.9998 3.33341H9.99984C9.63317 3.33341 9.33317 3.63341 9.33317 4.00008V10.6667C9.33317 11.0334 9.63317 11.3334 9.99984 11.3334H13.9998C14.3665 11.3334 14.6665 11.0334 14.6665 10.6667V4.00008C14.6665 3.63341 14.3665 3.33341 13.9998 3.33341ZM10.6665 9.33341H13.3332V4.66675H10.6665V9.33341Z",fill:"currentColor"},void 0)},void 0),ye=()=>D("svg",{width:"16",height:"11",viewBox:"0 0 16 11",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M0.666687 3.26663L2.00002 4.59997C3.92002 2.67997 6.52669 1.87997 9.02002 2.18663L9.81335 0.399966C6.59335 -0.173367 3.16002 0.779966 0.666687 3.26663ZM10.6 0.599966C10.4867 0.599966 10.3867 0.659966 10.3267 0.753299L10.28 0.853299L6.82669 8.61996C6.72002 8.8133 6.65335 9.02663 6.65335 9.25996C6.65335 9.99996 7.25335 10.6 7.99335 10.6C8.63335 10.6 9.17335 10.1466 9.30002 9.53996L9.30669 9.51997L10.9334 0.933299C10.9334 0.746633 10.7867 0.599966 10.6 0.599966ZM15.3334 3.26663L14 4.59997C13.1867 3.78663 12.2534 3.17997 11.2534 2.76663L11.6067 0.886633C12.9667 1.38663 14.24 2.1733 15.3334 3.26663ZM11.3334 7.26663L12.6667 5.9333C12.1334 5.39997 11.5334 4.98663 10.8934 4.6733L10.5267 6.61997C10.8067 6.79997 11.08 7.0133 11.3334 7.26663ZM4.66669 7.26663L3.33335 5.9333C4.67335 4.5933 6.45335 3.95997 8.20669 4.0133L7.35335 5.9333C6.37335 6.0733 5.42002 6.5133 4.66669 7.26663Z",fill:"currentColor"},void 0)},void 0),_e=()=>D("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M15.5 7.16667V5.5H13.8333V3.83333C13.8333 2.91667 13.0833 2.16667 12.1667 2.16667H10.5V0.5H8.83333V2.16667H7.16667V0.5H5.5V2.16667H3.83333C2.91667 2.16667 2.16667 2.91667 2.16667 3.83333V5.5H0.5V7.16667H2.16667V8.83333H0.5V10.5H2.16667V12.1667C2.16667 13.0833 2.91667 13.8333 3.83333 13.8333H5.5V15.5H7.16667V13.8333H8.83333V15.5H10.5V13.8333H12.1667C13.0833 13.8333 13.8333 13.0833 13.8333 12.1667V10.5H15.5V8.83333H13.8333V7.16667H15.5ZM10.5 5.5H5.5V10.5H10.5V5.5ZM3.83333 12.1667H12.1667V3.83333H3.83333V12.1667Z",fill:"currentColor"},void 0)},void 0),Ce=()=>D("svg",{viewBox:"0 0 18 12",width:"18",height:"12",role:"img",children:[D("rect",{width:"18",height:"2",fill:"currentColor"},void 0),D("rect",{y:"5",width:"18",height:"2",fill:"currentColor"},void 0),D("rect",{y:"10",width:"18",height:"2",fill:"currentColor"},void 0)]},void 0),we=()=>D("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M13 7C13 10.3137 10.3137 13 7 13C3.68629 13 1 10.3137 1 7C1 3.68629 3.68629 1 7 1C10.3137 1 13 3.68629 13 7ZM14 7C14 10.866 10.866 14 7 14C3.13401 14 0 10.866 0 7C0 3.13401 3.13401 0 7 0C10.866 0 14 3.13401 14 7ZM7.66658 11H6.33325V9.66667H7.66658V11ZM4.33325 5.66667C4.33325 4.19333 5.52659 3 6.99992 3C8.47325 3 9.66658 4.19333 9.66658 5.66667C9.66658 6.52194 9.1399 6.98221 8.62709 7.43036C8.1406 7.85551 7.66658 8.26975 7.66658 9H6.33325C6.33325 7.78582 6.96133 7.30439 7.51355 6.88112C7.94674 6.54907 8.33325 6.25281 8.33325 5.66667C8.33325 4.93333 7.73325 4.33333 6.99992 4.33333C6.26658 4.33333 5.66658 4.93333 5.66658 5.66667H4.33325Z",fill:"currentColor"},void 0)},void 0),ke=T(void 0),Ae=T({});function Se(e){return new URLSearchParams(location.hash.replace("#","?")).get(e)}function Pe(...e){const a=[];for(const n of e){if(!n)continue;if("string"==typeof n){a.push(n);continue}const e=Object.entries(n).filter((([e,a])=>a)).map((([e])=>e));a.push(...e)}return a.join(" ")}function Ue(e,a){switch(e){case"navigation":return a.navigationDescription;case"timespan":return a.timespanDescription;case"snapshot":return a.snapshotDescription}}function xe(){const e=X(ke);if(!e)throw Error("useFlowResult must be called in the FlowResultContext");return e}function Le(){const e=xe(),[a,n]=function(...e){const[a,n]=J(e.map(Se));return q((()=>{function t(){const t=e.map(Se);t.every(((e,n)=>e===a[n]))||n(t)}return window.addEventListener("hashchange",t),()=>window.removeEventListener("hashchange",t)}),[a]),a}("index","anchor");return Y((()=>{if(!a)return null;const t=Number(a);if(!Number.isFinite(t))return console.warn(`Invalid hash index: ${a}`),null;const i=e.steps[t];return i?{currentLhr:i.lhr,index:t,anchor:n}:(console.warn(`No flow step at index ${t}`),null)}),[a,e,n])}function ze(e,a){const n=Z(null);return K((()=>{if(!n.current)return;const a=e();return n.current.appendChild(a),()=>{n.current?.contains(a)&&n.current.removeChild(a)}}),a),n}const Ie=()=>D("div",{className:"Separator",role:"separator"},void 0),Ne=({mode:e})=>D(h,{children:["navigation"===e&&D(he,{},void 0),"timespan"===e&&D(ge,{},void 0),"snapshot"===e&&D(ve,{},void 0)]},void 0),Te=({mode:e})=>D("div",{className:"FlowSegment",children:[D("div",{className:"FlowSegment__top-line"},void 0),e&&D(Ne,{mode:e},void 0),D("div",{className:"FlowSegment__bottom-line"},void 0)]},void 0),Re=({frames:e,width:a,height:n})=>{const[t,i]=J(0),o=t%e.length;return q((()=>{const a=setInterval((()=>i((a=>(a+1)%e.length))),500);return()=>clearInterval(a)}),[e.length]),D("img",{className:"FlowStepThumbnail","data-testid":"FlowStepAnimatedThumbnail",src:e[o].data,style:{width:a,height:n},alt:"Animated screenshots of a page tested by Lighthouse"},void 0)},De=({lhr:e,width:a,height:n})=>{const t=function(e){const a=e.audits["full-page-screenshot"];return a?.details&&"full-page-screenshot"===a.details.type&&a.details||null}(e),i=function(e){const a=e.audits["screenshot-thumbnails"];if(!a)return;return a.details&&"filmstrip"===a.details.type&&a.details.items||void 0}(e),o=function(e){const{width:a,height:n}=e.configSettings.screenEmulation;return{width:a,height:n}}(e);if(a&&void 0===n?n=o.height*a/o.width:n&&void 0===a&&(a=o.width*n/o.height),!a||!n)return console.warn(new Error("FlowStepThumbnail requested without any dimensions").stack),D(h,{},void 0);let r;if(i?.length){if(r=i[i.length-1].data,"timespan"===e.gatherMode)return D(Re,{frames:i,width:a,height:n},void 0)}else r=t?.screenshot.data;return D(h,{children:r&&D("img",{className:"FlowStepThumbnail",src:r,style:{width:a,height:n},alt:"Screenshot of a page tested by Lighthouse"},void 0)},void 0)};function Ee(e){if(e.__esModule)return e;var a=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(a,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})})),a}var je,Me=function(){function e(a,n,t,i){this.message=a,this.expected=n,this.found=t,this.location=i,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,e)}return function(e,a){function n(){this.constructor=e}n.prototype=a.prototype,e.prototype=new n}(e,Error),e.buildMessage=function(e,a){var n={literal:function(e){return'"'+i(e.text)+'"'},class:function(e){var a,n="";for(a=0;a<e.parts.length;a++)n+=e.parts[a]instanceof Array?o(e.parts[a][0])+"-"+o(e.parts[a][1]):o(e.parts[a]);return"["+(e.inverted?"^":"")+n+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function t(e){return e.charCodeAt(0).toString(16).toUpperCase()}function i(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+t(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+t(e)}))}function o(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+t(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+t(e)}))}return"Expected "+function(e){var a,t,i,o=new Array(e.length);for(a=0;a<e.length;a++)o[a]=(i=e[a],n[i.type](i));if(o.sort(),o.length>0){for(a=1,t=1;a<o.length;a++)o[a-1]!==o[a]&&(o[t]=o[a],t++);o.length=t}switch(o.length){case 1:return o[0];case 2:return o[0]+" or "+o[1];default:return o.slice(0,-1).join(", ")+", or "+o[o.length-1]}}(e)+" but "+function(e){return e?'"'+i(e)+'"':"end of input"}(a)+" found."},{SyntaxError:e,parse:function(a,n){n=void 0!==n?n:{};var t,i={},o={start:pe},r=pe,s=function(e){return e.join("")},l=te("{",!1),p=",",u=te(",",!1),c=te("}",!1),d="number",m=te("number",!1),h="date",g=te("date",!1),v="time",f=te("time",!1),b="plural",y=te("plural",!1),_="selectordinal",C=te("selectordinal",!1),w="select",k=te("select",!1),A=te("=",!1),S="offset:",P=te("offset:",!1),U=oe("whitespace"),x=/^[ \t\n\r]/,L=ie([" ","\t","\n","\r"],!1,!1),z=oe("optionalWhitespace"),I=/^[0-9]/,N=ie([["0","9"]],!1,!1),T=/^[0-9a-f]/i,R=ie([["0","9"],["a","f"]],!1,!0),D=te("0",!1),E=/^[1-9]/,j=ie([["1","9"]],!1,!1),M="'",F=te("'",!1),B=/^[ \t\n\r,.+={}#]/,O=ie([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),H={type:"any"},W=/^[^{}\\\0-\x1F\x7F \t\n\r]/,V=ie(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),G=te("\\\\",!1),$=te("\\#",!1),J=te("\\{",!1),q=te("\\}",!1),K=te("\\u",!1),Z=0,Y=0,X=[{line:1,column:1}],Q=0,ee=[],ae=0;if("startRule"in n){if(!(n.startRule in o))throw new Error("Can't start parsing from rule \""+n.startRule+'".');r=o[n.startRule]}function ne(){return se(Y,Z)}function te(e,a){return{type:"literal",text:e,ignoreCase:a}}function ie(e,a,n){return{type:"class",parts:e,inverted:a,ignoreCase:n}}function oe(e){return{type:"other",description:e}}function re(e){var n,t=X[e];if(t)return t;for(n=e-1;!X[n];)n--;for(t={line:(t=X[n]).line,column:t.column};n<e;)10===a.charCodeAt(n)?(t.line++,t.column=1):t.column++,n++;return X[e]=t,t}function se(e,a){var n=re(e),t=re(a);return{start:{offset:e,line:n.line,column:n.column},end:{offset:a,line:t.line,column:t.column}}}function le(e){Z<Q||(Z>Q&&(Q=Z,ee=[]),ee.push(e))}function pe(){return ue()}function ue(){var e,a,n;for(e=Z,a=[],n=ce();n!==i;)a.push(n),n=ce();return a!==i&&(Y=e,a={type:"messageFormatPattern",elements:a,location:ne()}),e=a}function ce(){var e;return(e=function(){var e,n;e=Z,(n=function(){var e,n,t,o,r,s;e=Z,n=[],t=Z,(o=ge())!==i&&(r=we())!==i&&(s=ge())!==i?t=o=[o,r,s]:(Z=t,t=i);if(t!==i)for(;t!==i;)n.push(t),t=Z,(o=ge())!==i&&(r=we())!==i&&(s=ge())!==i?t=o=[o,r,s]:(Z=t,t=i);else n=i;n!==i&&(Y=e,n=n.reduce((function(e,a){return e.concat(a)}),[]).join(""));(e=n)===i&&(e=Z,e=(n=he())!==i?a.substring(e,Z):n);return e}())!==i&&(Y=e,n={type:"messageTextElement",value:n,location:ne()});return e=n}())===i&&(e=function(){var e,n,t,o,r,A,S;e=Z,123===a.charCodeAt(Z)?(n="{",Z++):(n=i,0===ae&&le(l));n!==i&&ge()!==i&&(t=function(){var e,a,n;if((e=be())===i){for(e=Z,a=[],n=ye();n!==i;)a.push(n),n=ye();a!==i&&(Y=e,a=s(a)),e=a}return e}())!==i&&ge()!==i?(o=Z,44===a.charCodeAt(Z)?(r=p,Z++):(r=i,0===ae&&le(u)),r!==i&&(A=ge())!==i&&(S=function(){var e;(e=function(){var e,n,t,o,r,s;e=Z,a.substr(Z,6)===d?(n=d,Z+=6):(n=i,0===ae&&le(m));n===i&&(a.substr(Z,4)===h?(n=h,Z+=4):(n=i,0===ae&&le(g)),n===i&&(a.substr(Z,4)===v?(n=v,Z+=4):(n=i,0===ae&&le(f))));n!==i&&ge()!==i?(t=Z,44===a.charCodeAt(Z)?(o=p,Z++):(o=i,0===ae&&le(u)),o!==i&&(r=ge())!==i&&(s=we())!==i?t=o=[o,r,s]:(Z=t,t=i),t===i&&(t=null),t!==i?(Y=e,e=n={type:n+"Format",style:(l=t)&&l[2],location:ne()}):(Z=e,e=i)):(Z=e,e=i);var l;return e}())===i&&(e=function(){var e,n,t,o;e=Z,a.substr(Z,6)===b?(n=b,Z+=6):(n=i,0===ae&&le(y));n!==i&&ge()!==i?(44===a.charCodeAt(Z)?(t=p,Z++):(t=i,0===ae&&le(u)),t!==i&&ge()!==i&&(o=me())!==i?(Y=e,e=n={type:(r=o).type,ordinal:!1,offset:r.offset||0,options:r.options,location:ne()}):(Z=e,e=i)):(Z=e,e=i);var r;return e}())===i&&(e=function(){var e,n,t,o;e=Z,a.substr(Z,13)===_?(n=_,Z+=13):(n=i,0===ae&&le(C));n!==i&&ge()!==i?(44===a.charCodeAt(Z)?(t=p,Z++):(t=i,0===ae&&le(u)),t!==i&&ge()!==i&&(o=me())!==i?(Y=e,e=n={type:(r=o).type,ordinal:!0,offset:r.offset||0,options:r.options,location:ne()}):(Z=e,e=i)):(Z=e,e=i);var r;return e}())===i&&(e=function(){var e,n,t,o,r;e=Z,a.substr(Z,6)===w?(n=w,Z+=6):(n=i,0===ae&&le(k));if(n!==i)if(ge()!==i)if(44===a.charCodeAt(Z)?(t=p,Z++):(t=i,0===ae&&le(u)),t!==i)if(ge()!==i){if(o=[],(r=de())!==i)for(;r!==i;)o.push(r),r=de();else o=i;o!==i?(Y=e,e=n=function(e){return{type:"selectFormat",options:e,location:ne()}}(o)):(Z=e,e=i)}else Z=e,e=i;else Z=e,e=i;else Z=e,e=i;else Z=e,e=i;return e}());return e}())!==i?o=r=[r,A,S]:(Z=o,o=i),o===i&&(o=null),o!==i&&(r=ge())!==i?(125===a.charCodeAt(Z)?(A="}",Z++):(A=i,0===ae&&le(c)),A!==i?(Y=e,e=n={type:"argumentElement",id:t,format:(P=o)&&P[2],location:ne()}):(Z=e,e=i)):(Z=e,e=i)):(Z=e,e=i);var P;return e}()),e}function de(){var e,n,t,o,r;return e=Z,ge()!==i&&(n=function(){var e,n,t,o;return e=Z,n=Z,61===a.charCodeAt(Z)?(t="=",Z++):(t=i,0===ae&&le(A)),t!==i&&(o=be())!==i?n=t=[t,o]:(Z=n,n=i),(e=n!==i?a.substring(e,Z):n)===i&&(e=we()),e}())!==i&&ge()!==i?(123===a.charCodeAt(Z)?(t="{",Z++):(t=i,0===ae&&le(l)),t!==i&&(o=ue())!==i?(125===a.charCodeAt(Z)?(r="}",Z++):(r=i,0===ae&&le(c)),r!==i?(Y=e,e={type:"optionalFormatPattern",selector:n,value:o,location:ne()}):(Z=e,e=i)):(Z=e,e=i)):(Z=e,e=i),e}function me(){var e,n,t,o;if(e=Z,(n=function(){var e,n,t;return e=Z,a.substr(Z,7)===S?(n=S,Z+=7):(n=i,0===ae&&le(P)),n!==i&&ge()!==i&&(t=be())!==i?(Y=e,e=n=t):(Z=e,e=i),e}())===i&&(n=null),n!==i)if(ge()!==i){if(t=[],(o=de())!==i)for(;o!==i;)t.push(o),o=de();else t=i;t!==i?(Y=e,e=n=function(e,a){return{type:"pluralFormat",offset:e,options:a,location:ne()}}(n,t)):(Z=e,e=i)}else Z=e,e=i;else Z=e,e=i;return e}function he(){var e,n;if(ae++,e=[],x.test(a.charAt(Z))?(n=a.charAt(Z),Z++):(n=i,0===ae&&le(L)),n!==i)for(;n!==i;)e.push(n),x.test(a.charAt(Z))?(n=a.charAt(Z),Z++):(n=i,0===ae&&le(L));else e=i;return ae--,e===i&&(n=i,0===ae&&le(U)),e}function ge(){var e,n,t;for(ae++,e=Z,n=[],t=he();t!==i;)n.push(t),t=he();return e=n!==i?a.substring(e,Z):n,ae--,e===i&&(n=i,0===ae&&le(z)),e}function ve(){var e;return I.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(N)),e}function fe(){var e;return T.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(R)),e}function be(){var e,n,t,o,r,s;if(e=Z,48===a.charCodeAt(Z)?(n="0",Z++):(n=i,0===ae&&le(D)),n===i){if(n=Z,t=Z,E.test(a.charAt(Z))?(o=a.charAt(Z),Z++):(o=i,0===ae&&le(j)),o!==i){for(r=[],s=ve();s!==i;)r.push(s),s=ve();r!==i?t=o=[o,r]:(Z=t,t=i)}else Z=t,t=i;n=t!==i?a.substring(n,Z):t}return n!==i&&(Y=e,n=parseInt(n,10)),e=n}function ye(){var e,n,t;return e=Z,n=Z,ae++,39===a.charCodeAt(Z)?(t=M,Z++):(t=i,0===ae&&le(F)),t===i&&(B.test(a.charAt(Z))?(t=a.charAt(Z),Z++):(t=i,0===ae&&le(O))),ae--,t===i?n=void 0:(Z=n,n=i),n!==i?(a.length>Z?(t=a.charAt(Z),Z++):(t=i,0===ae&&le(H)),t!==i?(Y=e,e=n=t):(Z=e,e=i)):(Z=e,e=i),e===i&&(e=Z,39===a.charCodeAt(Z)?(n=M,Z++):(n=i,0===ae&&le(F)),n!==i&&(t=function(){var e;B.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(O));e===i&&(e=_e());return e}())!==i?(Y=e,e=n=t):(Z=e,e=i)),e}function _e(){var e;return 39===a.charCodeAt(Z)?(e=M,Z++):(e=i,0===ae&&le(F)),e}function Ce(){var e,n,t,o,r,s,l,p,u;return e=Z,39===a.charCodeAt(Z)?(n=M,Z++):(n=i,0===ae&&le(F)),n!==i&&(t=_e())!==i?(Y=e,e=n=t):(Z=e,e=i),e===i&&(W.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(V)),e===i&&(e=Z,"\\\\"===a.substr(Z,2)?(n="\\\\",Z+=2):(n=i,0===ae&&le(G)),n!==i&&(Y=e,n="\\"),(e=n)===i&&(e=Z,"\\#"===a.substr(Z,2)?(n="\\#",Z+=2):(n=i,0===ae&&le($)),n!==i&&(Y=e,n="\\#"),(e=n)===i&&(e=Z,"\\{"===a.substr(Z,2)?(n="\\{",Z+=2):(n=i,0===ae&&le(J)),n!==i&&(Y=e,n="{"),(e=n)===i&&(e=Z,"\\}"===a.substr(Z,2)?(n="\\}",Z+=2):(n=i,0===ae&&le(q)),n!==i&&(Y=e,n="}"),(e=n)===i&&(e=Z,"\\u"===a.substr(Z,2)?(n="\\u",Z+=2):(n=i,0===ae&&le(K)),n!==i?(t=Z,o=Z,(r=fe())!==i&&(s=fe())!==i&&(l=fe())!==i&&(p=fe())!==i?o=r=[r,s,l,p]:(Z=o,o=i),(t=o!==i?a.substring(t,Z):o)!==i?(Y=e,u=t,e=n=String.fromCharCode(parseInt(u,16))):(Z=e,e=i)):(Z=e,e=i))))))),e}function we(){var e,a,n;if(e=Z,a=[],(n=Ce())!==i)for(;n!==i;)a.push(n),n=Ce();else a=i;return a!==i&&(Y=e,a=s(a)),e=a}if((t=r())!==i&&Z===a.length)return t;throw t!==i&&Z<a.length&&le({type:"end"}),function(a,n,t){return new e(e.buildMessage(a,n),a,n,t)}(ee,Q<a.length?a.charAt(Q):null,Q<a.length?se(Q,Q+1):se(Q,Q))}}}(),Fe=(je=function(e,a){return(je=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)a.hasOwnProperty(n)&&(e[n]=a[n])})(e,a)},function(e,a){function n(){this.constructor=e}je(e,a),e.prototype=null===a?Object.create(a):(n.prototype=a.prototype,new n)}),Be=function(){function e(e,a,n){this.locales=[],this.formats={number:{},date:{},time:{}},this.pluralNumberFormat=null,this.currentPlural=null,this.pluralStack=[],this.locales=e,this.formats=a,this.formatters=n}return e.prototype.compile=function(e){return this.pluralStack=[],this.currentPlural=null,this.pluralNumberFormat=null,this.compileMessage(e)},e.prototype.compileMessage=function(e){var a=this;if(!e||"messageFormatPattern"!==e.type)throw new Error('Message AST is not of type: "messageFormatPattern"');var n=e.elements,t=n.filter((function(e){return"messageTextElement"===e.type||"argumentElement"===e.type})).map((function(e){return"messageTextElement"===e.type?a.compileMessageText(e):a.compileArgument(e)}));if(t.length!==n.length)throw new Error("Message element does not have a valid type");return t},e.prototype.compileMessageText=function(e){return this.currentPlural&&/(^|[^\\])#/g.test(e.value)?(this.pluralNumberFormat||(this.pluralNumberFormat=new Intl.NumberFormat(this.locales)),new Ve(this.currentPlural.id,this.currentPlural.format.offset,this.pluralNumberFormat,e.value)):e.value.replace(/\\#/g,"#")},e.prototype.compileArgument=function(e){var a=e.format,n=e.id,t=this.formatters;if(!a)return new He(n);var i=this.formats,o=this.locales;switch(a.type){case"numberFormat":return{id:n,format:t.getNumberFormat(o,i.number[a.style]).format};case"dateFormat":return{id:n,format:t.getDateTimeFormat(o,i.date[a.style]).format};case"timeFormat":return{id:n,format:t.getDateTimeFormat(o,i.time[a.style]).format};case"pluralFormat":return new We(n,a.offset,this.compileOptions(e),t.getPluralRules(o,{type:a.ordinal?"ordinal":"cardinal"}));case"selectFormat":return new Ge(n,this.compileOptions(e));default:throw new Error("Message element does not have a valid format type")}},e.prototype.compileOptions=function(e){var a=this,n=e.format,t=n.options;this.pluralStack.push(this.currentPlural),this.currentPlural="pluralFormat"===n.type?e:null;var i=t.reduce((function(e,n){return e[n.selector]=a.compileMessage(n.value),e}),{});return this.currentPlural=this.pluralStack.pop(),i},e}(),Oe=function(e){this.id=e},He=function(e){function a(){return null!==e&&e.apply(this,arguments)||this}return Fe(a,e),a.prototype.format=function(e){return e||"number"==typeof e?"string"==typeof e?e:String(e):""},a}(Oe),We=function(){function e(e,a,n,t){this.id=e,this.offset=a,this.options=n,this.pluralRules=t}return e.prototype.getOption=function(e){var a=this.options;return a["="+e]||a[this.pluralRules.select(e-this.offset)]||a.other},e}(),Ve=function(e){function a(a,n,t,i){var o=e.call(this,a)||this;return o.offset=n,o.numberFormat=t,o.string=i,o}return Fe(a,e),a.prototype.format=function(e){var a=this.numberFormat.format(e-this.offset);return this.string.replace(/(^|[^\\])#/g,"$1"+a).replace(/\\#/g,"#")},a}(Oe),Ge=function(){function e(e,a){this.id=e,this.options=a}return e.prototype.getOption=function(e){var a=this.options;return a[e]||a.other},e}();function $e(e){return!!e.options}var Je=function(){var e=function(a,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)a.hasOwnProperty(n)&&(e[n]=a[n])})(a,n)};return function(a,n){function t(){this.constructor=a}e(a,n),a.prototype=null===n?Object.create(n):(t.prototype=n.prototype,new t)}}(),qe=function(){return(qe=Object.assign||function(e){for(var a,n=1,t=arguments.length;n<t;n++)for(var i in a=arguments[n])Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);return e}).apply(this,arguments)};function Ke(e){"string"==typeof e&&(e=[e]);try{return Intl.NumberFormat.supportedLocalesOf(e,{localeMatcher:"best fit"})[0]}catch(e){return ea.defaultLocale}}function Ze(e,a){for(var n="",t=0,i=e;t<i.length;t++){var o=i[t];if("string"!=typeof o){var r=o.id;if(!a||!(r in a))throw new Xe("A value must be provided for: "+r,r);var s=a[r];$e(o)?n+=Ze(o.getOption(s),a):n+=o.format(s)}else n+=o}return n}function Ye(e,a){return a?Object.keys(e).reduce((function(n,t){var i,o;return n[t]=(i=e[t],(o=a[t])?qe({},i||{},o||{},Object.keys(i).reduce((function(e,a){return e[a]=qe({},i[a],o[a]||{}),e}),{})):i),n}),qe({},e)):e}var Xe=function(e){function a(a,n){var t=e.call(this,a)||this;return t.variableId=n,t}return Je(a,e),a}(Error);function Qe(){return{getNumberFormat:function(){for(var e,a=[],n=0;n<arguments.length;n++)a[n]=arguments[n];return new((e=Intl.NumberFormat).bind.apply(e,[void 0].concat(a)))},getDateTimeFormat:function(){for(var e,a=[],n=0;n<arguments.length;n++)a[n]=arguments[n];return new((e=Intl.DateTimeFormat).bind.apply(e,[void 0].concat(a)))},getPluralRules:function(){for(var e,a=[],n=0;n<arguments.length;n++)a[n]=arguments[n];return new((e=Intl.PluralRules).bind.apply(e,[void 0].concat(a)))}}}var ea=function(){function e(a,n,t,i){var o=this;if(void 0===n&&(n=e.defaultLocale),this.format=function(e){try{return Ze(o.pattern,e)}catch(e){throw e.variableId?new Error("The intl string context variable '"+e.variableId+"' was not provided to the string '"+o.message+"'"):e}},"string"==typeof a){if(!e.__parse)throw new TypeError("IntlMessageFormat.__parse must be set to process `message` of type `string`");this.ast=e.__parse(a)}else this.ast=a;if(this.message=a,!this.ast||"messageFormatPattern"!==this.ast.type)throw new TypeError("A message must be provided as a String or AST.");var r=Ye(e.formats,t);this.locale=Ke(n||[]);var s=i&&i.formatters||Qe();this.pattern=new Be(n,r,s).compile(this.ast)}return e.prototype.resolvedOptions=function(){return{locale:this.locale}},e.prototype.getAst=function(){return this.ast},e.defaultLocale="en",e.__parse=void 0,e.formats={number:{currency:{style:"currency"},percent:{style:"percent"}},date:{short:{month:"numeric",day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"},long:{month:"long",day:"numeric",year:"numeric"},full:{weekday:"long",month:"long",day:"numeric",year:"numeric"}},time:{short:{hour:"numeric",minute:"numeric"},medium:{hour:"numeric",minute:"numeric",second:"numeric"},long:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"},full:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"}}},e}();ea.__parse=Me.parse;var aa=Ee(Object.freeze({__proto__:null,default:ea,createDefaultFormatters:Qe,IntlMessageFormat:ea}));var na={isObjectOfUnknownValues:
|
|
17
|
+
*/const oe="…",re="data:image/jpeg;base64,",se={label:"pass",minScore:.9},le={label:"average",minScore:.5},pe={label:"fail"},ue={label:"error"},ce=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"];class de{static i18n=null;static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return"%10d ms"}static prepareReportResult(e){const a=JSON.parse(JSON.stringify(e));a.configSettings.locale||(a.configSettings.locale="en"),a.configSettings.formFactor||(a.configSettings.formFactor=a.configSettings.emulatedFormFactor);for(const e of Object.values(a.audits))if("not_applicable"!==e.scoreDisplayMode&&"not-applicable"!==e.scoreDisplayMode||(e.scoreDisplayMode="notApplicable"),e.details&&(void 0!==e.details.type&&"diagnostic"!==e.details.type||(e.details.type="debugdata"),"filmstrip"===e.details.type))for(const a of e.details.items)a.data.startsWith(re)||(a.data=re+a.data);if("object"!=typeof a.categories)throw new Error("No categories provided.");const n=new Map,[t]=a.lighthouseVersion.split(".").map(Number),i=a.categories.performance;if(t<9&&i){a.categoryGroups||(a.categoryGroups={}),a.categoryGroups.hidden={title:""};for(const e of i.auditRefs)e.group?["load-opportunities","diagnostics"].includes(e.group)&&delete e.group:e.group="hidden"}for(const e of Object.values(a.categories))e.auditRefs.forEach((e=>{e.relevantAudits&&e.relevantAudits.forEach((a=>{const t=n.get(a)||[];t.push(e),n.set(a,t)}))})),e.auditRefs.forEach((e=>{const t=a.audits[e.id];e.result=t,n.has(e.id)&&(e.relevantMetrics=n.get(e.id)),a.stackPacks&&a.stackPacks.forEach((a=>{a.descriptions[e.id]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:a.title,iconDataURL:a.iconDataURL,description:a.descriptions[e.id]}))}))}));return a}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=se.minScore}}static calculateRating(e,a){if("manual"===a||"notApplicable"===a)return se.label;if("error"===a)return ue.label;if(null===e)return pe.label;let n=pe.label;return e>=se.minScore?n=se.label:e>=le.minScore&&(n=le.label),n}static splitMarkdownCodeSpans(e){const a=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){const t=n[e];if(!t)continue;const i=e%2!=0;a.push({isCode:i,text:t})}return a}static splitMarkdownLink(e){const a=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){const[e,t,i]=n.splice(0,3);e&&a.push({isLink:!1,text:e}),t&&i&&a.push({isLink:!0,text:t,linkHref:i})}return a}static getURLDisplayName(e,a){const n=void 0!==(a=a||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?a.numPathParts:2,t=void 0===a.preserveQuery||a.preserveQuery,i=a.preserveHost||!1;let o;if("about:"===e.protocol||"data:"===e.protocol)o=e.href;else{o=e.pathname;const a=o.split("/").filter((e=>e.length));n&&a.length>n&&(o=oe+a.slice(-1*n).join("/")),i&&(o=`${e.host}/${o.replace(/^\//,"")}`),t&&(o=`${o}${e.search}`)}if("data:"!==e.protocol&&(o=o.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,"$1…"),o=o.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,"$1…"),o=o.replace(/(\d{3})\d{6,}/g,"$1…"),o=o.replace(/\u2026+/g,oe),o.length>64&&o.includes("?")&&(o=o.replace(/\?([^=]*)(=)?.*/,"?$1$2…"),o.length>64&&(o=o.replace(/\?.*/,"?…")))),o.length>64){const e=o.lastIndexOf(".");o=e>=0?o.slice(0,63-(o.length-e))+`…${o.slice(e)}`:o.slice(0,63)+oe}return o}static parseURL(e){const a=new URL(e);return{file:de.getURLDisplayName(a),hostname:a.hostname,origin:a.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){const a=e.split(".").slice(-2);return ce.includes(a[0])?`.${a.join(".")}`:`.${a[a.length-1]}`}static getRootDomain(e){const a=de.createOrReturnURL(e).hostname,n=de.getTld(a).split(".");return a.split(".").slice(-n.length).join(".")}static getEmulationDescriptions(e){let a,n,t;const i=e.throttling;switch(e.throttlingMethod){case"provided":t=n=a=de.i18n.strings.throttlingProvided;break;case"devtools":{const{cpuSlowdownMultiplier:e,requestLatencyMs:o}=i;a=`${de.i18n.formatNumber(e)}x slowdown (DevTools)`,n=`${de.i18n.formatNumber(o)} ms HTTP RTT, ${de.i18n.formatNumber(i.downloadThroughputKbps)} Kbps down, ${de.i18n.formatNumber(i.uploadThroughputKbps)} Kbps up (DevTools)`;t=(()=>562.5===o&&i.downloadThroughputKbps===1638.4*.9&&675===i.uploadThroughputKbps)()?de.i18n.strings.runtimeSlow4g:de.i18n.strings.runtimeCustom;break}case"simulate":{const{cpuSlowdownMultiplier:e,rttMs:o,throughputKbps:r}=i;a=`${de.i18n.formatNumber(e)}x slowdown (Simulated)`,n=`${de.i18n.formatNumber(o)} ms TCP RTT, ${de.i18n.formatNumber(r)} Kbps throughput (Simulated)`;t=(()=>150===o&&1638.4===r)()?de.i18n.strings.runtimeSlow4g:de.i18n.strings.runtimeCustom;break}default:t=a=n=de.i18n.strings.runtimeUnknown}return{deviceEmulation:{mobile:de.i18n.strings.runtimeMobileEmulation,desktop:de.i18n.strings.runtimeDesktopEmulation}[e.formFactor]||de.i18n.strings.runtimeNoEmulation,cpuThrottling:a,networkThrottling:n,summary:t}}static filterRelevantLines(e,a,n){if(0===a.length)return e.slice(0,2*n+1);const t=new Set;return(a=a.sort(((e,a)=>(e.lineNumber||0)-(a.lineNumber||0)))).forEach((({lineNumber:e})=>{let a=e-n,i=e+n;for(;a<1;)a++,i++;t.has(a-3-1)&&(a-=3);for(let e=a;e<=i;e++){const a=e;t.add(a)}})),e.filter((e=>t.has(e.lineNumber)))}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return"timespan"===e||"snapshot"===e}static calculateCategoryFraction(e){let a=0,n=0,t=0,i=0;for(const o of e.auditRefs){const e=de.showAsPassed(o.result);"hidden"!==o.group&&"manual"!==o.result.scoreDisplayMode&&"notApplicable"!==o.result.scoreDisplayMode&&("informative"!==o.result.scoreDisplayMode?(++a,i+=o.weight,e&&n++):e||++t)}return{numPassed:n,numPassableAudits:a,numInformative:t,totalWeight:i}}}de.reportJson=null,de.getUniqueSuffix=(()=>{let e=0;return function(){return e++}})();de.UIStrings={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",viewOriginalTraceLabel:"View Original Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G4",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling"};const me=()=>D("svg",{width:"14",viewBox:"0 0 18 16",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M0 2C0 1.17 0.67 0.5 1.5 0.5C2.33 0.5 3 1.17 3 2C3 2.83 2.33 3.5 1.5 3.5C0.67 3.5 0 2.83 0 2ZM0 8C0 7.17 0.67 6.5 1.5 6.5C2.33 6.5 3 7.17 3 8C3 8.83 2.33 9.5 1.5 9.5C0.67 9.5 0 8.83 0 8ZM1.5 12.5C0.67 12.5 0 13.18 0 14C0 14.82 0.68 15.5 1.5 15.5C2.32 15.5 3 14.82 3 14C3 13.18 2.33 12.5 1.5 12.5ZM18 15H5V13H18V15ZM5 9H18V7H5V9ZM5 3V1H18V3H5Z",fill:"currentColor"},void 0)},void 0),he=()=>D("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a navigation report",children:D("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"},void 0)},void 0),ge=()=>D("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a timespan report",children:[D("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"},void 0),D("path",{d:"m 8,4 v 4 l 4,1.9999998",stroke:"currentColor","stroke-width":"1.5"},void 0)]},void 0),ve=()=>D("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a snapshot report",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M 12.2038,12.2812 C 11.1212,13.3443 9.6372,14 8,14 7.81038,14 7.62281,13.9912 7.43768,13.974 L 10.3094,9 Z M 12.8925,11.4741 10.0207,6.5 H 13.811 C 13.9344,6.97943 14,7.48205 14,8 c 0,1.2947 -0.4101,2.4937 -1.1075,3.4741 z M 13.456,5.5 H 7.71135 L 9.6065,2.21749 C 11.3203,2.69259 12.7258,3.90911 13.456,5.5 Z M 8.5624,2.02601 C 8.3772,2.0088 8.1896,2 8,2 6.36282,2 4.8788,2.65572 3.79622,3.71885 L 5.69061,7.00002 Z M 3.10749,4.52594 C 2.4101,5.5063 2,6.70526 2,8 2,8.5179 2.06563,9.0206 2.18903,9.5 H 5.97927 Z M 2.54404,10.5 c 0.73017,1.5909 2.1357,2.8074 3.84949,3.2825 L 8.2887,10.5 Z M 16,8 c 0,4.4183 -3.5817,8 -8,8 C 3.58172,16 0,12.4183 0,8 0,3.58172 3.58172,0 8,0 c 4.4183,0 8,3.58172 8,8 z",fill:"currentColor"},void 0)},void 0),fe=()=>D("svg",{xmlns:"http://www.w3.org/2000/svg",height:"24px",viewBox:"0 0 24 24",width:"24px",fill:"currentColor",role:"img","aria-label":"Icon representing a close action",children:[D("path",{d:"M0 0h24v24H0V0z",fill:"none"},void 0),D("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"},void 0)]},void 0),be=()=>D("svg",{width:"15",height:"12",viewBox:"0 0 15 12",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.33317 2.00008H13.9998V0.666748H3.33317C2.59984 0.666748 1.99984 1.26675 1.99984 2.00008V9.33341H0.666504V11.3334H7.99984V9.33341H3.33317V2.00008ZM13.9998 3.33341H9.99984C9.63317 3.33341 9.33317 3.63341 9.33317 4.00008V10.6667C9.33317 11.0334 9.63317 11.3334 9.99984 11.3334H13.9998C14.3665 11.3334 14.6665 11.0334 14.6665 10.6667V4.00008C14.6665 3.63341 14.3665 3.33341 13.9998 3.33341ZM10.6665 9.33341H13.3332V4.66675H10.6665V9.33341Z",fill:"currentColor"},void 0)},void 0),ye=()=>D("svg",{width:"16",height:"11",viewBox:"0 0 16 11",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M0.666687 3.26663L2.00002 4.59997C3.92002 2.67997 6.52669 1.87997 9.02002 2.18663L9.81335 0.399966C6.59335 -0.173367 3.16002 0.779966 0.666687 3.26663ZM10.6 0.599966C10.4867 0.599966 10.3867 0.659966 10.3267 0.753299L10.28 0.853299L6.82669 8.61996C6.72002 8.8133 6.65335 9.02663 6.65335 9.25996C6.65335 9.99996 7.25335 10.6 7.99335 10.6C8.63335 10.6 9.17335 10.1466 9.30002 9.53996L9.30669 9.51997L10.9334 0.933299C10.9334 0.746633 10.7867 0.599966 10.6 0.599966ZM15.3334 3.26663L14 4.59997C13.1867 3.78663 12.2534 3.17997 11.2534 2.76663L11.6067 0.886633C12.9667 1.38663 14.24 2.1733 15.3334 3.26663ZM11.3334 7.26663L12.6667 5.9333C12.1334 5.39997 11.5334 4.98663 10.8934 4.6733L10.5267 6.61997C10.8067 6.79997 11.08 7.0133 11.3334 7.26663ZM4.66669 7.26663L3.33335 5.9333C4.67335 4.5933 6.45335 3.95997 8.20669 4.0133L7.35335 5.9333C6.37335 6.0733 5.42002 6.5133 4.66669 7.26663Z",fill:"currentColor"},void 0)},void 0),_e=()=>D("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M15.5 7.16667V5.5H13.8333V3.83333C13.8333 2.91667 13.0833 2.16667 12.1667 2.16667H10.5V0.5H8.83333V2.16667H7.16667V0.5H5.5V2.16667H3.83333C2.91667 2.16667 2.16667 2.91667 2.16667 3.83333V5.5H0.5V7.16667H2.16667V8.83333H0.5V10.5H2.16667V12.1667C2.16667 13.0833 2.91667 13.8333 3.83333 13.8333H5.5V15.5H7.16667V13.8333H8.83333V15.5H10.5V13.8333H12.1667C13.0833 13.8333 13.8333 13.0833 13.8333 12.1667V10.5H15.5V8.83333H13.8333V7.16667H15.5ZM10.5 5.5H5.5V10.5H10.5V5.5ZM3.83333 12.1667H12.1667V3.83333H3.83333V12.1667Z",fill:"currentColor"},void 0)},void 0),Ce=()=>D("svg",{viewBox:"0 0 18 12",width:"18",height:"12",role:"img",children:[D("rect",{width:"18",height:"2",fill:"currentColor"},void 0),D("rect",{y:"5",width:"18",height:"2",fill:"currentColor"},void 0),D("rect",{y:"10",width:"18",height:"2",fill:"currentColor"},void 0)]},void 0),we=()=>D("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:D("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M13 7C13 10.3137 10.3137 13 7 13C3.68629 13 1 10.3137 1 7C1 3.68629 3.68629 1 7 1C10.3137 1 13 3.68629 13 7ZM14 7C14 10.866 10.866 14 7 14C3.13401 14 0 10.866 0 7C0 3.13401 3.13401 0 7 0C10.866 0 14 3.13401 14 7ZM7.66658 11H6.33325V9.66667H7.66658V11ZM4.33325 5.66667C4.33325 4.19333 5.52659 3 6.99992 3C8.47325 3 9.66658 4.19333 9.66658 5.66667C9.66658 6.52194 9.1399 6.98221 8.62709 7.43036C8.1406 7.85551 7.66658 8.26975 7.66658 9H6.33325C6.33325 7.78582 6.96133 7.30439 7.51355 6.88112C7.94674 6.54907 8.33325 6.25281 8.33325 5.66667C8.33325 4.93333 7.73325 4.33333 6.99992 4.33333C6.26658 4.33333 5.66658 4.93333 5.66658 5.66667H4.33325Z",fill:"currentColor"},void 0)},void 0),ke=T(void 0),Ae=T({});function Se(e){return new URLSearchParams(location.hash.replace("#","?")).get(e)}function Pe(...e){const a=[];for(const n of e){if(!n)continue;if("string"==typeof n){a.push(n);continue}const e=Object.entries(n).filter((([e,a])=>a)).map((([e])=>e));a.push(...e)}return a.join(" ")}function Ue(e,a){switch(e){case"navigation":return a.navigationDescription;case"timespan":return a.timespanDescription;case"snapshot":return a.snapshotDescription}}function xe(){const e=X(ke);if(!e)throw Error("useFlowResult must be called in the FlowResultContext");return e}function Le(){const e=xe(),[a,n]=function(...e){const[a,n]=J(e.map(Se));return q((()=>{function t(){const t=e.map(Se);t.every(((e,n)=>e===a[n]))||n(t)}return window.addEventListener("hashchange",t),()=>window.removeEventListener("hashchange",t)}),[a]),a}("index","anchor");return Y((()=>{if(!a)return null;const t=Number(a);if(!Number.isFinite(t))return console.warn(`Invalid hash index: ${a}`),null;const i=e.steps[t];return i?{currentLhr:i.lhr,index:t,anchor:n}:(console.warn(`No flow step at index ${t}`),null)}),[a,e,n])}function ze(e,a){const n=Z(null);return K((()=>{if(!n.current)return;const a=e();return n.current.appendChild(a),()=>{n.current?.contains(a)&&n.current.removeChild(a)}}),a),n}const Ie=()=>D("div",{className:"Separator",role:"separator"},void 0),Ne=({mode:e})=>D(h,{children:["navigation"===e&&D(he,{},void 0),"timespan"===e&&D(ge,{},void 0),"snapshot"===e&&D(ve,{},void 0)]},void 0),Te=({mode:e})=>D("div",{className:"FlowSegment",children:[D("div",{className:"FlowSegment__top-line"},void 0),e&&D(Ne,{mode:e},void 0),D("div",{className:"FlowSegment__bottom-line"},void 0)]},void 0),Re=({frames:e,width:a,height:n})=>{const[t,i]=J(0),o=t%e.length;return q((()=>{const a=setInterval((()=>i((a=>(a+1)%e.length))),500);return()=>clearInterval(a)}),[e.length]),D("img",{className:"FlowStepThumbnail","data-testid":"FlowStepAnimatedThumbnail",src:e[o].data,style:{width:a,height:n},alt:"Animated screenshots of a page tested by Lighthouse"},void 0)},De=({lhr:e,width:a,height:n})=>{const t=function(e){const a=e.audits["full-page-screenshot"];return a?.details&&"full-page-screenshot"===a.details.type&&a.details||null}(e),i=function(e){const a=e.audits["screenshot-thumbnails"];if(!a)return;return a.details&&"filmstrip"===a.details.type&&a.details.items||void 0}(e),o=function(e){const{width:a,height:n}=e.configSettings.screenEmulation;return{width:a,height:n}}(e);if(a&&void 0===n?n=o.height*a/o.width:n&&void 0===a&&(a=o.width*n/o.height),!a||!n)return console.warn(new Error("FlowStepThumbnail requested without any dimensions").stack),D(h,{},void 0);let r;if(i?.length){if(r=i[i.length-1].data,"timespan"===e.gatherMode)return D(Re,{frames:i,width:a,height:n},void 0)}else r=t?.screenshot.data;return D(h,{children:r&&D("img",{className:"FlowStepThumbnail",src:r,style:{width:a,height:n},alt:"Screenshot of a page tested by Lighthouse"},void 0)},void 0)};function Ee(e){if(e.__esModule)return e;var a=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(a,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})})),a}var je,Me=function(){function e(a,n,t,i){this.message=a,this.expected=n,this.found=t,this.location=i,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,e)}return function(e,a){function n(){this.constructor=e}n.prototype=a.prototype,e.prototype=new n}(e,Error),e.buildMessage=function(e,a){var n={literal:function(e){return'"'+i(e.text)+'"'},class:function(e){var a,n="";for(a=0;a<e.parts.length;a++)n+=e.parts[a]instanceof Array?o(e.parts[a][0])+"-"+o(e.parts[a][1]):o(e.parts[a]);return"["+(e.inverted?"^":"")+n+"]"},any:function(e){return"any character"},end:function(e){return"end of input"},other:function(e){return e.description}};function t(e){return e.charCodeAt(0).toString(16).toUpperCase()}function i(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+t(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+t(e)}))}function o(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+t(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+t(e)}))}return"Expected "+function(e){var a,t,i,o=new Array(e.length);for(a=0;a<e.length;a++)o[a]=(i=e[a],n[i.type](i));if(o.sort(),o.length>0){for(a=1,t=1;a<o.length;a++)o[a-1]!==o[a]&&(o[t]=o[a],t++);o.length=t}switch(o.length){case 1:return o[0];case 2:return o[0]+" or "+o[1];default:return o.slice(0,-1).join(", ")+", or "+o[o.length-1]}}(e)+" but "+function(e){return e?'"'+i(e)+'"':"end of input"}(a)+" found."},{SyntaxError:e,parse:function(a,n){n=void 0!==n?n:{};var t,i={},o={start:pe},r=pe,s=function(e){return e.join("")},l=te("{",!1),p=",",u=te(",",!1),c=te("}",!1),d="number",m=te("number",!1),h="date",g=te("date",!1),v="time",f=te("time",!1),b="plural",y=te("plural",!1),_="selectordinal",C=te("selectordinal",!1),w="select",k=te("select",!1),A=te("=",!1),S="offset:",P=te("offset:",!1),U=oe("whitespace"),x=/^[ \t\n\r]/,L=ie([" ","\t","\n","\r"],!1,!1),z=oe("optionalWhitespace"),I=/^[0-9]/,N=ie([["0","9"]],!1,!1),T=/^[0-9a-f]/i,R=ie([["0","9"],["a","f"]],!1,!0),D=te("0",!1),E=/^[1-9]/,j=ie([["1","9"]],!1,!1),M="'",F=te("'",!1),B=/^[ \t\n\r,.+={}#]/,O=ie([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),H={type:"any"},W=/^[^{}\\\0-\x1F\x7F \t\n\r]/,V=ie(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),G=te("\\\\",!1),$=te("\\#",!1),J=te("\\{",!1),q=te("\\}",!1),K=te("\\u",!1),Z=0,Y=0,X=[{line:1,column:1}],Q=0,ee=[],ae=0;if("startRule"in n){if(!(n.startRule in o))throw new Error("Can't start parsing from rule \""+n.startRule+'".');r=o[n.startRule]}function ne(){return se(Y,Z)}function te(e,a){return{type:"literal",text:e,ignoreCase:a}}function ie(e,a,n){return{type:"class",parts:e,inverted:a,ignoreCase:n}}function oe(e){return{type:"other",description:e}}function re(e){var n,t=X[e];if(t)return t;for(n=e-1;!X[n];)n--;for(t={line:(t=X[n]).line,column:t.column};n<e;)10===a.charCodeAt(n)?(t.line++,t.column=1):t.column++,n++;return X[e]=t,t}function se(e,a){var n=re(e),t=re(a);return{start:{offset:e,line:n.line,column:n.column},end:{offset:a,line:t.line,column:t.column}}}function le(e){Z<Q||(Z>Q&&(Q=Z,ee=[]),ee.push(e))}function pe(){return ue()}function ue(){var e,a,n;for(e=Z,a=[],n=ce();n!==i;)a.push(n),n=ce();return a!==i&&(Y=e,a={type:"messageFormatPattern",elements:a,location:ne()}),e=a}function ce(){var e;return(e=function(){var e,n;e=Z,(n=function(){var e,n,t,o,r,s;e=Z,n=[],t=Z,(o=ge())!==i&&(r=we())!==i&&(s=ge())!==i?t=o=[o,r,s]:(Z=t,t=i);if(t!==i)for(;t!==i;)n.push(t),t=Z,(o=ge())!==i&&(r=we())!==i&&(s=ge())!==i?t=o=[o,r,s]:(Z=t,t=i);else n=i;n!==i&&(Y=e,n=n.reduce((function(e,a){return e.concat(a)}),[]).join(""));(e=n)===i&&(e=Z,e=(n=he())!==i?a.substring(e,Z):n);return e}())!==i&&(Y=e,n={type:"messageTextElement",value:n,location:ne()});return e=n}())===i&&(e=function(){var e,n,t,o,r,A,S;e=Z,123===a.charCodeAt(Z)?(n="{",Z++):(n=i,0===ae&&le(l));n!==i&&ge()!==i&&(t=function(){var e,a,n;if((e=be())===i){for(e=Z,a=[],n=ye();n!==i;)a.push(n),n=ye();a!==i&&(Y=e,a=s(a)),e=a}return e}())!==i&&ge()!==i?(o=Z,44===a.charCodeAt(Z)?(r=p,Z++):(r=i,0===ae&&le(u)),r!==i&&(A=ge())!==i&&(S=function(){var e;(e=function(){var e,n,t,o,r,s;e=Z,a.substr(Z,6)===d?(n=d,Z+=6):(n=i,0===ae&&le(m));n===i&&(a.substr(Z,4)===h?(n=h,Z+=4):(n=i,0===ae&&le(g)),n===i&&(a.substr(Z,4)===v?(n=v,Z+=4):(n=i,0===ae&&le(f))));n!==i&&ge()!==i?(t=Z,44===a.charCodeAt(Z)?(o=p,Z++):(o=i,0===ae&&le(u)),o!==i&&(r=ge())!==i&&(s=we())!==i?t=o=[o,r,s]:(Z=t,t=i),t===i&&(t=null),t!==i?(Y=e,e=n={type:n+"Format",style:(l=t)&&l[2],location:ne()}):(Z=e,e=i)):(Z=e,e=i);var l;return e}())===i&&(e=function(){var e,n,t,o;e=Z,a.substr(Z,6)===b?(n=b,Z+=6):(n=i,0===ae&&le(y));n!==i&&ge()!==i?(44===a.charCodeAt(Z)?(t=p,Z++):(t=i,0===ae&&le(u)),t!==i&&ge()!==i&&(o=me())!==i?(Y=e,e=n={type:(r=o).type,ordinal:!1,offset:r.offset||0,options:r.options,location:ne()}):(Z=e,e=i)):(Z=e,e=i);var r;return e}())===i&&(e=function(){var e,n,t,o;e=Z,a.substr(Z,13)===_?(n=_,Z+=13):(n=i,0===ae&&le(C));n!==i&&ge()!==i?(44===a.charCodeAt(Z)?(t=p,Z++):(t=i,0===ae&&le(u)),t!==i&&ge()!==i&&(o=me())!==i?(Y=e,e=n={type:(r=o).type,ordinal:!0,offset:r.offset||0,options:r.options,location:ne()}):(Z=e,e=i)):(Z=e,e=i);var r;return e}())===i&&(e=function(){var e,n,t,o,r;e=Z,a.substr(Z,6)===w?(n=w,Z+=6):(n=i,0===ae&&le(k));if(n!==i)if(ge()!==i)if(44===a.charCodeAt(Z)?(t=p,Z++):(t=i,0===ae&&le(u)),t!==i)if(ge()!==i){if(o=[],(r=de())!==i)for(;r!==i;)o.push(r),r=de();else o=i;o!==i?(Y=e,e=n=function(e){return{type:"selectFormat",options:e,location:ne()}}(o)):(Z=e,e=i)}else Z=e,e=i;else Z=e,e=i;else Z=e,e=i;else Z=e,e=i;return e}());return e}())!==i?o=r=[r,A,S]:(Z=o,o=i),o===i&&(o=null),o!==i&&(r=ge())!==i?(125===a.charCodeAt(Z)?(A="}",Z++):(A=i,0===ae&&le(c)),A!==i?(Y=e,e=n={type:"argumentElement",id:t,format:(P=o)&&P[2],location:ne()}):(Z=e,e=i)):(Z=e,e=i)):(Z=e,e=i);var P;return e}()),e}function de(){var e,n,t,o,r;return e=Z,ge()!==i&&(n=function(){var e,n,t,o;return e=Z,n=Z,61===a.charCodeAt(Z)?(t="=",Z++):(t=i,0===ae&&le(A)),t!==i&&(o=be())!==i?n=t=[t,o]:(Z=n,n=i),(e=n!==i?a.substring(e,Z):n)===i&&(e=we()),e}())!==i&&ge()!==i?(123===a.charCodeAt(Z)?(t="{",Z++):(t=i,0===ae&&le(l)),t!==i&&(o=ue())!==i?(125===a.charCodeAt(Z)?(r="}",Z++):(r=i,0===ae&&le(c)),r!==i?(Y=e,e={type:"optionalFormatPattern",selector:n,value:o,location:ne()}):(Z=e,e=i)):(Z=e,e=i)):(Z=e,e=i),e}function me(){var e,n,t,o;if(e=Z,(n=function(){var e,n,t;return e=Z,a.substr(Z,7)===S?(n=S,Z+=7):(n=i,0===ae&&le(P)),n!==i&&ge()!==i&&(t=be())!==i?(Y=e,e=n=t):(Z=e,e=i),e}())===i&&(n=null),n!==i)if(ge()!==i){if(t=[],(o=de())!==i)for(;o!==i;)t.push(o),o=de();else t=i;t!==i?(Y=e,e=n=function(e,a){return{type:"pluralFormat",offset:e,options:a,location:ne()}}(n,t)):(Z=e,e=i)}else Z=e,e=i;else Z=e,e=i;return e}function he(){var e,n;if(ae++,e=[],x.test(a.charAt(Z))?(n=a.charAt(Z),Z++):(n=i,0===ae&&le(L)),n!==i)for(;n!==i;)e.push(n),x.test(a.charAt(Z))?(n=a.charAt(Z),Z++):(n=i,0===ae&&le(L));else e=i;return ae--,e===i&&(n=i,0===ae&&le(U)),e}function ge(){var e,n,t;for(ae++,e=Z,n=[],t=he();t!==i;)n.push(t),t=he();return e=n!==i?a.substring(e,Z):n,ae--,e===i&&(n=i,0===ae&&le(z)),e}function ve(){var e;return I.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(N)),e}function fe(){var e;return T.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(R)),e}function be(){var e,n,t,o,r,s;if(e=Z,48===a.charCodeAt(Z)?(n="0",Z++):(n=i,0===ae&&le(D)),n===i){if(n=Z,t=Z,E.test(a.charAt(Z))?(o=a.charAt(Z),Z++):(o=i,0===ae&&le(j)),o!==i){for(r=[],s=ve();s!==i;)r.push(s),s=ve();r!==i?t=o=[o,r]:(Z=t,t=i)}else Z=t,t=i;n=t!==i?a.substring(n,Z):t}return n!==i&&(Y=e,n=parseInt(n,10)),e=n}function ye(){var e,n,t;return e=Z,n=Z,ae++,39===a.charCodeAt(Z)?(t=M,Z++):(t=i,0===ae&&le(F)),t===i&&(B.test(a.charAt(Z))?(t=a.charAt(Z),Z++):(t=i,0===ae&&le(O))),ae--,t===i?n=void 0:(Z=n,n=i),n!==i?(a.length>Z?(t=a.charAt(Z),Z++):(t=i,0===ae&&le(H)),t!==i?(Y=e,e=n=t):(Z=e,e=i)):(Z=e,e=i),e===i&&(e=Z,39===a.charCodeAt(Z)?(n=M,Z++):(n=i,0===ae&&le(F)),n!==i&&(t=function(){var e;B.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(O));e===i&&(e=_e());return e}())!==i?(Y=e,e=n=t):(Z=e,e=i)),e}function _e(){var e;return 39===a.charCodeAt(Z)?(e=M,Z++):(e=i,0===ae&&le(F)),e}function Ce(){var e,n,t,o,r,s,l,p,u;return e=Z,39===a.charCodeAt(Z)?(n=M,Z++):(n=i,0===ae&&le(F)),n!==i&&(t=_e())!==i?(Y=e,e=n=t):(Z=e,e=i),e===i&&(W.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(V)),e===i&&(e=Z,"\\\\"===a.substr(Z,2)?(n="\\\\",Z+=2):(n=i,0===ae&&le(G)),n!==i&&(Y=e,n="\\"),(e=n)===i&&(e=Z,"\\#"===a.substr(Z,2)?(n="\\#",Z+=2):(n=i,0===ae&&le($)),n!==i&&(Y=e,n="\\#"),(e=n)===i&&(e=Z,"\\{"===a.substr(Z,2)?(n="\\{",Z+=2):(n=i,0===ae&&le(J)),n!==i&&(Y=e,n="{"),(e=n)===i&&(e=Z,"\\}"===a.substr(Z,2)?(n="\\}",Z+=2):(n=i,0===ae&&le(q)),n!==i&&(Y=e,n="}"),(e=n)===i&&(e=Z,"\\u"===a.substr(Z,2)?(n="\\u",Z+=2):(n=i,0===ae&&le(K)),n!==i?(t=Z,o=Z,(r=fe())!==i&&(s=fe())!==i&&(l=fe())!==i&&(p=fe())!==i?o=r=[r,s,l,p]:(Z=o,o=i),(t=o!==i?a.substring(t,Z):o)!==i?(Y=e,u=t,e=n=String.fromCharCode(parseInt(u,16))):(Z=e,e=i)):(Z=e,e=i))))))),e}function we(){var e,a,n;if(e=Z,a=[],(n=Ce())!==i)for(;n!==i;)a.push(n),n=Ce();else a=i;return a!==i&&(Y=e,a=s(a)),e=a}if((t=r())!==i&&Z===a.length)return t;throw t!==i&&Z<a.length&&le({type:"end"}),function(a,n,t){return new e(e.buildMessage(a,n),a,n,t)}(ee,Q<a.length?a.charAt(Q):null,Q<a.length?se(Q,Q+1):se(Q,Q))}}}(),Fe=(je=function(e,a){return(je=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)a.hasOwnProperty(n)&&(e[n]=a[n])})(e,a)},function(e,a){function n(){this.constructor=e}je(e,a),e.prototype=null===a?Object.create(a):(n.prototype=a.prototype,new n)}),Be=function(){function e(e,a,n){this.locales=[],this.formats={number:{},date:{},time:{}},this.pluralNumberFormat=null,this.currentPlural=null,this.pluralStack=[],this.locales=e,this.formats=a,this.formatters=n}return e.prototype.compile=function(e){return this.pluralStack=[],this.currentPlural=null,this.pluralNumberFormat=null,this.compileMessage(e)},e.prototype.compileMessage=function(e){var a=this;if(!e||"messageFormatPattern"!==e.type)throw new Error('Message AST is not of type: "messageFormatPattern"');var n=e.elements,t=n.filter((function(e){return"messageTextElement"===e.type||"argumentElement"===e.type})).map((function(e){return"messageTextElement"===e.type?a.compileMessageText(e):a.compileArgument(e)}));if(t.length!==n.length)throw new Error("Message element does not have a valid type");return t},e.prototype.compileMessageText=function(e){return this.currentPlural&&/(^|[^\\])#/g.test(e.value)?(this.pluralNumberFormat||(this.pluralNumberFormat=new Intl.NumberFormat(this.locales)),new Ve(this.currentPlural.id,this.currentPlural.format.offset,this.pluralNumberFormat,e.value)):e.value.replace(/\\#/g,"#")},e.prototype.compileArgument=function(e){var a=e.format,n=e.id,t=this.formatters;if(!a)return new He(n);var i=this.formats,o=this.locales;switch(a.type){case"numberFormat":return{id:n,format:t.getNumberFormat(o,i.number[a.style]).format};case"dateFormat":return{id:n,format:t.getDateTimeFormat(o,i.date[a.style]).format};case"timeFormat":return{id:n,format:t.getDateTimeFormat(o,i.time[a.style]).format};case"pluralFormat":return new We(n,a.offset,this.compileOptions(e),t.getPluralRules(o,{type:a.ordinal?"ordinal":"cardinal"}));case"selectFormat":return new Ge(n,this.compileOptions(e));default:throw new Error("Message element does not have a valid format type")}},e.prototype.compileOptions=function(e){var a=this,n=e.format,t=n.options;this.pluralStack.push(this.currentPlural),this.currentPlural="pluralFormat"===n.type?e:null;var i=t.reduce((function(e,n){return e[n.selector]=a.compileMessage(n.value),e}),{});return this.currentPlural=this.pluralStack.pop(),i},e}(),Oe=function(e){this.id=e},He=function(e){function a(){return null!==e&&e.apply(this,arguments)||this}return Fe(a,e),a.prototype.format=function(e){return e||"number"==typeof e?"string"==typeof e?e:String(e):""},a}(Oe),We=function(){function e(e,a,n,t){this.id=e,this.offset=a,this.options=n,this.pluralRules=t}return e.prototype.getOption=function(e){var a=this.options;return a["="+e]||a[this.pluralRules.select(e-this.offset)]||a.other},e}(),Ve=function(e){function a(a,n,t,i){var o=e.call(this,a)||this;return o.offset=n,o.numberFormat=t,o.string=i,o}return Fe(a,e),a.prototype.format=function(e){var a=this.numberFormat.format(e-this.offset);return this.string.replace(/(^|[^\\])#/g,"$1"+a).replace(/\\#/g,"#")},a}(Oe),Ge=function(){function e(e,a){this.id=e,this.options=a}return e.prototype.getOption=function(e){var a=this.options;return a[e]||a.other},e}();function $e(e){return!!e.options}var Je=function(){var e=function(a,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,a){e.__proto__=a}||function(e,a){for(var n in a)a.hasOwnProperty(n)&&(e[n]=a[n])})(a,n)};return function(a,n){function t(){this.constructor=a}e(a,n),a.prototype=null===n?Object.create(n):(t.prototype=n.prototype,new t)}}(),qe=function(){return(qe=Object.assign||function(e){for(var a,n=1,t=arguments.length;n<t;n++)for(var i in a=arguments[n])Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);return e}).apply(this,arguments)};function Ke(e){"string"==typeof e&&(e=[e]);try{return Intl.NumberFormat.supportedLocalesOf(e,{localeMatcher:"best fit"})[0]}catch(e){return ea.defaultLocale}}function Ze(e,a){for(var n="",t=0,i=e;t<i.length;t++){var o=i[t];if("string"!=typeof o){var r=o.id;if(!a||!(r in a))throw new Xe("A value must be provided for: "+r,r);var s=a[r];$e(o)?n+=Ze(o.getOption(s),a):n+=o.format(s)}else n+=o}return n}function Ye(e,a){return a?Object.keys(e).reduce((function(n,t){var i,o;return n[t]=(i=e[t],(o=a[t])?qe({},i||{},o||{},Object.keys(i).reduce((function(e,a){return e[a]=qe({},i[a],o[a]||{}),e}),{})):i),n}),qe({},e)):e}var Xe=function(e){function a(a,n){var t=e.call(this,a)||this;return t.variableId=n,t}return Je(a,e),a}(Error);function Qe(){return{getNumberFormat:function(){for(var e,a=[],n=0;n<arguments.length;n++)a[n]=arguments[n];return new((e=Intl.NumberFormat).bind.apply(e,[void 0].concat(a)))},getDateTimeFormat:function(){for(var e,a=[],n=0;n<arguments.length;n++)a[n]=arguments[n];return new((e=Intl.DateTimeFormat).bind.apply(e,[void 0].concat(a)))},getPluralRules:function(){for(var e,a=[],n=0;n<arguments.length;n++)a[n]=arguments[n];return new((e=Intl.PluralRules).bind.apply(e,[void 0].concat(a)))}}}var ea=function(){function e(a,n,t,i){var o=this;if(void 0===n&&(n=e.defaultLocale),this.format=function(e){try{return Ze(o.pattern,e)}catch(e){throw e.variableId?new Error("The intl string context variable '"+e.variableId+"' was not provided to the string '"+o.message+"'"):e}},"string"==typeof a){if(!e.__parse)throw new TypeError("IntlMessageFormat.__parse must be set to process `message` of type `string`");this.ast=e.__parse(a)}else this.ast=a;if(this.message=a,!this.ast||"messageFormatPattern"!==this.ast.type)throw new TypeError("A message must be provided as a String or AST.");var r=Ye(e.formats,t);this.locale=Ke(n||[]);var s=i&&i.formatters||Qe();this.pattern=new Be(n,r,s).compile(this.ast)}return e.prototype.resolvedOptions=function(){return{locale:this.locale}},e.prototype.getAst=function(){return this.ast},e.defaultLocale="en",e.__parse=void 0,e.formats={number:{currency:{style:"currency"},percent:{style:"percent"}},date:{short:{month:"numeric",day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"},long:{month:"long",day:"numeric",year:"numeric"},full:{weekday:"long",month:"long",day:"numeric",year:"numeric"}},time:{short:{hour:"numeric",minute:"numeric"},medium:{hour:"numeric",minute:"numeric",second:"numeric"},long:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"},full:{hour:"numeric",minute:"numeric",second:"numeric",timeZoneName:"short"}}},e}();ea.__parse=Me.parse;var aa=Ee(Object.freeze({__proto__:null,default:ea,createDefaultFormatters:Qe,IntlMessageFormat:ea}));var na={isObjectOfUnknownValues:
|
|
18
18
|
/**
|
|
19
19
|
* @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
|
|
20
20
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
15
|
* See the License for the specific language governing permissions and
|
|
16
16
|
* limitations under the License.
|
|
17
|
-
*/const e="…",t="data:image/jpeg;base64,",n={label:"pass",minScore:.9},r={label:"average",minScore:.5},o={label:"fail"},i={label:"error"},a=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"];class l{static i18n=null;static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return"%10d ms"}static prepareReportResult(e){const n=JSON.parse(JSON.stringify(e));n.configSettings.locale||(n.configSettings.locale="en"),n.configSettings.formFactor||(n.configSettings.formFactor=n.configSettings.emulatedFormFactor);for(const e of Object.values(n.audits))if("not_applicable"!==e.scoreDisplayMode&&"not-applicable"!==e.scoreDisplayMode||(e.scoreDisplayMode="notApplicable"),e.details&&(void 0!==e.details.type&&"diagnostic"!==e.details.type||(e.details.type="debugdata"),"filmstrip"===e.details.type))for(const n of e.details.items)n.data.startsWith(t)||(n.data=t+n.data);if("object"!=typeof n.categories)throw new Error("No categories provided.");const r=new Map,[o]=n.lighthouseVersion.split(".").map(Number),i=n.categories.performance;if(o<9&&i){n.categoryGroups||(n.categoryGroups={}),n.categoryGroups.hidden={title:""};for(const e of i.auditRefs)e.group?["load-opportunities","diagnostics"].includes(e.group)&&delete e.group:e.group="hidden"}for(const e of Object.values(n.categories))e.auditRefs.forEach((e=>{e.relevantAudits&&e.relevantAudits.forEach((t=>{const n=r.get(t)||[];n.push(e),r.set(t,n)}))})),e.auditRefs.forEach((e=>{const t=n.audits[e.id];e.result=t,r.has(e.id)&&(e.relevantMetrics=r.get(e.id)),n.stackPacks&&n.stackPacks.forEach((t=>{t.descriptions[e.id]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:t.title,iconDataURL:t.iconDataURL,description:t.descriptions[e.id]}))}))}));return n}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=n.minScore}}static calculateRating(e,t){if("manual"===t||"notApplicable"===t)return n.label;if("error"===t)return i.label;if(null===e)return o.label;let a=o.label;return e>=n.minScore?a=n.label:e>=r.minScore&&(a=r.label),a}static splitMarkdownCodeSpans(e){const t=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){const r=n[e];if(!r)continue;const o=e%2!=0;t.push({isCode:o,text:r})}return t}static splitMarkdownLink(e){const t=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){const[e,r,o]=n.splice(0,3);e&&t.push({isLink:!1,text:e}),r&&o&&t.push({isLink:!0,text:r,linkHref:o})}return t}static getURLDisplayName(t,n){const r=void 0!==(n=n||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?n.numPathParts:2,o=void 0===n.preserveQuery||n.preserveQuery,i=n.preserveHost||!1;let a;if("about:"===t.protocol||"data:"===t.protocol)a=t.href;else{a=t.pathname;const n=a.split("/").filter((e=>e.length));r&&n.length>r&&(a=e+n.slice(-1*r).join("/")),i&&(a=`${t.host}/${a.replace(/^\//,"")}`),o&&(a=`${a}${t.search}`)}if(a=a.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,"$1…"),a=a.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,"$1…"),a=a.replace(/(\d{3})\d{6,}/g,"$1…"),a=a.replace(/\u2026+/g,e),a.length>64&&a.includes("?")&&(a=a.replace(/\?([^=]*)(=)?.*/,"?$1$2…"),a.length>64&&(a=a.replace(/\?.*/,"?…"))),a.length>64){const t=a.lastIndexOf(".");a=t>=0?a.slice(0,63-(a.length-t))+`…${a.slice(t)}`:a.slice(0,63)+e}return a}static parseURL(e){const t=new URL(e);return{file:l.getURLDisplayName(t),hostname:t.hostname,origin:t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){const t=e.split(".").slice(-2);return a.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){const t=l.createOrReturnURL(e).hostname,n=l.getTld(t).split(".");return t.split(".").slice(-n.length).join(".")}static getEmulationDescriptions(e){let t,n,r;const o=e.throttling;switch(e.throttlingMethod){case"provided":r=n=t=l.i18n.strings.throttlingProvided;break;case"devtools":{const{cpuSlowdownMultiplier:e,requestLatencyMs:i}=o;t=`${l.i18n.formatNumber(e)}x slowdown (DevTools)`,n=`${l.i18n.formatNumber(i)} ms HTTP RTT, ${l.i18n.formatNumber(o.downloadThroughputKbps)} Kbps down, ${l.i18n.formatNumber(o.uploadThroughputKbps)} Kbps up (DevTools)`;r=(()=>562.5===i&&o.downloadThroughputKbps===1638.4*.9&&675===o.uploadThroughputKbps)()?l.i18n.strings.runtimeSlow4g:l.i18n.strings.runtimeCustom;break}case"simulate":{const{cpuSlowdownMultiplier:e,rttMs:i,throughputKbps:a}=o;t=`${l.i18n.formatNumber(e)}x slowdown (Simulated)`,n=`${l.i18n.formatNumber(i)} ms TCP RTT, ${l.i18n.formatNumber(a)} Kbps throughput (Simulated)`;r=(()=>150===i&&1638.4===a)()?l.i18n.strings.runtimeSlow4g:l.i18n.strings.runtimeCustom;break}default:r=t=n=l.i18n.strings.runtimeUnknown}return{deviceEmulation:{mobile:l.i18n.strings.runtimeMobileEmulation,desktop:l.i18n.strings.runtimeDesktopEmulation}[e.formFactor]||l.i18n.strings.runtimeNoEmulation,cpuThrottling:t,networkThrottling:n,summary:r}}static filterRelevantLines(e,t,n){if(0===t.length)return e.slice(0,2*n+1);const r=new Set;return(t=t.sort(((e,t)=>(e.lineNumber||0)-(t.lineNumber||0)))).forEach((({lineNumber:e})=>{let t=e-n,o=e+n;for(;t<1;)t++,o++;r.has(t-3-1)&&(t-=3);for(let e=t;e<=o;e++){const t=e;r.add(t)}})),e.filter((e=>r.has(e.lineNumber)))}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return"timespan"===e||"snapshot"===e}static calculateCategoryFraction(e){let t=0,n=0,r=0,o=0;for(const i of e.auditRefs){const e=l.showAsPassed(i.result);"hidden"!==i.group&&"manual"!==i.result.scoreDisplayMode&&"notApplicable"!==i.result.scoreDisplayMode&&("informative"!==i.result.scoreDisplayMode?(++t,o+=i.weight,e&&n++):e||++r)}return{numPassed:n,numPassableAudits:t,numInformative:r,totalWeight:o}}}l.reportJson=null,l.getUniqueSuffix=(()=>{let e=0;return function(){return e++}})();l.UIStrings={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",viewOriginalTraceLabel:"View Original Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G4",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling"};
|
|
17
|
+
*/const e="…",t="data:image/jpeg;base64,",n={label:"pass",minScore:.9},r={label:"average",minScore:.5},o={label:"fail"},i={label:"error"},a=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"];class l{static i18n=null;static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return"%10d ms"}static prepareReportResult(e){const n=JSON.parse(JSON.stringify(e));n.configSettings.locale||(n.configSettings.locale="en"),n.configSettings.formFactor||(n.configSettings.formFactor=n.configSettings.emulatedFormFactor);for(const e of Object.values(n.audits))if("not_applicable"!==e.scoreDisplayMode&&"not-applicable"!==e.scoreDisplayMode||(e.scoreDisplayMode="notApplicable"),e.details&&(void 0!==e.details.type&&"diagnostic"!==e.details.type||(e.details.type="debugdata"),"filmstrip"===e.details.type))for(const n of e.details.items)n.data.startsWith(t)||(n.data=t+n.data);if("object"!=typeof n.categories)throw new Error("No categories provided.");const r=new Map,[o]=n.lighthouseVersion.split(".").map(Number),i=n.categories.performance;if(o<9&&i){n.categoryGroups||(n.categoryGroups={}),n.categoryGroups.hidden={title:""};for(const e of i.auditRefs)e.group?["load-opportunities","diagnostics"].includes(e.group)&&delete e.group:e.group="hidden"}for(const e of Object.values(n.categories))e.auditRefs.forEach((e=>{e.relevantAudits&&e.relevantAudits.forEach((t=>{const n=r.get(t)||[];n.push(e),r.set(t,n)}))})),e.auditRefs.forEach((e=>{const t=n.audits[e.id];e.result=t,r.has(e.id)&&(e.relevantMetrics=r.get(e.id)),n.stackPacks&&n.stackPacks.forEach((t=>{t.descriptions[e.id]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:t.title,iconDataURL:t.iconDataURL,description:t.descriptions[e.id]}))}))}));return n}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=n.minScore}}static calculateRating(e,t){if("manual"===t||"notApplicable"===t)return n.label;if("error"===t)return i.label;if(null===e)return o.label;let a=o.label;return e>=n.minScore?a=n.label:e>=r.minScore&&(a=r.label),a}static splitMarkdownCodeSpans(e){const t=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){const r=n[e];if(!r)continue;const o=e%2!=0;t.push({isCode:o,text:r})}return t}static splitMarkdownLink(e){const t=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){const[e,r,o]=n.splice(0,3);e&&t.push({isLink:!1,text:e}),r&&o&&t.push({isLink:!0,text:r,linkHref:o})}return t}static getURLDisplayName(t,n){const r=void 0!==(n=n||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?n.numPathParts:2,o=void 0===n.preserveQuery||n.preserveQuery,i=n.preserveHost||!1;let a;if("about:"===t.protocol||"data:"===t.protocol)a=t.href;else{a=t.pathname;const n=a.split("/").filter((e=>e.length));r&&n.length>r&&(a=e+n.slice(-1*r).join("/")),i&&(a=`${t.host}/${a.replace(/^\//,"")}`),o&&(a=`${a}${t.search}`)}if("data:"!==t.protocol&&(a=a.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,"$1…"),a=a.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,"$1…"),a=a.replace(/(\d{3})\d{6,}/g,"$1…"),a=a.replace(/\u2026+/g,e),a.length>64&&a.includes("?")&&(a=a.replace(/\?([^=]*)(=)?.*/,"?$1$2…"),a.length>64&&(a=a.replace(/\?.*/,"?…")))),a.length>64){const t=a.lastIndexOf(".");a=t>=0?a.slice(0,63-(a.length-t))+`…${a.slice(t)}`:a.slice(0,63)+e}return a}static parseURL(e){const t=new URL(e);return{file:l.getURLDisplayName(t),hostname:t.hostname,origin:t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){const t=e.split(".").slice(-2);return a.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){const t=l.createOrReturnURL(e).hostname,n=l.getTld(t).split(".");return t.split(".").slice(-n.length).join(".")}static getEmulationDescriptions(e){let t,n,r;const o=e.throttling;switch(e.throttlingMethod){case"provided":r=n=t=l.i18n.strings.throttlingProvided;break;case"devtools":{const{cpuSlowdownMultiplier:e,requestLatencyMs:i}=o;t=`${l.i18n.formatNumber(e)}x slowdown (DevTools)`,n=`${l.i18n.formatNumber(i)} ms HTTP RTT, ${l.i18n.formatNumber(o.downloadThroughputKbps)} Kbps down, ${l.i18n.formatNumber(o.uploadThroughputKbps)} Kbps up (DevTools)`;r=(()=>562.5===i&&o.downloadThroughputKbps===1638.4*.9&&675===o.uploadThroughputKbps)()?l.i18n.strings.runtimeSlow4g:l.i18n.strings.runtimeCustom;break}case"simulate":{const{cpuSlowdownMultiplier:e,rttMs:i,throughputKbps:a}=o;t=`${l.i18n.formatNumber(e)}x slowdown (Simulated)`,n=`${l.i18n.formatNumber(i)} ms TCP RTT, ${l.i18n.formatNumber(a)} Kbps throughput (Simulated)`;r=(()=>150===i&&1638.4===a)()?l.i18n.strings.runtimeSlow4g:l.i18n.strings.runtimeCustom;break}default:r=t=n=l.i18n.strings.runtimeUnknown}return{deviceEmulation:{mobile:l.i18n.strings.runtimeMobileEmulation,desktop:l.i18n.strings.runtimeDesktopEmulation}[e.formFactor]||l.i18n.strings.runtimeNoEmulation,cpuThrottling:t,networkThrottling:n,summary:r}}static filterRelevantLines(e,t,n){if(0===t.length)return e.slice(0,2*n+1);const r=new Set;return(t=t.sort(((e,t)=>(e.lineNumber||0)-(t.lineNumber||0)))).forEach((({lineNumber:e})=>{let t=e-n,o=e+n;for(;t<1;)t++,o++;r.has(t-3-1)&&(t-=3);for(let e=t;e<=o;e++){const t=e;r.add(t)}})),e.filter((e=>r.has(e.lineNumber)))}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return"timespan"===e||"snapshot"===e}static calculateCategoryFraction(e){let t=0,n=0,r=0,o=0;for(const i of e.auditRefs){const e=l.showAsPassed(i.result);"hidden"!==i.group&&"manual"!==i.result.scoreDisplayMode&&"notApplicable"!==i.result.scoreDisplayMode&&("informative"!==i.result.scoreDisplayMode?(++t,o+=i.weight,e&&n++):e||++r)}return{numPassed:n,numPassableAudits:t,numInformative:r,totalWeight:o}}}l.reportJson=null,l.getUniqueSuffix=(()=>{let e=0;return function(){return e++}})();l.UIStrings={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",viewOriginalTraceLabel:"View Original Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G4",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling"};
|
|
18
18
|
/**
|
|
19
19
|
* @license
|
|
20
20
|
* Copyright 2017 The Lighthouse Authors. All Rights Reserved.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
const Audit = require('./audit.js');
|
|
9
9
|
const URL = require('../lib/url-shim.js');
|
|
10
10
|
const NetworkRecords = require('../computed/network-records.js');
|
|
11
|
+
const MainResource = require('../computed/main-resource.js');
|
|
11
12
|
|
|
12
13
|
class NetworkRequests extends Audit {
|
|
13
14
|
/**
|
|
@@ -19,7 +20,7 @@ class NetworkRequests extends Audit {
|
|
|
19
20
|
scoreDisplayMode: Audit.SCORING_MODES.INFORMATIVE,
|
|
20
21
|
title: 'Network Requests',
|
|
21
22
|
description: 'Lists the network requests that were made during page load.',
|
|
22
|
-
requiredArtifacts: ['devtoolsLogs'],
|
|
23
|
+
requiredArtifacts: ['devtoolsLogs', 'URL', 'GatherContext'],
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -28,75 +29,91 @@ class NetworkRequests extends Audit {
|
|
|
28
29
|
* @param {LH.Audit.Context} context
|
|
29
30
|
* @return {Promise<LH.Audit.Product>}
|
|
30
31
|
*/
|
|
31
|
-
static audit(artifacts, context) {
|
|
32
|
+
static async audit(artifacts, context) {
|
|
32
33
|
const devtoolsLog = artifacts.devtoolsLogs[Audit.DEFAULT_PASS];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const records = await NetworkRecords.request(devtoolsLog, context);
|
|
35
|
+
const earliestStartTime = records.reduce(
|
|
36
|
+
(min, record) => Math.min(min, record.startTime),
|
|
37
|
+
Infinity
|
|
38
|
+
);
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
// Optional mainFrameId check because the main resource is only available for
|
|
41
|
+
// navigations. TODO: https://github.com/GoogleChrome/lighthouse/issues/14157
|
|
42
|
+
// for the general solution to this.
|
|
43
|
+
/** @type {string|undefined} */
|
|
44
|
+
let mainFrameId;
|
|
45
|
+
if (artifacts.GatherContext.gatherMode === 'navigation') {
|
|
46
|
+
const mainResource = await MainResource.request({devtoolsLog, URL: artifacts.URL}, context);
|
|
47
|
+
mainFrameId = mainResource.frameId;
|
|
48
|
+
}
|
|
42
49
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const requestMs = record.lrStatistics?.requestMs;
|
|
47
|
-
const responseMs = record.lrStatistics?.responseMs;
|
|
50
|
+
/** @param {number} time */
|
|
51
|
+
const timeToMs = time => time < earliestStartTime || !Number.isFinite(time) ?
|
|
52
|
+
undefined : (time - earliestStartTime) * 1000;
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
resourceType: record.resourceType,
|
|
60
|
-
lrEndTimeDeltaMs: endTimeDeltaMs, // Only exists on Lightrider runs
|
|
61
|
-
lrTCPMs: TCPMs, // Only exists on Lightrider runs
|
|
62
|
-
lrRequestMs: requestMs, // Only exists on Lightrider runs
|
|
63
|
-
lrResponseMs: responseMs, // Only exists on Lightrider runs
|
|
64
|
-
};
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// NOTE(i18n): this audit is only for debug info in the LHR and does not appear in the report.
|
|
68
|
-
/** @type {LH.Audit.Details.Table['headings']} */
|
|
69
|
-
const headings = [
|
|
70
|
-
{key: 'url', itemType: 'url', text: 'URL'},
|
|
71
|
-
{key: 'protocol', itemType: 'text', text: 'Protocol'},
|
|
72
|
-
{key: 'startTime', itemType: 'ms', granularity: 1, text: 'Start Time'},
|
|
73
|
-
{key: 'endTime', itemType: 'ms', granularity: 1, text: 'End Time'},
|
|
74
|
-
{
|
|
75
|
-
key: 'transferSize',
|
|
76
|
-
itemType: 'bytes',
|
|
77
|
-
displayUnit: 'kb',
|
|
78
|
-
granularity: 1,
|
|
79
|
-
text: 'Transfer Size',
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
key: 'resourceSize',
|
|
83
|
-
itemType: 'bytes',
|
|
84
|
-
displayUnit: 'kb',
|
|
85
|
-
granularity: 1,
|
|
86
|
-
text: 'Resource Size',
|
|
87
|
-
},
|
|
88
|
-
{key: 'statusCode', itemType: 'text', text: 'Status Code'},
|
|
89
|
-
{key: 'mimeType', itemType: 'text', text: 'MIME Type'},
|
|
90
|
-
{key: 'resourceType', itemType: 'text', text: 'Resource Type'},
|
|
91
|
-
];
|
|
92
|
-
|
|
93
|
-
const tableDetails = Audit.makeTableDetails(headings, results);
|
|
54
|
+
const results = records.map(record => {
|
|
55
|
+
const endTimeDeltaMs = record.lrStatistics?.endTimeDeltaMs;
|
|
56
|
+
const TCPMs = record.lrStatistics?.TCPMs;
|
|
57
|
+
const requestMs = record.lrStatistics?.requestMs;
|
|
58
|
+
const responseMs = record.lrStatistics?.responseMs;
|
|
59
|
+
// Default these to undefined so omitted from JSON in the negative case.
|
|
60
|
+
const isLinkPreload = record.isLinkPreload || undefined;
|
|
61
|
+
const experimentalFromMainFrame = mainFrameId ?
|
|
62
|
+
((record.frameId === mainFrameId) || undefined) :
|
|
63
|
+
undefined;
|
|
94
64
|
|
|
95
65
|
return {
|
|
96
|
-
|
|
97
|
-
|
|
66
|
+
url: URL.elideDataURI(record.url),
|
|
67
|
+
protocol: record.protocol,
|
|
68
|
+
startTime: timeToMs(record.startTime),
|
|
69
|
+
endTime: timeToMs(record.endTime),
|
|
70
|
+
finished: record.finished,
|
|
71
|
+
transferSize: record.transferSize,
|
|
72
|
+
resourceSize: record.resourceSize,
|
|
73
|
+
statusCode: record.statusCode,
|
|
74
|
+
mimeType: record.mimeType,
|
|
75
|
+
resourceType: record.resourceType,
|
|
76
|
+
isLinkPreload,
|
|
77
|
+
experimentalFromMainFrame,
|
|
78
|
+
lrEndTimeDeltaMs: endTimeDeltaMs, // Only exists on Lightrider runs
|
|
79
|
+
lrTCPMs: TCPMs, // Only exists on Lightrider runs
|
|
80
|
+
lrRequestMs: requestMs, // Only exists on Lightrider runs
|
|
81
|
+
lrResponseMs: responseMs, // Only exists on Lightrider runs
|
|
98
82
|
};
|
|
99
83
|
});
|
|
84
|
+
|
|
85
|
+
// NOTE(i18n): this audit is only for debug info in the LHR and does not appear in the report.
|
|
86
|
+
/** @type {LH.Audit.Details.Table['headings']} */
|
|
87
|
+
const headings = [
|
|
88
|
+
{key: 'url', itemType: 'url', text: 'URL'},
|
|
89
|
+
{key: 'protocol', itemType: 'text', text: 'Protocol'},
|
|
90
|
+
{key: 'startTime', itemType: 'ms', granularity: 1, text: 'Start Time'},
|
|
91
|
+
{key: 'endTime', itemType: 'ms', granularity: 1, text: 'End Time'},
|
|
92
|
+
{
|
|
93
|
+
key: 'transferSize',
|
|
94
|
+
itemType: 'bytes',
|
|
95
|
+
displayUnit: 'kb',
|
|
96
|
+
granularity: 1,
|
|
97
|
+
text: 'Transfer Size',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: 'resourceSize',
|
|
101
|
+
itemType: 'bytes',
|
|
102
|
+
displayUnit: 'kb',
|
|
103
|
+
granularity: 1,
|
|
104
|
+
text: 'Resource Size',
|
|
105
|
+
},
|
|
106
|
+
{key: 'statusCode', itemType: 'text', text: 'Status Code'},
|
|
107
|
+
{key: 'mimeType', itemType: 'text', text: 'MIME Type'},
|
|
108
|
+
{key: 'resourceType', itemType: 'text', text: 'Resource Type'},
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
const tableDetails = Audit.makeTableDetails(headings, results);
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
score: 1,
|
|
115
|
+
details: tableDetails,
|
|
116
|
+
};
|
|
100
117
|
}
|
|
101
118
|
}
|
|
102
119
|
|
|
@@ -23,6 +23,10 @@ const UIStrings = {
|
|
|
23
23
|
|
|
24
24
|
const str_ = i18n.createMessageInstanceIdFn(__filename, UIStrings);
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {Array<{url: string, initiatorType: string}>} InitiatorPath
|
|
28
|
+
*/
|
|
29
|
+
|
|
26
30
|
class PreloadLCPImageAudit extends Audit {
|
|
27
31
|
/**
|
|
28
32
|
* @return {LH.Audit.Meta}
|
|
@@ -86,22 +90,33 @@ class PreloadLCPImageAudit extends Audit {
|
|
|
86
90
|
* @param {LH.Gatherer.Simulation.GraphNode} graph
|
|
87
91
|
* @param {LH.Artifacts.TraceElement|undefined} lcpElement
|
|
88
92
|
* @param {Array<LH.Artifacts.ImageElement>} imageElements
|
|
89
|
-
* @return {LH.Gatherer.Simulation.GraphNetworkNode
|
|
93
|
+
* @return {{lcpNodeToPreload?: LH.Gatherer.Simulation.GraphNetworkNode, initiatorPath?: InitiatorPath}}
|
|
90
94
|
*/
|
|
91
95
|
static getLCPNodeToPreload(mainResource, graph, lcpElement, imageElements) {
|
|
92
|
-
if (!lcpElement) return
|
|
96
|
+
if (!lcpElement) return {};
|
|
93
97
|
|
|
94
98
|
const lcpImageElement = imageElements.find(elem => {
|
|
95
99
|
return elem.node.devtoolsNodePath === lcpElement.node.devtoolsNodePath;
|
|
96
100
|
});
|
|
97
101
|
|
|
98
|
-
if (!lcpImageElement) return
|
|
102
|
+
if (!lcpImageElement) return {};
|
|
99
103
|
const lcpUrl = lcpImageElement.src;
|
|
100
104
|
const {lcpNode, path} = PreloadLCPImageAudit.findLCPNode(graph, lcpUrl);
|
|
101
|
-
if (!lcpNode || !path) return
|
|
105
|
+
if (!lcpNode || !path) return {};
|
|
106
|
+
|
|
102
107
|
// eslint-disable-next-line max-len
|
|
103
108
|
const shouldPreload = PreloadLCPImageAudit.shouldPreloadRequest(lcpNode.record, mainResource, path);
|
|
104
|
-
|
|
109
|
+
const lcpNodeToPreload = shouldPreload ? lcpNode : undefined;
|
|
110
|
+
|
|
111
|
+
const initiatorPath = [
|
|
112
|
+
{url: lcpNode.record.url, initiatorType: lcpNode.initiatorType},
|
|
113
|
+
...path.map(n => ({url: n.record.url, initiatorType: n.initiatorType})),
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
lcpNodeToPreload,
|
|
118
|
+
initiatorPath,
|
|
119
|
+
};
|
|
105
120
|
}
|
|
106
121
|
|
|
107
122
|
/**
|
|
@@ -215,10 +230,10 @@ class PreloadLCPImageAudit extends Audit {
|
|
|
215
230
|
|
|
216
231
|
const graph = lanternLCP.pessimisticGraph;
|
|
217
232
|
// eslint-disable-next-line max-len
|
|
218
|
-
const
|
|
233
|
+
const {lcpNodeToPreload, initiatorPath} = PreloadLCPImageAudit.getLCPNodeToPreload(mainResource, graph, lcpElement, artifacts.ImageElements);
|
|
219
234
|
|
|
220
235
|
const {results, wastedMs} =
|
|
221
|
-
PreloadLCPImageAudit.computeWasteWithGraph(lcpElement,
|
|
236
|
+
PreloadLCPImageAudit.computeWasteWithGraph(lcpElement, lcpNodeToPreload, graph, simulator);
|
|
222
237
|
|
|
223
238
|
/** @type {LH.Audit.Details.Opportunity['headings']} */
|
|
224
239
|
const headings = [
|
|
@@ -228,6 +243,17 @@ class PreloadLCPImageAudit extends Audit {
|
|
|
228
243
|
];
|
|
229
244
|
const details = Audit.makeOpportunityDetails(headings, results, wastedMs);
|
|
230
245
|
|
|
246
|
+
// If LCP element was an image and had valid network records (regardless of
|
|
247
|
+
// if it should be preloaded), it will be found first in the `initiatorPath`.
|
|
248
|
+
// Otherwise path and length will be undefined.
|
|
249
|
+
if (initiatorPath) {
|
|
250
|
+
details.debugData = {
|
|
251
|
+
type: 'debugdata',
|
|
252
|
+
initiatorPath,
|
|
253
|
+
pathLength: initiatorPath.length,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
231
257
|
return {
|
|
232
258
|
score: UnusedBytes.scoreForWastedMs(wastedMs),
|
|
233
259
|
numericValue: wastedMs,
|
|
@@ -304,20 +304,27 @@ class Driver {
|
|
|
304
304
|
return;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
//
|
|
308
|
-
//
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
//
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
//
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
307
|
+
// Note: This is only reached for _out of process_ iframes (OOPIFs).
|
|
308
|
+
// If the iframe is in the same process as its embedding document, that means they
|
|
309
|
+
// share the same target.
|
|
310
|
+
|
|
311
|
+
// A target won't acknowledge/respond to protocol methods (or, at least for Network.enable)
|
|
312
|
+
// until it is resumed. But also we're paranoid about sending Network.enable _slightly_ too late,
|
|
313
|
+
// so we issue that method first. Therefore, we don't await on this serially, but await all at once.
|
|
314
|
+
await Promise.all([
|
|
315
|
+
// Events from subtargets will be stringified and sent back on `Target.receivedMessageFromTarget`.
|
|
316
|
+
// We want to receive information about network requests from iframes, so enable the Network domain.
|
|
317
|
+
this.sendCommandToSession('Network.enable', event.sessionId),
|
|
318
|
+
// We also want to receive information about subtargets of subtargets, so make sure we autoattach recursively.
|
|
319
|
+
this.sendCommandToSession('Target.setAutoAttach', event.sessionId, {
|
|
320
|
+
autoAttach: true,
|
|
321
|
+
flatten: true,
|
|
322
|
+
// Pause targets on startup so we don't miss anything
|
|
323
|
+
waitForDebuggerOnStart: true,
|
|
324
|
+
}),
|
|
325
|
+
// We suspended the target when we auto-attached, so make sure it goes back to being normal.
|
|
326
|
+
this.sendCommandToSession('Runtime.runIfWaitingForDebugger', event.sessionId),
|
|
327
|
+
]);
|
|
321
328
|
}
|
|
322
329
|
|
|
323
330
|
/**
|
|
@@ -318,24 +318,26 @@ class Util {
|
|
|
318
318
|
}
|
|
319
319
|
|
|
320
320
|
const MAX_LENGTH = 64;
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
321
|
+
if (parsedUrl.protocol !== 'data:') {
|
|
322
|
+
// Always elide hexadecimal hash
|
|
323
|
+
name = name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, `$1${ELLIPSIS}`);
|
|
324
|
+
// Also elide other hash-like mixed-case strings
|
|
325
|
+
name = name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,
|
|
326
|
+
`$1${ELLIPSIS}`);
|
|
327
|
+
// Also elide long number sequences
|
|
328
|
+
name = name.replace(/(\d{3})\d{6,}/g, `$1${ELLIPSIS}`);
|
|
329
|
+
// Merge any adjacent ellipses
|
|
330
|
+
name = name.replace(/\u2026+/g, ELLIPSIS);
|
|
331
|
+
|
|
332
|
+
// Elide query params first
|
|
333
|
+
if (name.length > MAX_LENGTH && name.includes('?')) {
|
|
334
|
+
// Try to leave the first query parameter intact
|
|
335
|
+
name = name.replace(/\?([^=]*)(=)?.*/, `?$1$2${ELLIPSIS}`);
|
|
336
|
+
|
|
337
|
+
// Remove it all if it's still too long
|
|
338
|
+
if (name.length > MAX_LENGTH) {
|
|
339
|
+
name = name.replace(/\?.*/, `?${ELLIPSIS}`);
|
|
340
|
+
}
|
|
339
341
|
}
|
|
340
342
|
}
|
|
341
343
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lighthouse",
|
|
3
|
-
"version": "9.6.
|
|
3
|
+
"version": "9.6.4",
|
|
4
4
|
"description": "Automated auditing, performance metrics, and best practices for the web.",
|
|
5
5
|
"main": "./lighthouse-core/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
"jpeg-js": "^0.4.3",
|
|
193
193
|
"js-library-detector": "^6.5.0",
|
|
194
194
|
"lighthouse-logger": "^1.3.0",
|
|
195
|
-
"lighthouse-stack-packs": "
|
|
195
|
+
"lighthouse-stack-packs": "1.8.2",
|
|
196
196
|
"lodash": "^4.17.21",
|
|
197
197
|
"lookup-closest-locale": "6.2.0",
|
|
198
198
|
"metaviewport-parser": "0.2.0",
|
package/report/renderer/util.js
CHANGED
|
@@ -315,24 +315,26 @@ class Util {
|
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
const MAX_LENGTH = 64;
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
318
|
+
if (parsedUrl.protocol !== 'data:') {
|
|
319
|
+
// Always elide hexadecimal hash
|
|
320
|
+
name = name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, `$1${ELLIPSIS}`);
|
|
321
|
+
// Also elide other hash-like mixed-case strings
|
|
322
|
+
name = name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,
|
|
323
|
+
`$1${ELLIPSIS}`);
|
|
324
|
+
// Also elide long number sequences
|
|
325
|
+
name = name.replace(/(\d{3})\d{6,}/g, `$1${ELLIPSIS}`);
|
|
326
|
+
// Merge any adjacent ellipses
|
|
327
|
+
name = name.replace(/\u2026+/g, ELLIPSIS);
|
|
328
|
+
|
|
329
|
+
// Elide query params first
|
|
330
|
+
if (name.length > MAX_LENGTH && name.includes('?')) {
|
|
331
|
+
// Try to leave the first query parameter intact
|
|
332
|
+
name = name.replace(/\?([^=]*)(=)?.*/, `?$1$2${ELLIPSIS}`);
|
|
333
|
+
|
|
334
|
+
// Remove it all if it's still too long
|
|
335
|
+
if (name.length > MAX_LENGTH) {
|
|
336
|
+
name = name.replace(/\?.*/, `?${ELLIPSIS}`);
|
|
337
|
+
}
|
|
336
338
|
}
|
|
337
339
|
}
|
|
338
340
|
|
|
@@ -2586,7 +2586,7 @@
|
|
|
2586
2586
|
"message": "If you are using React Router, minimize usage of the `<Redirect>` component for [route navigations](https://reacttraining.com/react-router/web/api/Redirect)."
|
|
2587
2587
|
},
|
|
2588
2588
|
"node_modules/lighthouse-stack-packs/packs/react.js | server-response-time": {
|
|
2589
|
-
"message": "If you are server-side rendering any React components, consider using `
|
|
2589
|
+
"message": "If you are server-side rendering any React components, consider using `renderToPipeableStream()` or `renderToStaticNodeStream()` to allow the client to receive and hydrate different parts of the markup instead of all at once. [Learn more](https://reactjs.org/docs/react-dom-server.html#renderToPipeableStream)."
|
|
2590
2590
|
},
|
|
2591
2591
|
"node_modules/lighthouse-stack-packs/packs/react.js | unminified-css": {
|
|
2592
2592
|
"message": "If your build system minifies CSS files automatically, ensure that you are deploying the production build of your application. You can check this with the React Developer Tools extension. [Learn more](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build)."
|
|
@@ -2604,7 +2604,7 @@
|
|
|
2604
2604
|
"message": "Consider uploading your GIF to a service which will make it available to embed as an HTML5 video."
|
|
2605
2605
|
},
|
|
2606
2606
|
"node_modules/lighthouse-stack-packs/packs/wordpress.js | modern-image-formats": {
|
|
2607
|
-
"message": "Consider using
|
|
2607
|
+
"message": "Consider using the [Performance Lab](https://wordpress.org/plugins/performance-lab/) plugin to automatically convert your uploaded JPEG images into WebP, wherever supported."
|
|
2608
2608
|
},
|
|
2609
2609
|
"node_modules/lighthouse-stack-packs/packs/wordpress.js | offscreen-images": {
|
|
2610
2610
|
"message": "Install a [lazy-load WordPress plugin](https://wordpress.org/plugins/search/lazy+load/) that provides the ability to defer any offscreen images, or switch to a theme that provides that functionality. Also consider using [the AMP plugin](https://wordpress.org/plugins/amp/)."
|
|
@@ -2586,7 +2586,7 @@
|
|
|
2586
2586
|
"message": "Îf́ ŷóû ár̂é ûśîńĝ Ŕêáĉt́ R̂óût́êŕ, m̂ín̂ím̂íẑé ûśâǵê óf̂ t́ĥé `<Redirect>` ĉóm̂ṕôńêńt̂ f́ôŕ [r̂óût́ê ńâv́îǵât́îón̂ś](https://reacttraining.com/react-router/web/api/Redirect)."
|
|
2587
2587
|
},
|
|
2588
2588
|
"node_modules/lighthouse-stack-packs/packs/react.js | server-response-time": {
|
|
2589
|
-
"message": "Îf́ ŷóû ár̂é ŝér̂v́êŕ-ŝíd̂é r̂én̂d́êŕîńĝ án̂ý R̂éâćt̂ ćôḿp̂ón̂én̂t́ŝ, ćôńŝíd̂ér̂ úŝín̂ǵ `
|
|
2589
|
+
"message": "Îf́ ŷóû ár̂é ŝér̂v́êŕ-ŝíd̂é r̂én̂d́êŕîńĝ án̂ý R̂éâćt̂ ćôḿp̂ón̂én̂t́ŝ, ćôńŝíd̂ér̂ úŝín̂ǵ `renderToPipeableStream()` ôŕ `renderToStaticNodeStream()` t̂ó âĺl̂óŵ t́ĥé ĉĺîén̂t́ t̂ó r̂éĉéîv́ê án̂d́ ĥýd̂ŕât́ê d́îf́f̂ér̂én̂t́ p̂ár̂t́ŝ óf̂ t́ĥé m̂ár̂ḱûṕ îńŝt́êád̂ óf̂ ál̂ĺ ât́ ôńĉé. [L̂éâŕn̂ ḿôŕê](https://reactjs.org/docs/react-dom-server.html#renderToPipeableStream)."
|
|
2590
2590
|
},
|
|
2591
2591
|
"node_modules/lighthouse-stack-packs/packs/react.js | unminified-css": {
|
|
2592
2592
|
"message": "Îf́ ŷóûŕ b̂úîĺd̂ śŷśt̂ém̂ ḿîńîf́îéŝ ĆŜŚ f̂íl̂éŝ áût́ôḿât́îćâĺl̂ý, êńŝúr̂é t̂h́ât́ ŷóû ár̂é d̂ép̂ĺôýîńĝ t́ĥé p̂ŕôd́ûćt̂íôń b̂úîĺd̂ óf̂ ýôúr̂ áp̂ṕl̂íĉát̂íôń. Ŷóû ćâń ĉh́êćk̂ t́ĥíŝ ẃît́ĥ t́ĥé R̂éâćt̂ D́êv́êĺôṕêŕ T̂óôĺŝ éx̂t́êńŝíôń. [L̂éâŕn̂ ḿôŕê](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build)."
|
|
@@ -2604,7 +2604,7 @@
|
|
|
2604
2604
|
"message": "Ĉón̂śîd́êŕ ûṕl̂óâd́îńĝ ýôúr̂ ǴÎF́ t̂ó â śêŕv̂íĉé ŵh́îćĥ ẃîĺl̂ ḿâḱê ít̂ áv̂áîĺâb́l̂é t̂ó êḿb̂éd̂ áŝ án̂ H́T̂ḾL̂5 v́îd́êó."
|
|
2605
2605
|
},
|
|
2606
2606
|
"node_modules/lighthouse-stack-packs/packs/wordpress.js | modern-image-formats": {
|
|
2607
|
-
"message": "Ĉón̂śîd́êŕ ûśîńĝ
|
|
2607
|
+
"message": "Ĉón̂śîd́êŕ ûśîńĝ t́ĥé [P̂ér̂f́ôŕm̂án̂ćê Ĺâb́](https://wordpress.org/plugins/performance-lab/) p̂ĺûǵîń t̂ó âút̂óm̂át̂íĉál̂ĺŷ ćôńv̂ér̂t́ ŷóûŕ ûṕl̂óâd́êd́ ĴṔÊǴ îḿâǵêś îńt̂ó Ŵéb̂Ṕ, ŵh́êŕêv́êŕ ŝúp̂ṕôŕt̂éd̂."
|
|
2608
2608
|
},
|
|
2609
2609
|
"node_modules/lighthouse-stack-packs/packs/wordpress.js | offscreen-images": {
|
|
2610
2610
|
"message": "Îńŝt́âĺl̂ á [l̂áẑý-l̂óâd́ Ŵór̂d́P̂ŕêśŝ ṕl̂úĝín̂](https://wordpress.org/plugins/search/lazy+load/) t́ĥát̂ ṕr̂óv̂íd̂éŝ t́ĥé âb́îĺît́ŷ t́ô d́êf́êŕ âńŷ óf̂f́ŝćr̂éêń îḿâǵêś, ôŕ ŝẃît́ĉh́ t̂ó â t́ĥém̂é t̂h́ât́ p̂ŕôv́îd́êś t̂h́ât́ f̂ún̂ćt̂íôńâĺît́ŷ. Ál̂śô ćôńŝíd̂ér̂ úŝín̂ǵ [t̂h́ê ÁM̂Ṕ p̂ĺûǵîń](https://wordpress.org/plugins/amp/)."
|