lighthouse 9.5.0-dev.20221019 → 9.5.0-dev.20221020

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/core/audits/accessibility/axe-audit.js +1 -1
  2. package/core/audits/autocomplete.js +3 -3
  3. package/core/audits/bootup-time.js +5 -5
  4. package/core/audits/byte-efficiency/duplicated-javascript.js +1 -1
  5. package/core/audits/byte-efficiency/legacy-javascript.js +1 -1
  6. package/core/audits/byte-efficiency/total-byte-weight.js +2 -2
  7. package/core/audits/byte-efficiency/uses-long-cache-ttl.js +3 -3
  8. package/core/audits/byte-efficiency/uses-responsive-images-snapshot.js +4 -4
  9. package/core/audits/csp-xss.js +3 -3
  10. package/core/audits/deprecations.js +2 -2
  11. package/core/audits/dobetterweb/dom-size.js +3 -3
  12. package/core/audits/dobetterweb/geolocation-on-start.js +1 -1
  13. package/core/audits/dobetterweb/inspector-issues.js +1 -1
  14. package/core/audits/dobetterweb/js-libraries.js +2 -2
  15. package/core/audits/dobetterweb/no-document-write.js +1 -1
  16. package/core/audits/dobetterweb/notification-on-start.js +1 -1
  17. package/core/audits/dobetterweb/password-inputs-can-be-pasted-into.js +1 -1
  18. package/core/audits/dobetterweb/uses-http2.js +2 -2
  19. package/core/audits/dobetterweb/uses-passive-event-listeners.js +1 -1
  20. package/core/audits/errors-in-console.js +4 -2
  21. package/core/audits/font-display.js +2 -2
  22. package/core/audits/image-aspect-ratio.js +4 -4
  23. package/core/audits/image-size-responsive.js +5 -5
  24. package/core/audits/installable-manifest.js +1 -1
  25. package/core/audits/is-on-https.js +2 -2
  26. package/core/audits/largest-contentful-paint-element.js +1 -1
  27. package/core/audits/layout-shift-elements.js +3 -3
  28. package/core/audits/lcp-lazy-loaded.js +1 -1
  29. package/core/audits/long-tasks.js +3 -3
  30. package/core/audits/main-thread-tasks.js +2 -2
  31. package/core/audits/mainthread-work-breakdown.js +4 -2
  32. package/core/audits/network-requests.js +11 -11
  33. package/core/audits/network-rtt.js +2 -2
  34. package/core/audits/network-server-latency.js +3 -3
  35. package/core/audits/no-unload-listeners.js +1 -1
  36. package/core/audits/non-composited-animations.js +2 -2
  37. package/core/audits/performance-budget.js +5 -5
  38. package/core/audits/preload-fonts.js +1 -1
  39. package/core/audits/resource-summary.js +3 -3
  40. package/core/audits/seo/crawlable-anchors.js +2 -2
  41. package/core/audits/seo/font-size.js +4 -4
  42. package/core/audits/seo/hreflang.js +3 -3
  43. package/core/audits/seo/is-crawlable.js +1 -1
  44. package/core/audits/seo/link-text.js +2 -2
  45. package/core/audits/seo/plugins.js +1 -1
  46. package/core/audits/seo/robots-txt.js +3 -3
  47. package/core/audits/seo/tap-targets.js +3 -3
  48. package/core/audits/themed-omnibox.js +6 -14
  49. package/core/audits/third-party-facades.js +3 -3
  50. package/core/audits/third-party-summary.js +3 -3
  51. package/core/audits/timing-budget.js +3 -3
  52. package/core/audits/unsized-images.js +2 -2
  53. package/core/audits/user-timings.js +6 -6
  54. package/core/audits/valid-source-maps.js +3 -3
  55. package/core/audits/work-during-interaction.js +6 -6
  56. package/core/lib/bfcache-strings.js +655 -0
  57. package/core/lib/deprecations-strings.js +3 -2
  58. package/core/lib/manifest-parser.js +0 -16
  59. package/core/user-flow.js +64 -8
  60. package/core/util.cjs +27 -0
  61. package/dist/report/bundle.esm.js +38 -73
  62. package/dist/report/flow.js +2 -2
  63. package/dist/report/standalone.js +2 -2
  64. package/package.json +2 -3
  65. package/report/renderer/details-renderer.js +12 -73
  66. package/report/renderer/util.js +27 -0
  67. package/report/test/renderer/details-renderer-test.js +38 -38
  68. package/report/test/renderer/util-test.js +25 -0
  69. package/shared/localization/locales/en-US.json +352 -1
  70. package/shared/localization/locales/en-XL.json +352 -1
  71. package/types/lhr/audit-details.d.ts +4 -34
@@ -4,8 +4,6 @@
4
4
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
5
5
  */
6
6
 
7
- import cssParsers from 'cssstyle/lib/parsers.js';
8
-
9
7
  const ALLOWED_DISPLAY_VALUES = [
10
8
  'fullscreen',
11
9
  'standalone',
@@ -29,14 +27,6 @@ const ALLOWED_ORIENTATION_VALUES = [
29
27
  'landscape-secondary',
30
28
  ];
31
29
 
32
- /**
33
- * @param {string} color
34
- * @return {boolean}
35
- */
36
- function isValidColor(color) {
37
- return cssParsers.valueType(color) === cssParsers.TYPES.COLOR;
38
- }
39
-
40
30
  /**
41
31
  * @param {*} raw
42
32
  * @param {boolean=} trim
@@ -72,12 +62,6 @@ function parseColor(raw) {
72
62
  return color;
73
63
  }
74
64
 
75
- // Use color parser to check CSS3 Color parsing.
76
- if (!isValidColor(color.raw)) {
77
- color.value = undefined;
78
- color.warning = 'ERROR: color parsing failed.';
79
- }
80
-
81
65
  return color;
82
66
  }
83
67
 
package/core/user-flow.js CHANGED
@@ -10,9 +10,46 @@ import {startTimespanGather} from './gather/timespan-runner.js';
10
10
  import {navigationGather} from './gather/navigation-runner.js';
11
11
  import {Runner} from './runner.js';
12
12
  import {initializeConfig} from './config/config.js';
13
+ import {getFormatted} from '../shared/localization/format.js';
14
+ import * as i18n from './lib/i18n/i18n.js';
13
15
 
14
16
  /** @typedef {WeakMap<LH.UserFlow.GatherStep, LH.Gatherer.FRGatherResult['runnerOptions']>} GatherStepRunnerOptions */
15
17
 
18
+ const UIStrings = {
19
+ /**
20
+ * @description Default name for a user flow on the given url. "User flow" refers to the series of page navigations and user interactions being tested on the page.
21
+ * @example {https://example.com} url
22
+ */
23
+ defaultFlowName: 'User flow ({url})',
24
+ /**
25
+ * @description Default name for a user flow step that analyzes a page navigation.
26
+ * @example {https://example.com} url
27
+ */
28
+ defaultNavigationName: 'Navigation report ({url})',
29
+ /**
30
+ * @description Default name for a user flow step that analyzes user interactions over a period of time.
31
+ * @example {https://example.com} url
32
+ */
33
+ defaultTimespanName: 'Timespan report ({url})',
34
+ /**
35
+ * @description Default name for a user flow step that analyzes the page state at a point in time.
36
+ * @example {https://example.com} url
37
+ */
38
+ defaultSnapshotName: 'Snapshot report ({url})',
39
+ };
40
+
41
+ const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
42
+
43
+ /**
44
+ * @param {string} message
45
+ * @param {Record<string, string | number>} values
46
+ * @param {LH.Locale} locale
47
+ */
48
+ function translate(message, values, locale) {
49
+ const icuMessage = str_(message, values);
50
+ return getFormatted(icuMessage, locale);
51
+ }
52
+
16
53
  class UserFlow {
17
54
  /**
18
55
  * @param {LH.Puppeteer.Page} page
@@ -215,23 +252,41 @@ function shortenUrl(longUrl) {
215
252
  }
216
253
 
217
254
  /**
255
+ * @param {LH.UserFlow.StepFlags|undefined} flags
218
256
  * @param {LH.Artifacts} artifacts
219
257
  * @return {string}
220
258
  */
221
- function getDefaultStepName(artifacts) {
259
+ function getStepName(flags, artifacts) {
260
+ if (flags?.name) return flags.name;
261
+
262
+ const {locale} = artifacts.settings;
222
263
  const shortUrl = shortenUrl(artifacts.URL.finalDisplayedUrl);
223
264
  switch (artifacts.GatherContext.gatherMode) {
224
265
  case 'navigation':
225
- return `Navigation report (${shortUrl})`;
266
+ return translate(UIStrings.defaultNavigationName, {url: shortUrl}, locale);
226
267
  case 'timespan':
227
- return `Timespan report (${shortUrl})`;
268
+ return translate(UIStrings.defaultTimespanName, {url: shortUrl}, locale);
228
269
  case 'snapshot':
229
- return `Snapshot report (${shortUrl})`;
270
+ return translate(UIStrings.defaultSnapshotName, {url: shortUrl}, locale);
230
271
  default:
231
272
  throw new Error('Unsupported gather mode');
232
273
  }
233
274
  }
234
275
 
276
+ /**
277
+ * @param {string|undefined} name
278
+ * @param {LH.UserFlow.GatherStep[]} gatherSteps
279
+ * @return {string}
280
+ */
281
+ function getFlowName(name, gatherSteps) {
282
+ if (name) return name;
283
+
284
+ const firstArtifacts = gatherSteps[0].artifacts;
285
+ const {locale} = firstArtifacts.settings;
286
+ const url = new URL(firstArtifacts.URL.finalDisplayedUrl).hostname;
287
+ return translate(UIStrings.defaultFlowName, {url}, locale);
288
+ }
289
+
235
290
  /**
236
291
  * @param {Array<LH.UserFlow.GatherStep>} gatherSteps
237
292
  * @param {{name?: string, config?: LH.Config.Json, gatherStepRunnerOptions?: GatherStepRunnerOptions}} options
@@ -245,7 +300,7 @@ async function auditGatherSteps(gatherSteps, options) {
245
300
  const steps = [];
246
301
  for (const gatherStep of gatherSteps) {
247
302
  const {artifacts, flags} = gatherStep;
248
- const name = flags?.name || getDefaultStepName(artifacts);
303
+ const name = getStepName(flags, artifacts);
249
304
 
250
305
  let runnerOptions = options.gatherStepRunnerOptions?.get(gatherStep);
251
306
 
@@ -266,13 +321,14 @@ async function auditGatherSteps(gatherSteps, options) {
266
321
  steps.push({lhr: result.lhr, name});
267
322
  }
268
323
 
269
- const url = new URL(gatherSteps[0].artifacts.URL.finalDisplayedUrl);
270
- const flowName = options.name || `User flow (${url.hostname})`;
271
- return {steps, name: flowName};
324
+ return {steps, name: getFlowName(options.name, gatherSteps)};
272
325
  }
273
326
 
274
327
 
275
328
  export {
276
329
  UserFlow,
277
330
  auditGatherSteps,
331
+ getStepName,
332
+ getFlowName,
333
+ UIStrings,
278
334
  };
package/core/util.cjs CHANGED
@@ -127,6 +127,33 @@ class Util {
127
127
  }
128
128
  }
129
129
  }
130
+
131
+ // Circa 10.0, table items were refactored.
132
+ if (audit.details.type === 'table') {
133
+ for (const heading of audit.details.headings) {
134
+ /** @type {{itemType: LH.Audit.Details.ItemValueType|undefined, text: string|undefined}} */
135
+ // @ts-expect-error
136
+ const {itemType, text} = heading;
137
+ if (itemType !== undefined) {
138
+ heading.valueType = itemType;
139
+ // @ts-expect-error
140
+ delete heading.itemType;
141
+ }
142
+ if (text !== undefined) {
143
+ heading.label = text;
144
+ // @ts-expect-error
145
+ delete heading.text;
146
+ }
147
+
148
+ // @ts-expect-error
149
+ const subItemsItemType = heading.subItemsHeading?.itemType;
150
+ if (heading.subItemsHeading && subItemsItemType !== undefined) {
151
+ heading.subItemsHeading.valueType = subItemsItemType;
152
+ // @ts-expect-error
153
+ delete heading.subItemsHeading.itemType;
154
+ }
155
+ }
156
+ }
130
157
  }
131
158
  }
132
159
 
@@ -123,6 +123,33 @@ class Util {
123
123
  }
124
124
  }
125
125
  }
126
+
127
+ // Circa 10.0, table items were refactored.
128
+ if (audit.details.type === 'table') {
129
+ for (const heading of audit.details.headings) {
130
+ /** @type {{itemType: LH.Audit.Details.ItemValueType|undefined, text: string|undefined}} */
131
+ // @ts-expect-error
132
+ const {itemType, text} = heading;
133
+ if (itemType !== undefined) {
134
+ heading.valueType = itemType;
135
+ // @ts-expect-error
136
+ delete heading.itemType;
137
+ }
138
+ if (text !== undefined) {
139
+ heading.label = text;
140
+ // @ts-expect-error
141
+ delete heading.text;
142
+ }
143
+
144
+ // @ts-expect-error
145
+ const subItemsItemType = heading.subItemsHeading?.itemType;
146
+ if (heading.subItemsHeading && subItemsItemType !== undefined) {
147
+ heading.subItemsHeading.valueType = subItemsItemType;
148
+ // @ts-expect-error
149
+ delete heading.subItemsHeading.itemType;
150
+ }
151
+ }
152
+ }
126
153
  }
127
154
  }
128
155
 
@@ -2893,11 +2920,10 @@ class DetailsRenderer {
2893
2920
  case 'list':
2894
2921
  return this._renderList(details);
2895
2922
  case 'table':
2923
+ case 'opportunity':
2896
2924
  return this._renderTable(details);
2897
2925
  case 'criticalrequestchain':
2898
2926
  return CriticalRequestChainRenderer.render(this._dom, details, this);
2899
- case 'opportunity':
2900
- return this._renderTable(details);
2901
2927
 
2902
2928
  // Internal-only details, not for rendering.
2903
2929
  case 'screenshot':
@@ -3055,7 +3081,7 @@ class DetailsRenderer {
3055
3081
  * based on the heading's valueType, unless the value itself has a `type`
3056
3082
  * property to override it.
3057
3083
  * @param {TableItemValue} value
3058
- * @param {LH.Audit.Details.OpportunityColumnHeading} heading
3084
+ * @param {LH.Audit.Details.TableColumnHeading} heading
3059
3085
  * @return {Element|null}
3060
3086
  */
3061
3087
  _renderTableValue(value, heading) {
@@ -3140,73 +3166,14 @@ class DetailsRenderer {
3140
3166
  }
3141
3167
  }
3142
3168
 
3143
- /**
3144
- * Get the headings of a table-like details object, converted into the
3145
- * OpportunityColumnHeading type until we have all details use the same
3146
- * heading format.
3147
- * @param {Table|OpportunityTable} tableLike
3148
- * @return {OpportunityTable['headings']}
3149
- */
3150
- _getCanonicalizedHeadingsFromTable(tableLike) {
3151
- if (tableLike.type === 'opportunity') {
3152
- return tableLike.headings;
3153
- }
3154
-
3155
- return tableLike.headings.map(heading => this._getCanonicalizedHeading(heading));
3156
- }
3157
-
3158
- /**
3159
- * Get the headings of a table-like details object, converted into the
3160
- * OpportunityColumnHeading type until we have all details use the same
3161
- * heading format.
3162
- * @param {Table['headings'][number]} heading
3163
- * @return {OpportunityTable['headings'][number]}
3164
- */
3165
- _getCanonicalizedHeading(heading) {
3166
- let subItemsHeading;
3167
- if (heading.subItemsHeading) {
3168
- subItemsHeading = this._getCanonicalizedsubItemsHeading(heading.subItemsHeading, heading);
3169
- }
3170
-
3171
- return {
3172
- key: heading.key,
3173
- valueType: heading.itemType,
3174
- subItemsHeading,
3175
- label: heading.text,
3176
- displayUnit: heading.displayUnit,
3177
- granularity: heading.granularity,
3178
- };
3179
- }
3180
-
3181
- /**
3182
- * @param {Exclude<LH.Audit.Details.TableColumnHeading['subItemsHeading'], undefined>} subItemsHeading
3183
- * @param {LH.Audit.Details.TableColumnHeading} parentHeading
3184
- * @return {LH.Audit.Details.OpportunityColumnHeading['subItemsHeading']}
3185
- */
3186
- _getCanonicalizedsubItemsHeading(subItemsHeading, parentHeading) {
3187
- // Low-friction way to prevent committing a falsy key (which is never allowed for
3188
- // a subItemsHeading) from passing in CI.
3189
- if (!subItemsHeading.key) {
3190
- // eslint-disable-next-line no-console
3191
- console.warn('key should not be null');
3192
- }
3193
-
3194
- return {
3195
- key: subItemsHeading.key || '',
3196
- valueType: subItemsHeading.itemType || parentHeading.itemType,
3197
- granularity: subItemsHeading.granularity || parentHeading.granularity,
3198
- displayUnit: subItemsHeading.displayUnit || parentHeading.displayUnit,
3199
- };
3200
- }
3201
-
3202
3169
  /**
3203
3170
  * Returns a new heading where the values are defined first by `heading.subItemsHeading`,
3204
3171
  * and secondly by `heading`. If there is no subItemsHeading, returns null, which will
3205
3172
  * be rendered as an empty column.
3206
- * @param {LH.Audit.Details.OpportunityColumnHeading} heading
3207
- * @return {LH.Audit.Details.OpportunityColumnHeading | null}
3173
+ * @param {LH.Audit.Details.TableColumnHeading} heading
3174
+ * @return {LH.Audit.Details.TableColumnHeading | null}
3208
3175
  */
3209
- _getDerivedsubItemsHeading(heading) {
3176
+ _getDerivedSubItemsHeading(heading) {
3210
3177
  if (!heading.subItemsHeading) return null;
3211
3178
  return {
3212
3179
  key: heading.subItemsHeading.key || '',
@@ -3219,7 +3186,7 @@ class DetailsRenderer {
3219
3186
 
3220
3187
  /**
3221
3188
  * @param {TableItem} item
3222
- * @param {(LH.Audit.Details.OpportunityColumnHeading | null)[]} headings
3189
+ * @param {(LH.Audit.Details.TableColumnHeading | null)[]} headings
3223
3190
  */
3224
3191
  _renderTableRow(item, headings) {
3225
3192
  const rowElem = this._dom.createElement('tr');
@@ -3256,7 +3223,7 @@ class DetailsRenderer {
3256
3223
  * Renders one or more rows from a details table item. A single table item can
3257
3224
  * expand into multiple rows, if there is a subItemsHeading.
3258
3225
  * @param {TableItem} item
3259
- * @param {LH.Audit.Details.OpportunityColumnHeading[]} headings
3226
+ * @param {LH.Audit.Details.TableColumnHeading[]} headings
3260
3227
  */
3261
3228
  _renderTableRowsFromItem(item, headings) {
3262
3229
  const fragment = this._dom.createFragment();
@@ -3264,7 +3231,7 @@ class DetailsRenderer {
3264
3231
 
3265
3232
  if (!item.subItems) return fragment;
3266
3233
 
3267
- const subItemsHeadings = headings.map(this._getDerivedsubItemsHeading);
3234
+ const subItemsHeadings = headings.map(this._getDerivedSubItemsHeading);
3268
3235
  if (!subItemsHeadings.some(Boolean)) return fragment;
3269
3236
 
3270
3237
  for (const subItem of item.subItems.items) {
@@ -3277,7 +3244,7 @@ class DetailsRenderer {
3277
3244
  }
3278
3245
 
3279
3246
  /**
3280
- * @param {OpportunityTable|Table} details
3247
+ * @param {{headings: TableColumnHeading[], items: TableItem[]}} details
3281
3248
  * @return {Element}
3282
3249
  */
3283
3250
  _renderTable(details) {
@@ -3287,9 +3254,7 @@ class DetailsRenderer {
3287
3254
  const theadElem = this._dom.createChildOf(tableElem, 'thead');
3288
3255
  const theadTrElem = this._dom.createChildOf(theadElem, 'tr');
3289
3256
 
3290
- const headings = this._getCanonicalizedHeadingsFromTable(details);
3291
-
3292
- for (const heading of headings) {
3257
+ for (const heading of details.headings) {
3293
3258
  const valueType = heading.valueType || 'text';
3294
3259
  const classes = `lh-table-column--${valueType}`;
3295
3260
  const labelEl = this._dom.createElement('div', 'lh-text');
@@ -3300,7 +3265,7 @@ class DetailsRenderer {
3300
3265
  const tbodyElem = this._dom.createChildOf(tableElem, 'tbody');
3301
3266
  let even = true;
3302
3267
  for (const item of details.items) {
3303
- const rowsFragment = this._renderTableRowsFromItem(item, headings);
3268
+ const rowsFragment = this._renderTableRowsFromItem(item, details.headings);
3304
3269
  for (const rowEl of this._dom.findAll('tr', rowsFragment)) {
3305
3270
  // For zebra styling.
3306
3271
  rowEl.classList.add(even ? 'lh-row--even' : 'lh-row--odd');
@@ -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 getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}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),a.finalDisplayedUrl=this.getFinalDisplayedUrl(a),a.mainDocumentUrl=this.getMainDocumentUrl(a);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.formatMilliseconds(o)} HTTP RTT, ${de.i18n.formatKbps(i.downloadThroughputKbps)} down, ${de.i18n.formatKbps(i.uploadThroughputKbps)} 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.formatMilliseconds(o)} TCP RTT, ${de.i18n.formatKbps(r)} 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;let me=0;de.getUniqueSuffix=()=>me++,de.resetUniqueSuffix=()=>{me=0};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 he=()=>R("svg",{width:"14",viewBox:"0 0 18 16",fill:"none",role:"img",children:R("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"})}),ge=()=>R("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a navigation report",children:R("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"})}),ve=()=>R("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a timespan report",children:[R("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"}),R("path",{d:"m 8,4 v 4 l 4,1.9999998",stroke:"currentColor","stroke-width":"1.5"})]}),fe=()=>R("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:R("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"})}),be=()=>R("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:[R("path",{d:"M0 0h24v24H0V0z",fill:"none"}),R("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"})]}),ye=()=>R("svg",{width:"15",height:"12",viewBox:"0 0 15 12",fill:"none",role:"img",children:R("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"})}),_e=()=>R("svg",{width:"16",height:"11",viewBox:"0 0 16 11",fill:"none",role:"img",children:R("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"})}),Ce=()=>R("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img",children:R("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"})}),we=()=>R("svg",{viewBox:"0 0 18 12",width:"18",height:"12",role:"img",children:[R("rect",{width:"18",height:"2",fill:"currentColor"}),R("rect",{y:"5",width:"18",height:"2",fill:"currentColor"}),R("rect",{y:"10",width:"18",height:"2",fill:"currentColor"})]}),ke=()=>R("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:R("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"})}),Ae=T(void 0),Se=T({});function Pe(e){return new URLSearchParams(location.hash.replace("#","?")).get(e)}function Ue(...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 xe(e,a){switch(e){case"navigation":return a.navigationDescription;case"timespan":return a.timespanDescription;case"snapshot":return a.snapshotDescription}}function Le(){const e=X(Ae);if(!e)throw Error("useFlowResult must be called in the FlowResultContext");return e}function ze(){const e=Le(),[a,n]=function(...e){const[a,n]=J(e.map(Pe));return q((()=>{function t(){const t=e.map(Pe);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 Ne(e,a){const n=Z(null);return K((()=>{if(!n.current)return;const a=e();return n.current.append(a),()=>{n.current?.contains(a)&&n.current.removeChild(a)}}),a),n}const Ie=()=>R("div",{className:"Separator",role:"separator"}),Te=({mode:e})=>R(h,{children:["navigation"===e&&R(ge,{}),"timespan"===e&&R(ve,{}),"snapshot"===e&&R(fe,{})]}),De=({mode:e})=>R("div",{className:"FlowSegment",children:[R("div",{className:"FlowSegment__top-line"}),e&&R(Te,{mode:e}),R("div",{className:"FlowSegment__bottom-line"})]}),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]),R("img",{className:"FlowStepThumbnail","data-testid":"FlowStepAnimatedThumbnail",src:e[o].data,style:{width:a,height:n},alt:"Animated screenshots of a page tested by Lighthouse"})},Ee=({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),R(h,{});let r;if(i?.length){if(r=i[i.length-1].data,"timespan"===e.gatherMode)return R(Re,{frames:i,width:a,height:n})}else r=t?.screenshot.data;return R(h,{children:r&&R("img",{className:"FlowStepThumbnail",src:r,style:{width:a,height:n},alt:"Screenshot of a page tested by Lighthouse"})})};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"),N=/^[0-9]/,I=ie([["0","9"]],!1,!1),T=/^[0-9a-f]/i,D=ie([["0","9"],["a","f"]],!1,!0),R=te("0",!1),E=/^[1-9]/,j=ie([["1","9"]],!1,!1),M="'",F=te("'",!1),B=/^[ \t\n\r,.+={}#]/,H=ie([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),O={type:"any"},W=/^[^{}\\\0-\x1F\x7F \t\n\r]/,G=ie(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),V=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 N.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(I)),e}function fe(){var e;return T.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(D)),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(R)),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(H))),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(O)),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(H));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(G)),e===i&&(e=Z,"\\\\"===a.substr(Z,2)?(n="\\\\",Z+=2):(n=i,0===ae&&le(V)),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 Ge(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 Oe(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 Ve(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}(),He=function(e){this.id=e},Oe=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}(He),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}(),Ge=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}(He),Ve=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 Qe.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);var Qe=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||{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)))}};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}();Qe.__parse=Me.parse,
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 getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}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),a.finalDisplayedUrl=this.getFinalDisplayedUrl(a),a.mainDocumentUrl=this.getMainDocumentUrl(a);for(const e of Object.values(a.audits))if("not_applicable"!==e.scoreDisplayMode&&"not-applicable"!==e.scoreDisplayMode||(e.scoreDisplayMode="notApplicable"),e.details){if(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("table"===e.details.type)for(const a of e.details.headings){const{itemType:e,text:n}=a;void 0!==e&&(a.valueType=e,delete a.itemType),void 0!==n&&(a.label=n,delete a.text);const t=a.subItemsHeading?.itemType;a.subItemsHeading&&void 0!==t&&(a.subItemsHeading.valueType=t,delete a.subItemsHeading.itemType)}}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.formatMilliseconds(o)} HTTP RTT, ${de.i18n.formatKbps(i.downloadThroughputKbps)} down, ${de.i18n.formatKbps(i.uploadThroughputKbps)} 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.formatMilliseconds(o)} TCP RTT, ${de.i18n.formatKbps(r)} 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;let me=0;de.getUniqueSuffix=()=>me++,de.resetUniqueSuffix=()=>{me=0};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 he=()=>R("svg",{width:"14",viewBox:"0 0 18 16",fill:"none",role:"img",children:R("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"})}),ge=()=>R("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a navigation report",children:R("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"})}),ve=()=>R("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img","aria-label":"Icon representing a timespan report",children:[R("circle",{cx:"8",cy:"8",r:"7",fill:"none",stroke:"currentColor","stroke-width":"2"}),R("path",{d:"m 8,4 v 4 l 4,1.9999998",stroke:"currentColor","stroke-width":"1.5"})]}),fe=()=>R("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:R("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"})}),be=()=>R("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:[R("path",{d:"M0 0h24v24H0V0z",fill:"none"}),R("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"})]}),ye=()=>R("svg",{width:"15",height:"12",viewBox:"0 0 15 12",fill:"none",role:"img",children:R("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"})}),_e=()=>R("svg",{width:"16",height:"11",viewBox:"0 0 16 11",fill:"none",role:"img",children:R("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"})}),Ce=()=>R("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",role:"img",children:R("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"})}),we=()=>R("svg",{viewBox:"0 0 18 12",width:"18",height:"12",role:"img",children:[R("rect",{width:"18",height:"2",fill:"currentColor"}),R("rect",{y:"5",width:"18",height:"2",fill:"currentColor"}),R("rect",{y:"10",width:"18",height:"2",fill:"currentColor"})]}),ke=()=>R("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:R("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"})}),Ae=T(void 0),Se=T({});function Pe(e){return new URLSearchParams(location.hash.replace("#","?")).get(e)}function Ue(...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 xe(e,a){switch(e){case"navigation":return a.navigationDescription;case"timespan":return a.timespanDescription;case"snapshot":return a.snapshotDescription}}function Le(){const e=X(Ae);if(!e)throw Error("useFlowResult must be called in the FlowResultContext");return e}function ze(){const e=Le(),[a,n]=function(...e){const[a,n]=J(e.map(Pe));return q((()=>{function t(){const t=e.map(Pe);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 Ne(e,a){const n=Z(null);return K((()=>{if(!n.current)return;const a=e();return n.current.append(a),()=>{n.current?.contains(a)&&n.current.removeChild(a)}}),a),n}const Ie=()=>R("div",{className:"Separator",role:"separator"}),Te=({mode:e})=>R(h,{children:["navigation"===e&&R(ge,{}),"timespan"===e&&R(ve,{}),"snapshot"===e&&R(fe,{})]}),De=({mode:e})=>R("div",{className:"FlowSegment",children:[R("div",{className:"FlowSegment__top-line"}),e&&R(Te,{mode:e}),R("div",{className:"FlowSegment__bottom-line"})]}),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]),R("img",{className:"FlowStepThumbnail","data-testid":"FlowStepAnimatedThumbnail",src:e[o].data,style:{width:a,height:n},alt:"Animated screenshots of a page tested by Lighthouse"})},Ee=({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),R(h,{});let r;if(i?.length){if(r=i[i.length-1].data,"timespan"===e.gatherMode)return R(Re,{frames:i,width:a,height:n})}else r=t?.screenshot.data;return R(h,{children:r&&R("img",{className:"FlowStepThumbnail",src:r,style:{width:a,height:n},alt:"Screenshot of a page tested by Lighthouse"})})};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"),N=/^[0-9]/,I=ie([["0","9"]],!1,!1),T=/^[0-9a-f]/i,D=ie([["0","9"],["a","f"]],!1,!0),R=te("0",!1),E=/^[1-9]/,j=ie([["1","9"]],!1,!1),M="'",F=te("'",!1),B=/^[ \t\n\r,.+={}#]/,H=ie([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),O={type:"any"},W=/^[^{}\\\0-\x1F\x7F \t\n\r]/,G=ie(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),V=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 N.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(I)),e}function fe(){var e;return T.test(a.charAt(Z))?(e=a.charAt(Z),Z++):(e=i,0===ae&&le(D)),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(R)),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(H))),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(O)),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(H));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(G)),e===i&&(e=Z,"\\\\"===a.substr(Z,2)?(n="\\\\",Z+=2):(n=i,0===ae&&le(V)),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 Ge(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 Oe(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 Ve(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}(),He=function(e){this.id=e},Oe=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}(He),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}(),Ge=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}(He),Ve=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 Qe.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);var Qe=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||{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)))}};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}();Qe.__parse=Me.parse,
18
18
  /**
19
19
  * @license Copyright 2021 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
@@ -101,7 +101,7 @@ class Ca{constructor(e,a){this._document=e,this._lighthouseChannel="unknown",thi
101
101
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
102
102
  * See the License for the specific language governing permissions and
103
103
  * limitations under the License.
104
- */const Ua=["http://","https://","data:"];class xa{constructor(e,a={}){this._dom=e,this._fullPageScreenshot=a.fullPageScreenshot}render(e){switch(e.type){case"filmstrip":return this._renderFilmstrip(e);case"list":return this._renderList(e);case"table":return this._renderTable(e);case"criticalrequestchain":return ka.render(this._dom,e,this);case"opportunity":return this._renderTable(e);case"screenshot":case"debugdata":case"full-page-screenshot":case"treemap-data":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){const a=de.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(a);return n.title=de.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let a;return a="duration"===e.displayUnit?de.i18n.formatDuration(e.value):de.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(a)}renderTextURL(e){const a=e;let n,t,i;try{const e=de.parseURL(a);n="/"===e.file?e.origin:e.file,t="/"===e.file||""===e.hostname?"":`(${e.hostname})`,i=a}catch(e){n=a}const o=this._dom.createElement("div","lh-text__url");if(o.append(this._renderLink({text:n,url:a})),t){const e=this._renderText(t);e.classList.add("lh-text__url-host"),o.append(e)}return i&&(o.title=a,o.dataset.url=a),o}_renderLink(e){const a=this._dom.createElement("a");if(this._dom.safelySetHref(a,e.url),!a.href){const a=this._renderText(e.text);return a.classList.add("lh-link"),a}return a.rel="noopener",a.target="_blank",a.textContent=e.text,a.classList.add("lh-link"),a}_renderText(e){const a=this._dom.createElement("div","lh-text");return a.textContent=e,a}_renderNumeric(e){const a=de.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement("div","lh-numeric");return n.textContent=a,n}_renderThumbnail(e){const a=this._dom.createElement("img","lh-thumbnail"),n=e;return a.src=n,a.title=n,a.alt="",a}_renderUnknown(e,a){console.error(`Unknown details type: ${e}`,a);const n=this._dom.createElement("details","lh-unknown");return this._dom.createChildOf(n,"summary").textContent=`We don't know how to render audit details of type \`${e}\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,"pre").textContent=JSON.stringify(a,null,2),n}_renderTableValue(e,a){if(null==e)return null;if("object"==typeof e)switch(e.type){case"code":return this._renderCode(e.value);case"link":return this._renderLink(e);case"node":return this.renderNode(e);case"numeric":return this._renderNumeric(e);case"source-location":return this.renderSourceLocation(e);case"url":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(a.valueType){case"bytes":{const n=Number(e);return this._renderBytes({value:n,granularity:a.granularity})}case"code":{const a=String(e);return this._renderCode(a)}case"ms":{const n={value:Number(e),granularity:a.granularity,displayUnit:a.displayUnit};return this._renderMilliseconds(n)}case"numeric":{const n=Number(e);return this._renderNumeric({value:n,granularity:a.granularity})}case"text":{const a=String(e);return this._renderText(a)}case"thumbnail":{const a=String(e);return this._renderThumbnail(a)}case"timespanMs":{const a=Number(e);return this._renderMilliseconds({value:a})}case"url":{const a=String(e);return Ua.some((e=>a.startsWith(e)))?this.renderTextURL(a):this._renderCode(a)}default:return this._renderUnknown(a.valueType,e)}}_getCanonicalizedHeadingsFromTable(e){return"opportunity"===e.type?e.headings:e.headings.map((e=>this._getCanonicalizedHeading(e)))}_getCanonicalizedHeading(e){let a;return e.subItemsHeading&&(a=this._getCanonicalizedsubItemsHeading(e.subItemsHeading,e)),{key:e.key,valueType:e.itemType,subItemsHeading:a,label:e.text,displayUnit:e.displayUnit,granularity:e.granularity}}_getCanonicalizedsubItemsHeading(e,a){return e.key||console.warn("key should not be null"),{key:e.key||"",valueType:e.itemType||a.itemType,granularity:e.granularity||a.granularity,displayUnit:e.displayUnit||a.displayUnit}}_getDerivedsubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||"",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:""}:null}_renderTableRow(e,a){const n=this._dom.createElement("tr");for(const t of a){if(!t||!t.key){this._dom.createChildOf(n,"td","lh-table-column--empty");continue}const a=e[t.key];let i;if(null!=a&&(i=this._renderTableValue(a,t)),i){const e=`lh-table-column--${t.valueType}`;this._dom.createChildOf(n,"td",e).append(i)}else this._dom.createChildOf(n,"td","lh-table-column--empty")}return n}_renderTableRowsFromItem(e,a){const n=this._dom.createFragment();if(n.append(this._renderTableRow(e,a)),!e.subItems)return n;const t=a.map(this._getDerivedsubItemsHeading);if(!t.some(Boolean))return n;for(const a of e.subItems.items){const e=this._renderTableRow(a,t);e.classList.add("lh-sub-item-row"),n.append(e)}return n}_renderTable(e){if(!e.items.length)return this._dom.createElement("span");const a=this._dom.createElement("table","lh-table"),n=this._dom.createChildOf(a,"thead"),t=this._dom.createChildOf(n,"tr"),i=this._getCanonicalizedHeadingsFromTable(e);for(const e of i){const a=`lh-table-column--${e.valueType||"text"}`,n=this._dom.createElement("div","lh-text");n.textContent=e.label,this._dom.createChildOf(t,"th",a).append(n)}const o=this._dom.createChildOf(a,"tbody");let r=!0;for(const a of e.items){const e=this._renderTableRowsFromItem(a,i);for(const a of this._dom.findAll("tr",e))a.classList.add(r?"lh-row--even":"lh-row--odd");r=!r,o.append(e)}return a}_renderList(e){const a=this._dom.createElement("div","lh-list");return e.items.forEach((e=>{const n=this.render(e);n&&a.append(n)})),a}renderNode(e){const a=this._dom.createElement("span","lh-node");if(e.nodeLabel){const n=this._dom.createElement("div");n.textContent=e.nodeLabel,a.append(n)}if(e.snippet){const n=this._dom.createElement("div");n.classList.add("lh-node__snippet"),n.textContent=e.snippet,a.append(n)}if(e.selector&&(a.title=e.selector),e.path&&a.setAttribute("data-path",e.path),e.selector&&a.setAttribute("data-selector",e.selector),e.snippet&&a.setAttribute("data-snippet",e.snippet),!this._fullPageScreenshot)return a;const n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||0===n.width||0===n.height)return a;const t=Pa.render(this._dom,this._fullPageScreenshot.screenshot,n,{width:147,height:100});return t&&a.prepend(t),a}renderSourceLocation(e){if(!e.url)return null;const a=`${e.url}:${e.line+1}:${e.column}`;let n,t;if(e.original){n=`${e.original.file||"<unmapped>"}:${e.original.line+1}:${e.original.column}`}if("network"===e.urlProvider&&n)t=this._renderLink({url:e.url,text:n}),t.title=`maps to generated location ${a}`;else if("network"!==e.urlProvider||n)if("comment"===e.urlProvider&&n)t=this._renderText(`${n} (from source map)`),t.title=`${a} (from sourceURL)`;else{if("comment"!==e.urlProvider||n)return null;t=this._renderText(`${a} (from sourceURL)`)}else t=this.renderTextURL(e.url),this._dom.find(".lh-link",t).textContent+=`:${e.line+1}:${e.column}`;return t.classList.add("lh-source-location"),t.setAttribute("data-source-url",e.url),t.setAttribute("data-source-line",String(e.line)),t.setAttribute("data-source-column",String(e.column)),t}_renderFilmstrip(e){const a=this._dom.createElement("div","lh-filmstrip");for(const n of e.items){const e=this._dom.createChildOf(a,"div","lh-filmstrip__frame"),t=this._dom.createChildOf(e,"img","lh-filmstrip__thumbnail");t.src=n.data,t.alt="Screenshot"}return a}_renderCode(e){const a=this._dom.createElement("pre","lh-code");return a.textContent=e,a}}
104
+ */const Ua=["http://","https://","data:"];class xa{constructor(e,a={}){this._dom=e,this._fullPageScreenshot=a.fullPageScreenshot}render(e){switch(e.type){case"filmstrip":return this._renderFilmstrip(e);case"list":return this._renderList(e);case"table":case"opportunity":return this._renderTable(e);case"criticalrequestchain":return ka.render(this._dom,e,this);case"screenshot":case"debugdata":case"full-page-screenshot":case"treemap-data":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){const a=de.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(a);return n.title=de.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let a;return a="duration"===e.displayUnit?de.i18n.formatDuration(e.value):de.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(a)}renderTextURL(e){const a=e;let n,t,i;try{const e=de.parseURL(a);n="/"===e.file?e.origin:e.file,t="/"===e.file||""===e.hostname?"":`(${e.hostname})`,i=a}catch(e){n=a}const o=this._dom.createElement("div","lh-text__url");if(o.append(this._renderLink({text:n,url:a})),t){const e=this._renderText(t);e.classList.add("lh-text__url-host"),o.append(e)}return i&&(o.title=a,o.dataset.url=a),o}_renderLink(e){const a=this._dom.createElement("a");if(this._dom.safelySetHref(a,e.url),!a.href){const a=this._renderText(e.text);return a.classList.add("lh-link"),a}return a.rel="noopener",a.target="_blank",a.textContent=e.text,a.classList.add("lh-link"),a}_renderText(e){const a=this._dom.createElement("div","lh-text");return a.textContent=e,a}_renderNumeric(e){const a=de.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement("div","lh-numeric");return n.textContent=a,n}_renderThumbnail(e){const a=this._dom.createElement("img","lh-thumbnail"),n=e;return a.src=n,a.title=n,a.alt="",a}_renderUnknown(e,a){console.error(`Unknown details type: ${e}`,a);const n=this._dom.createElement("details","lh-unknown");return this._dom.createChildOf(n,"summary").textContent=`We don't know how to render audit details of type \`${e}\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,"pre").textContent=JSON.stringify(a,null,2),n}_renderTableValue(e,a){if(null==e)return null;if("object"==typeof e)switch(e.type){case"code":return this._renderCode(e.value);case"link":return this._renderLink(e);case"node":return this.renderNode(e);case"numeric":return this._renderNumeric(e);case"source-location":return this.renderSourceLocation(e);case"url":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(a.valueType){case"bytes":{const n=Number(e);return this._renderBytes({value:n,granularity:a.granularity})}case"code":{const a=String(e);return this._renderCode(a)}case"ms":{const n={value:Number(e),granularity:a.granularity,displayUnit:a.displayUnit};return this._renderMilliseconds(n)}case"numeric":{const n=Number(e);return this._renderNumeric({value:n,granularity:a.granularity})}case"text":{const a=String(e);return this._renderText(a)}case"thumbnail":{const a=String(e);return this._renderThumbnail(a)}case"timespanMs":{const a=Number(e);return this._renderMilliseconds({value:a})}case"url":{const a=String(e);return Ua.some((e=>a.startsWith(e)))?this.renderTextURL(a):this._renderCode(a)}default:return this._renderUnknown(a.valueType,e)}}_getDerivedSubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||"",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:""}:null}_renderTableRow(e,a){const n=this._dom.createElement("tr");for(const t of a){if(!t||!t.key){this._dom.createChildOf(n,"td","lh-table-column--empty");continue}const a=e[t.key];let i;if(null!=a&&(i=this._renderTableValue(a,t)),i){const e=`lh-table-column--${t.valueType}`;this._dom.createChildOf(n,"td",e).append(i)}else this._dom.createChildOf(n,"td","lh-table-column--empty")}return n}_renderTableRowsFromItem(e,a){const n=this._dom.createFragment();if(n.append(this._renderTableRow(e,a)),!e.subItems)return n;const t=a.map(this._getDerivedSubItemsHeading);if(!t.some(Boolean))return n;for(const a of e.subItems.items){const e=this._renderTableRow(a,t);e.classList.add("lh-sub-item-row"),n.append(e)}return n}_renderTable(e){if(!e.items.length)return this._dom.createElement("span");const a=this._dom.createElement("table","lh-table"),n=this._dom.createChildOf(a,"thead"),t=this._dom.createChildOf(n,"tr");for(const a of e.headings){const e=`lh-table-column--${a.valueType||"text"}`,n=this._dom.createElement("div","lh-text");n.textContent=a.label,this._dom.createChildOf(t,"th",e).append(n)}const i=this._dom.createChildOf(a,"tbody");let o=!0;for(const a of e.items){const n=this._renderTableRowsFromItem(a,e.headings);for(const e of this._dom.findAll("tr",n))e.classList.add(o?"lh-row--even":"lh-row--odd");o=!o,i.append(n)}return a}_renderList(e){const a=this._dom.createElement("div","lh-list");return e.items.forEach((e=>{const n=this.render(e);n&&a.append(n)})),a}renderNode(e){const a=this._dom.createElement("span","lh-node");if(e.nodeLabel){const n=this._dom.createElement("div");n.textContent=e.nodeLabel,a.append(n)}if(e.snippet){const n=this._dom.createElement("div");n.classList.add("lh-node__snippet"),n.textContent=e.snippet,a.append(n)}if(e.selector&&(a.title=e.selector),e.path&&a.setAttribute("data-path",e.path),e.selector&&a.setAttribute("data-selector",e.selector),e.snippet&&a.setAttribute("data-snippet",e.snippet),!this._fullPageScreenshot)return a;const n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||0===n.width||0===n.height)return a;const t=Pa.render(this._dom,this._fullPageScreenshot.screenshot,n,{width:147,height:100});return t&&a.prepend(t),a}renderSourceLocation(e){if(!e.url)return null;const a=`${e.url}:${e.line+1}:${e.column}`;let n,t;if(e.original){n=`${e.original.file||"<unmapped>"}:${e.original.line+1}:${e.original.column}`}if("network"===e.urlProvider&&n)t=this._renderLink({url:e.url,text:n}),t.title=`maps to generated location ${a}`;else if("network"!==e.urlProvider||n)if("comment"===e.urlProvider&&n)t=this._renderText(`${n} (from source map)`),t.title=`${a} (from sourceURL)`;else{if("comment"!==e.urlProvider||n)return null;t=this._renderText(`${a} (from sourceURL)`)}else t=this.renderTextURL(e.url),this._dom.find(".lh-link",t).textContent+=`:${e.line+1}:${e.column}`;return t.classList.add("lh-source-location"),t.setAttribute("data-source-url",e.url),t.setAttribute("data-source-line",String(e.line)),t.setAttribute("data-source-column",String(e.column)),t}_renderFilmstrip(e){const a=this._dom.createElement("div","lh-filmstrip");for(const n of e.items){const e=this._dom.createChildOf(a,"div","lh-filmstrip__frame"),t=this._dom.createChildOf(e,"img","lh-filmstrip__thumbnail");t.src=n.data,t.alt="Screenshot"}return a}_renderCode(e){const a=this._dom.createElement("pre","lh-code");return a.textContent=e,a}}
105
105
  /**
106
106
  * @license
107
107
  * Copyright 2018 The Lighthouse Authors. All Rights Reserved.