chrome-devtools-frontend 1.0.1040857 → 1.0.1070764
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUTHORS +4 -1
- package/README.md +4 -10
- package/config/gni/devtools_grd_files.gni +41 -24
- package/config/gni/devtools_image_files.gni +4 -0
- package/docs/README.md +81 -0
- package/{ARCHITECTURE.md → docs/architecture_of_devtools.md} +5 -6
- package/docs/{images/architecture-lazy-loading-features.png → architecture_of_devtools_lazy_loading_features.png} +0 -0
- package/docs/{images/module-visibility-rules.png → architecture_of_devtools_module_visibility_rules.png} +0 -0
- package/docs/design_guidelines.md +3 -1
- package/docs/{images/DevToolsDesignGuidelines.png → design_guidelines.png} +0 -0
- package/docs/l10n.md +293 -0
- package/docs/navbar.md +13 -0
- package/docs/third_party_guidelines.md +78 -0
- package/docs/workflows.md +6 -1
- package/extension-api/ExtensionAPI.d.ts +1 -0
- package/front_end/Images/src/edit-icon.svg +3 -0
- package/front_end/Images/src/frame-embedded-icon.svg +61 -0
- package/front_end/Images/src/frame-icon.svg +54 -0
- package/front_end/Images/src/trash_bin_material_icon.svg +1 -0
- package/front_end/Images/src/triangle-expanded.svg +1 -1
- package/front_end/Tests.js +0 -25
- package/front_end/core/common/ResourceType.ts +7 -1
- package/front_end/core/common/Revealer.ts +3 -0
- package/front_end/core/common/common.ts +2 -0
- package/front_end/core/dom_extension/DOMExtension.ts +1 -138
- package/front_end/core/host/InspectorFrontendHostAPI.ts +2 -0
- package/front_end/core/host/ResourceLoader.ts +15 -5
- package/front_end/core/host/UserMetrics.ts +43 -10
- package/front_end/core/i18n/locales/af.json +194 -110
- package/front_end/core/i18n/locales/am.json +205 -121
- package/front_end/core/i18n/locales/ar.json +196 -112
- package/front_end/core/i18n/locales/as.json +195 -111
- package/front_end/core/i18n/locales/az.json +196 -112
- package/front_end/core/i18n/locales/be.json +193 -109
- package/front_end/core/i18n/locales/bg.json +193 -109
- package/front_end/core/i18n/locales/bn.json +197 -113
- package/front_end/core/i18n/locales/bs.json +194 -110
- package/front_end/core/i18n/locales/ca.json +197 -113
- package/front_end/core/i18n/locales/cs.json +192 -108
- package/front_end/core/i18n/locales/cy.json +193 -109
- package/front_end/core/i18n/locales/da.json +194 -110
- package/front_end/core/i18n/locales/de.json +199 -115
- package/front_end/core/i18n/locales/el.json +191 -107
- package/front_end/core/i18n/locales/en-GB.json +193 -109
- package/front_end/core/i18n/locales/en-US.json +313 -229
- package/front_end/core/i18n/locales/en-XL.json +313 -229
- package/front_end/core/i18n/locales/es-419.json +195 -111
- package/front_end/core/i18n/locales/es.json +192 -108
- package/front_end/core/i18n/locales/et.json +195 -111
- package/front_end/core/i18n/locales/eu.json +197 -113
- package/front_end/core/i18n/locales/fa.json +243 -159
- package/front_end/core/i18n/locales/fi.json +192 -108
- package/front_end/core/i18n/locales/fil.json +193 -109
- package/front_end/core/i18n/locales/fr-CA.json +198 -114
- package/front_end/core/i18n/locales/fr.json +220 -136
- package/front_end/core/i18n/locales/gl.json +196 -112
- package/front_end/core/i18n/locales/gu.json +196 -112
- package/front_end/core/i18n/locales/he.json +201 -117
- package/front_end/core/i18n/locales/hi.json +200 -116
- package/front_end/core/i18n/locales/hr.json +192 -108
- package/front_end/core/i18n/locales/hu.json +195 -111
- package/front_end/core/i18n/locales/hy.json +193 -109
- package/front_end/core/i18n/locales/id.json +198 -114
- package/front_end/core/i18n/locales/is.json +193 -109
- package/front_end/core/i18n/locales/it.json +194 -110
- package/front_end/core/i18n/locales/ja.json +192 -108
- package/front_end/core/i18n/locales/ka.json +194 -110
- package/front_end/core/i18n/locales/kk.json +194 -110
- package/front_end/core/i18n/locales/km.json +196 -112
- package/front_end/core/i18n/locales/kn.json +193 -109
- package/front_end/core/i18n/locales/ko.json +196 -112
- package/front_end/core/i18n/locales/ky.json +196 -112
- package/front_end/core/i18n/locales/lo.json +196 -112
- package/front_end/core/i18n/locales/lt.json +192 -108
- package/front_end/core/i18n/locales/lv.json +194 -110
- package/front_end/core/i18n/locales/mk.json +194 -110
- package/front_end/core/i18n/locales/ml.json +194 -110
- package/front_end/core/i18n/locales/mn.json +194 -110
- package/front_end/core/i18n/locales/mr.json +193 -109
- package/front_end/core/i18n/locales/ms.json +193 -109
- package/front_end/core/i18n/locales/my.json +198 -114
- package/front_end/core/i18n/locales/ne.json +197 -113
- package/front_end/core/i18n/locales/nl.json +193 -109
- package/front_end/core/i18n/locales/no.json +195 -111
- package/front_end/core/i18n/locales/or.json +197 -113
- package/front_end/core/i18n/locales/pa.json +195 -111
- package/front_end/core/i18n/locales/pl.json +195 -111
- package/front_end/core/i18n/locales/pt-PT.json +195 -111
- package/front_end/core/i18n/locales/pt.json +194 -110
- package/front_end/core/i18n/locales/ro.json +189 -105
- package/front_end/core/i18n/locales/ru.json +191 -107
- package/front_end/core/i18n/locales/si.json +194 -110
- package/front_end/core/i18n/locales/sk.json +192 -108
- package/front_end/core/i18n/locales/sl.json +193 -109
- package/front_end/core/i18n/locales/sq.json +193 -109
- package/front_end/core/i18n/locales/sr-Latn.json +192 -108
- package/front_end/core/i18n/locales/sr.json +192 -108
- package/front_end/core/i18n/locales/sv.json +191 -107
- package/front_end/core/i18n/locales/sw.json +195 -111
- package/front_end/core/i18n/locales/ta.json +193 -109
- package/front_end/core/i18n/locales/te.json +198 -114
- package/front_end/core/i18n/locales/th.json +194 -110
- package/front_end/core/i18n/locales/tr.json +192 -108
- package/front_end/core/i18n/locales/uk.json +192 -108
- package/front_end/core/i18n/locales/ur.json +194 -110
- package/front_end/core/i18n/locales/uz.json +190 -106
- package/front_end/core/i18n/locales/vi.json +195 -111
- package/front_end/core/i18n/locales/zh-HK.json +193 -109
- package/front_end/core/i18n/locales/zh-TW.json +195 -111
- package/front_end/core/i18n/locales/zh.json +194 -110
- package/front_end/core/i18n/locales/zu.json +193 -109
- package/front_end/core/platform/dom-utilities.ts +107 -0
- package/front_end/core/platform/keyboard-utilities.ts +8 -0
- package/front_end/core/platform/string-utilities.ts +10 -0
- package/front_end/core/root/Runtime.ts +0 -2
- package/front_end/core/sdk/CPUProfileDataModel.ts +11 -4
- package/front_end/core/sdk/CPUThrottlingManager.ts +1 -1
- package/front_end/core/sdk/CSSMatchedStyles.ts +11 -12
- package/front_end/core/sdk/ChildTargetManager.ts +1 -1
- package/front_end/core/sdk/ConsoleModel.ts +3 -3
- package/front_end/core/sdk/DOMModel.ts +0 -1
- package/front_end/core/sdk/DebuggerModel.ts +4 -36
- package/front_end/core/sdk/FrameManager.ts +12 -33
- package/front_end/core/sdk/NetworkManager.ts +50 -16
- package/front_end/core/sdk/NetworkRequest.ts +49 -0
- package/front_end/core/sdk/ProfileTreeModel.ts +19 -6
- package/front_end/core/sdk/ResourceTreeModel.ts +31 -32
- package/front_end/core/sdk/RuntimeModel.ts +1 -1
- package/front_end/core/sdk/ScreenCaptureModel.ts +3 -8
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +3 -0
- package/front_end/core/sdk/SourceMap.ts +14 -8
- package/front_end/core/sdk/SourceMapManager.ts +8 -6
- package/front_end/core/sdk/Target.ts +3 -3
- package/front_end/core/sdk/TargetManager.ts +12 -1
- package/front_end/core/sdk/sdk-legacy.ts +3 -0
- package/front_end/core/sdk/sdk-meta.ts +21 -0
- package/front_end/devtools_compatibility.js +17 -13
- package/front_end/entrypoints/formatter_worker/FormatterActions.ts +0 -3
- package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -53
- package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +1 -0
- package/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.ts +0 -9
- package/front_end/entrypoints/formatter_worker/formatter_worker.ts +0 -4
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +5 -3
- package/front_end/entrypoints/js_app/js_app.ts +1 -0
- package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +17 -9
- package/front_end/entrypoints/main/ExecutionContextSelector.ts +1 -1
- package/front_end/entrypoints/main/MainImpl.ts +31 -38
- package/front_end/entrypoints/main/main-meta.ts +0 -2
- package/front_end/entrypoints/node_app/node_app.ts +2 -1
- package/front_end/entrypoints/shell/shell.ts +1 -2
- package/front_end/generated/ARIAProperties.js +8 -0
- package/front_end/generated/InspectorBackendCommands.js +32 -23
- package/front_end/generated/SupportedCSSProperties.js +97 -48
- package/front_end/generated/protocol-mapping.d.ts +67 -34
- package/front_end/generated/protocol-proxy-api.d.ts +52 -29
- package/front_end/generated/protocol.ts +344 -89
- package/front_end/legacy/legacy-defs.d.ts +1 -3
- package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +10 -18
- package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +3 -3
- package/front_end/legacy_test_runner/test_runner/TestRunner.js +24 -0
- package/front_end/legacy_test_runner/test_runner/test_runner.js +15 -13
- package/front_end/models/bindings/BreakpointManager.ts +38 -21
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +19 -18
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +4 -0
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +32 -37
- package/front_end/models/bindings/FileUtils.ts +3 -3
- package/front_end/models/bindings/IgnoreListManager.ts +14 -3
- package/front_end/models/bindings/ResourceMapping.ts +5 -28
- package/front_end/models/bindings/ResourceScriptMapping.ts +2 -13
- package/front_end/models/bindings/ResourceUtils.ts +1 -2
- package/front_end/models/emulation/DeviceModeModel.ts +0 -14
- package/front_end/models/extensions/ExtensionAPI.ts +22 -5
- package/front_end/models/extensions/ExtensionServer.ts +31 -14
- package/front_end/models/formatter/FormatterWorkerPool.ts +0 -31
- package/front_end/models/har/HARFormat.ts +68 -5
- package/front_end/models/har/Importer.ts +3 -5
- package/front_end/models/har/Log.ts +3 -0
- package/front_end/models/issues_manager/AttributionReportingIssue.ts +24 -1
- package/front_end/models/issues_manager/DeprecationIssue.ts +112 -32
- package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +0 -10
- package/front_end/models/issues_manager/IssuesManager.ts +3 -12
- package/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +5 -6
- package/front_end/models/issues_manager/descriptions/arPermissionPolicyNotDelegated.md +11 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +121 -97
- package/front_end/models/logs/NetworkLog.ts +11 -11
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +5 -1
- package/front_end/models/persistence/NetworkPersistenceManager.ts +13 -5
- package/front_end/models/persistence/PersistenceImpl.ts +2 -1
- package/front_end/models/source_map_scopes/NamesResolver.ts +99 -56
- package/front_end/models/text_utils/TextUtils.ts +18 -34
- package/front_end/models/text_utils/text_utils-legacy.ts +0 -3
- package/front_end/models/timeline_model/TimelineModel.ts +2 -2
- package/front_end/models/timeline_model/timeline_model-legacy.ts +0 -9
- package/front_end/models/timeline_model/timeline_model.ts +0 -3
- package/front_end/panels/accessibility/ARIAAttributesView.ts +2 -1
- package/front_end/panels/application/AppManifestView.ts +15 -7
- package/front_end/panels/application/ApplicationPanelCacheSection.ts +2 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +15 -9
- package/front_end/panels/application/DOMStorageModel.ts +16 -18
- package/front_end/panels/application/IndexedDBModel.ts +97 -134
- package/front_end/panels/application/IndexedDBViews.ts +1 -3
- package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
- package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
- package/front_end/panels/application/ReportingApiTreeElement.ts +2 -1
- package/front_end/panels/application/ReportingApiView.ts +5 -4
- package/front_end/panels/application/StorageView.ts +30 -26
- package/front_end/panels/application/TrustTokensTreeElement.ts +5 -4
- package/front_end/panels/application/application.ts +6 -0
- package/front_end/panels/application/components/BackForwardCacheStrings.ts +6 -1
- package/front_end/panels/application/components/BackForwardCacheView.ts +149 -92
- package/front_end/panels/application/components/FrameDetailsView.ts +66 -7
- package/front_end/panels/application/components/Prerender2.ts +74 -14
- package/front_end/panels/application/components/ProtocolHandlersView.ts +6 -1
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +184 -0
- package/front_end/panels/application/components/SharedStorageMetadataView.ts +173 -0
- package/front_end/panels/application/components/backForwardCacheView.css +2 -3
- package/front_end/panels/application/components/components.ts +4 -0
- package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
- package/front_end/panels/application/components/permissionsPolicySection.css +1 -1
- package/front_end/panels/application/components/protocolHandlersView.css +5 -1
- package/front_end/panels/application/components/sharedStorageAccessGrid.css +26 -0
- package/front_end/panels/application/components/sharedStorageMetadataView.css +11 -0
- package/front_end/panels/application/components/stackTraceLinkButton.css +1 -1
- package/front_end/panels/application/components/stackTraceRow.css +1 -1
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -1
- package/front_end/panels/console/ConsoleFormat.ts +2 -2
- package/front_end/panels/console/ConsolePinPane.ts +1 -1
- package/front_end/panels/console/ConsolePrompt.ts +1 -1
- package/front_end/panels/console/ConsoleView.ts +1 -0
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
- package/front_end/panels/console/consoleView.css +5 -0
- package/front_end/panels/coverage/CoverageView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +1 -1
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +6 -24
- package/front_end/panels/developer_resources/developer_resources-meta.ts +1 -1
- package/front_end/panels/elements/CSSRuleValidator.ts +147 -65
- package/front_end/panels/elements/CSSRuleValidatorHelper.ts +32 -2
- package/front_end/panels/elements/ClassesPaneWidget.ts +2 -2
- package/front_end/panels/elements/ElementsPanel.ts +19 -1
- package/front_end/panels/elements/StylePropertiesSection.ts +3 -1
- package/front_end/panels/elements/StylePropertyTreeElement.ts +9 -3
- package/front_end/panels/elements/StylesSidebarPane.ts +46 -19
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -2
- package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -3
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +19 -2
- package/front_end/panels/elements/components/computedStyleProperty.css +3 -3
- package/front_end/panels/elements/components/computedStyleTrace.css +8 -4
- package/front_end/panels/elements/components/cssHintDetailsView.css +2 -8
- package/front_end/panels/elements/elements-meta.ts +28 -0
- package/front_end/panels/elements/stylesSectionTree.css +2 -1
- package/front_end/panels/elements/stylesSidebarPane.css +7 -0
- package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +2 -0
- package/front_end/panels/issues/IssueView.ts +5 -4
- package/front_end/panels/js_profiler/js_profiler-meta.ts +139 -0
- package/front_end/panels/lighthouse/LighthouseController.ts +4 -9
- package/front_end/panels/lighthouse/LighthousePanel.ts +38 -32
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +16 -15
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +3 -3
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +6 -1
- package/front_end/panels/lighthouse/LighthouseReporterTypes.ts +3 -2
- package/front_end/panels/lighthouse/LighthouseStartView.ts +162 -89
- package/front_end/panels/lighthouse/lighthouseStartView.css +7 -36
- package/front_end/panels/media/TickingFlameChart.ts +9 -3
- package/front_end/panels/network/NetworkDataGridNode.ts +79 -9
- package/front_end/panels/network/NetworkItemView.ts +4 -3
- package/front_end/panels/network/NetworkLogView.ts +40 -42
- package/front_end/panels/network/NetworkLogViewColumns.ts +2 -1
- package/front_end/panels/network/RequestCookiesView.ts +28 -0
- package/front_end/panels/network/components/HeaderSectionRow.css +176 -0
- package/front_end/panels/network/components/HeaderSectionRow.ts +477 -0
- package/front_end/panels/network/components/RequestHeaderSection.css +59 -0
- package/front_end/panels/network/components/RequestHeaderSection.ts +133 -0
- package/front_end/panels/network/components/RequestHeadersView.css +1 -59
- package/front_end/panels/network/components/RequestHeadersView.ts +43 -417
- package/front_end/panels/network/components/ResponseHeaderSection.css +21 -0
- package/front_end/panels/network/components/ResponseHeaderSection.ts +635 -0
- package/front_end/panels/network/components/components.ts +6 -0
- package/front_end/panels/network/network-meta.ts +0 -16
- package/front_end/panels/network/requestPayloadTree.css +0 -1
- package/front_end/panels/profiler/HeapProfileView.ts +7 -6
- package/front_end/panels/profiler/LiveHeapProfileView.ts +2 -2
- package/front_end/panels/sensors/sensors-meta.ts +0 -10
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +61 -43
- package/front_end/panels/settings/KeybindsSettingsTab.ts +1 -1
- package/front_end/panels/settings/SettingsScreen.ts +1 -3
- package/front_end/panels/settings/components/syncSection.css +1 -1
- package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +38 -35
- package/front_end/panels/sources/BreakpointsSidebarPane.ts +265 -25
- package/front_end/panels/sources/CallStackSidebarPane.ts +10 -1
- package/front_end/panels/sources/CoveragePlugin.ts +1 -1
- package/front_end/panels/sources/DebuggerPlugin.ts +316 -109
- package/front_end/panels/sources/GoToLineQuickOpen.ts +22 -49
- package/front_end/panels/sources/NavigatorView.ts +2 -10
- package/front_end/panels/sources/OpenFileQuickOpen.ts +0 -13
- package/front_end/panels/sources/OutlineQuickOpen.ts +274 -45
- package/front_end/panels/sources/SourcesNavigator.ts +2 -2
- package/front_end/panels/sources/SourcesPanel.ts +13 -9
- package/front_end/panels/sources/SourcesView.ts +8 -2
- package/front_end/panels/sources/TabbedEditorContainer.ts +8 -0
- package/front_end/panels/sources/UISourceCodeFrame.ts +81 -34
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -2
- package/front_end/panels/sources/components/BreakpointsView.ts +472 -28
- package/front_end/panels/sources/components/BreakpointsViewUtils.ts +195 -0
- package/front_end/panels/sources/components/HeadersView.css +5 -1
- package/front_end/panels/sources/components/HeadersView.ts +18 -11
- package/front_end/panels/sources/components/breakpointsView.css +136 -11
- package/front_end/panels/sources/sources-legacy.ts +0 -5
- package/front_end/panels/sources/sources-meta.ts +113 -4
- package/front_end/panels/sources/sources.ts +0 -2
- package/front_end/panels/sources/watchExpressionsSidebarPane.css +10 -6
- package/front_end/panels/timeline/PerformanceModel.ts +65 -18
- package/front_end/panels/timeline/TimelineController.ts +11 -5
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +3 -49
- package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
- package/front_end/panels/timeline/TimelineLoader.ts +41 -24
- package/front_end/panels/timeline/TimelinePanel.ts +155 -57
- package/front_end/panels/timeline/TimelineUIUtils.ts +1 -263
- package/front_end/panels/webauthn/WebauthnPane.ts +2 -2
- package/front_end/panels/webauthn/webauthnPane.css +1 -0
- package/front_end/services/puppeteer/PuppeteerConnection.ts +51 -42
- package/front_end/third_party/additional_readme_paths.json +0 -1
- package/front_end/third_party/chromium/client-variations/ClientVariations.js +1 -1
- package/front_end/third_party/codemirror.next/bundle.ts +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
- package/front_end/third_party/codemirror.next/codemirror.next.d.ts +7 -1
- package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
- package/front_end/third_party/codemirror.next/package.json +4 -2
- package/front_end/third_party/i18n/localized-string-set.ts +9 -1
- package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +431 -434
- package/front_end/third_party/lighthouse/locales/en-US.json +144 -186
- package/front_end/third_party/lighthouse/locales/en-XL.json +144 -186
- package/front_end/third_party/puppeteer/README.chromium +14 -6
- package/front_end/third_party/puppeteer/package/README.md +134 -316
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +337 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +248 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +148 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js +135 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +2100 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +536 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.js +39 -23
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts +17 -199
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js +112 -202
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.d.ts +9 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +5 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.js +0 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ChromeTargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Configuration.d.ts +133 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Configuration.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/initializePuppeteer.d.ts → cjs/puppeteer/common/Configuration.js} +4 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Configuration.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts +24 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js +67 -28
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.d.ts +11 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js +7 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.d.ts +52 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/{DeviceDescriptors.js → Device.js} +17 -11
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Device.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.d.ts +29 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.js +69 -46
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +27 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +47 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts +16 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js +16 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.d.ts +2 -36
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js +20 -59
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FirefoxTargetManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FirefoxTargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.d.ts +47 -21
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.js +155 -43
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts +7 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js +47 -97
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.d.ts +39 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.js +120 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameTree.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.d.ts +13 -67
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.js +124 -511
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/IsolatedWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts +5 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js +7 -9
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/node/install.d.ts → cjs/puppeteer/common/LazyArg.d.ts} +7 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LazyArg.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LazyArg.js +45 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LazyArg.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js +12 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.d.ts +15 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.js +15 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkEventManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts +1 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/node → cjs/puppeteer/common}/NodeWebSocketTransport.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NodeWebSocketTransport.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/{node → common}/NodeWebSocketTransport.js +1 -15
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NodeWebSocketTransport.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts +35 -496
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js +287 -414
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/common/NetworkConditions.d.ts → cjs/puppeteer/common/PredefinedNetworkConditions.d.ts} +13 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PredefinedNetworkConditions.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/{NetworkConditions.js → PredefinedNetworkConditions.js} +12 -8
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/PredefinedNetworkConditions.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.d.ts +36 -61
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js +32 -66
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts +26 -34
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js +57 -94
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/QueryHandler.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts +52 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js +204 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WaitTask.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.d.ts +4 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.js +23 -27
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.d.ts +45 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.js +75 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Browser.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.d.ts +28 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.js +52 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/BrowserContext.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/{esm/puppeteer/puppeteer.js → cjs/puppeteer/common/bidi/Connection.d.ts} +20 -10
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Connection.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Connection.js +133 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Connection.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.d.ts +28 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.js +61 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/bidi/Page.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/types.d.ts +11 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/types.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts +0 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +25 -59
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js +8 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/environment.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +8 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +8 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.d.ts +9 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.js +71 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/PierceQuerySelector.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.d.ts +32 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.js +30 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/Poller.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.d.ts +39 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.js +133 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextContent.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.d.ts +28 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.js +80 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/TextQuerySelector.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.d.ts +24 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +42 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +44 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.js +52 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.d.ts +26 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.js +58 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/util.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.d.ts +50 -14
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js +137 -154
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts +6 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js +16 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts +6 -18
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +88 -28
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.d.ts +4 -18
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.js +40 -33
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/FirefoxLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.d.ts +15 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.js +1 -16
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PipeTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.d.ts +24 -22
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.js +94 -130
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ProductLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/{Puppeteer.d.ts → PuppeteerNode.d.ts} +74 -43
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +271 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.d.ts +21 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.js +22 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer-core.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.d.ts +24 -18
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.js +25 -22
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/types.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.d.ts +9 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.js +22 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DebuggableDeferredPromise.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.d.ts +12 -10
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.js +17 -44
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/DeferredPromise.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/third_party/mitt/index.d.ts +23 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/third_party/mitt/index.js +5 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +337 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +244 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +148 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js +131 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +2100 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +532 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js +39 -23
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts +17 -199
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js +108 -198
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts +9 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +4 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.js +0 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ChromeTargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Configuration.d.ts +133 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Configuration.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/initializePuppeteer.d.ts → esm/puppeteer/common/Configuration.js} +3 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Configuration.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts +24 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js +63 -26
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts +11 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js +7 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Coverage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.d.ts +52 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/{DeviceDescriptors.js → Device.js} +16 -10
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Device.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.d.ts +29 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.js +69 -46
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ElementHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +27 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +47 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts +16 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js +16 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.d.ts +2 -36
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.js +20 -59
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FirefoxTargetManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FirefoxTargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.d.ts +47 -21
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.js +132 -43
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts +7 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js +47 -97
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.d.ts +39 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.js +116 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameTree.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.d.ts +13 -67
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.js +124 -487
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/IsolatedWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts +5 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js +7 -9
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/node/install.d.ts → esm/puppeteer/common/LazyArg.d.ts} +7 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LazyArg.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LazyArg.js +41 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LazyArg.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.js +12 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/LifecycleWatcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.d.ts +15 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.js +15 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkEventManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts +1 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/node → esm/puppeteer/common}/NodeWebSocketTransport.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NodeWebSocketTransport.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/{node → common}/NodeWebSocketTransport.js +1 -15
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NodeWebSocketTransport.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts +35 -496
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js +287 -414
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/{cjs/puppeteer/common/NetworkConditions.d.ts → esm/puppeteer/common/PredefinedNetworkConditions.d.ts} +13 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PredefinedNetworkConditions.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/{NetworkConditions.js → PredefinedNetworkConditions.js} +11 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/PredefinedNetworkConditions.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.d.ts +36 -61
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.js +33 -67
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Puppeteer.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts +26 -34
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js +57 -94
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/QueryHandler.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts +52 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js +199 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WaitTask.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.d.ts +4 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.js +23 -27
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/WebWorker.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.d.ts +45 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.js +71 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Browser.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.d.ts +28 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.js +48 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/BrowserContext.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.d.ts +37 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.js +129 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Connection.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.d.ts +28 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.js +57 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/bidi/Page.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/types.d.ts +11 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/types.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts +0 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +24 -57
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js +7 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/environment.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +8 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +8 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.d.ts +9 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.js +66 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/PierceQuerySelector.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.d.ts +32 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.js +30 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/Poller.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.d.ts +39 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.js +128 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextContent.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.d.ts +28 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.js +75 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/TextQuerySelector.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.d.ts +24 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +37 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts +44 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.js +41 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.d.ts +26 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.js +53 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/util.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts +50 -14
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js +137 -154
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts +6 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js +14 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts +6 -18
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +89 -29
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.d.ts +4 -18
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.js +41 -34
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/FirefoxLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.d.ts +15 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.js +1 -16
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PipeTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.d.ts +24 -22
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.js +70 -124
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ProductLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/{Puppeteer.d.ts → PuppeteerNode.d.ts} +74 -43
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +267 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.d.ts +21 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.js +22 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer-core.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.d.ts +24 -18
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.js +25 -22
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/types.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.d.ts +9 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.js +18 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DebuggableDeferredPromise.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.d.ts +12 -10
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.js +16 -42
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/DeferredPromise.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt/index.d.ts +23 -0
- package/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt/index.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +548 -513
- package/front_end/third_party/puppeteer/package/package.json +125 -104
- package/front_end/third_party/puppeteer/puppeteer.ts +3 -3
- package/front_end/ui/components/buttons/Button.ts +30 -1
- package/front_end/ui/components/buttons/button.css +21 -0
- package/front_end/ui/components/chrome_link/ChromeLink.ts +3 -2
- package/front_end/ui/components/chrome_link/chromeLink.css +1 -1
- package/front_end/ui/components/code_highlighter/CodeHighlighter.ts +21 -2
- package/front_end/ui/components/docs/button/basic.ts +43 -10
- package/front_end/ui/components/docs/elements_breadcrumbs/basic.ts +2 -0
- package/front_end/ui/components/docs/elements_breadcrumbs/scroll-to-active-element.ts +10 -3
- package/front_end/ui/components/docs/two_states_counter/basic.html +27 -0
- package/front_end/ui/components/docs/two_states_counter/basic.ts +45 -0
- package/front_end/ui/components/expandable_list/expandableList.css +1 -1
- package/front_end/ui/components/helpers/scheduled-render.ts +5 -2
- package/front_end/ui/components/icon_button/iconButton.css +2 -0
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryInspectorController.ts +23 -12
- package/front_end/ui/components/linkifier/linkifierImpl.css +1 -0
- package/front_end/ui/components/markdown_view/MarkdownImage.ts +0 -4
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +4 -0
- package/front_end/ui/components/markdown_view/MarkdownView.ts +39 -38
- package/front_end/ui/components/markdown_view/markdownLink.css +1 -0
- package/front_end/ui/components/render_coordinator/RenderCoordinator.ts +12 -6
- package/front_end/ui/components/survey_link/surveyLink.css +1 -0
- package/front_end/ui/components/text_editor/TextEditor.ts +75 -9
- package/front_end/ui/components/text_editor/config.ts +58 -2
- package/front_end/ui/components/text_editor/position.ts +2 -0
- package/front_end/ui/components/text_editor/theme.ts +10 -0
- package/front_end/ui/components/text_prompt/textPrompt.css +4 -0
- package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -8
- package/front_end/ui/components/tree_outline/treeOutline.css +20 -0
- package/front_end/ui/components/two_states_counter/TwoStatesCounter.ts +103 -0
- package/front_end/ui/components/two_states_counter/twoStatesCounter.css +37 -0
- package/front_end/ui/components/two_states_counter/two_states_counter.ts +9 -0
- package/front_end/ui/legacy/ARIAUtils.ts +4 -1
- package/front_end/ui/legacy/Context.ts +5 -1
- package/front_end/ui/legacy/DockController.ts +19 -0
- package/front_end/ui/legacy/FilterBar.ts +3 -1
- package/front_end/ui/legacy/InspectorView.ts +6 -2
- package/front_end/ui/legacy/ListWidget.ts +5 -1
- package/front_end/ui/legacy/SearchableView.ts +2 -19
- package/front_end/ui/legacy/SoftContextMenu.ts +20 -6
- package/front_end/ui/legacy/TabbedPane.ts +7 -5
- package/front_end/ui/legacy/TextPrompt.ts +1 -2
- package/front_end/ui/legacy/Toolbar.ts +6 -4
- package/front_end/ui/legacy/UIUtils.ts +8 -8
- package/front_end/ui/legacy/XLink.ts +3 -3
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +9 -10
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +7 -6
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +9 -2
- package/front_end/ui/legacy/components/inline_editor/CSSLength.ts +10 -2
- package/front_end/ui/legacy/components/inline_editor/CSSVarSwatch.ts +22 -9
- package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +3 -2
- package/front_end/ui/legacy/components/inline_editor/cssLength.css +4 -0
- package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +15 -9
- package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +9 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +75 -377
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +3 -14
- package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -14
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +9 -41
- package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -2
- package/front_end/ui/legacy/inspectorCommon.css +23 -0
- package/front_end/ui/legacy/inspectorSyntaxHighlight.css +1 -0
- package/front_end/ui/legacy/reportView.css +10 -0
- package/front_end/ui/legacy/softContextMenu.css +11 -1
- package/front_end/ui/legacy/splitWidget.css +1 -1
- package/front_end/ui/legacy/tabbedPane.css +26 -4
- package/front_end/ui/legacy/theme_support/theme_support_impl.ts +3 -5
- package/front_end/ui/legacy/toolbar.css +7 -1
- package/package.json +2 -1
- package/scripts/eslint_rules/lib/no_only.js +27 -0
- package/scripts/eslint_rules/tests/no_only_test.js +95 -0
- package/docs/localization/README.md +0 -6
- package/docs/localization/adding_strings.md +0 -133
- package/docs/localization/descriptions.md +0 -30
- package/docs/localization/localization_apis.md +0 -80
- package/docs/localization/locked_terms.md +0 -38
- package/docs/testing_guidelines.md +0 -4
- package/docs/triage_guidelines.md +0 -3
- package/front_end/entrypoints/formatter_worker/HTMLOutline.ts +0 -53
- package/front_end/entrypoints/formatter_worker/JavaScriptOutline.ts +0 -153
- package/front_end/legacy_test_runner/lighthouse_test_runner/lighthouse_test_runner.js +0 -155
- package/front_end/models/timeline_model/TimelineIRModel.ts +0 -317
- package/front_end/panels/input/InputModel.ts +0 -213
- package/front_end/panels/input/InputTimeline.ts +0 -407
- package/front_end/panels/input/input-legacy.ts +0 -32
- package/front_end/panels/input/input-meta.ts +0 -130
- package/front_end/panels/input/input.ts +0 -11
- package/front_end/panels/input/inputTimeline.css +0 -16
- package/front_end/panels/lighthouse/LighthouseStartViewFR.ts +0 -179
- package/front_end/panels/sources/JavaScriptCompilerPlugin.ts +0 -145
- package/front_end/third_party/acorn-loose/README.chromium +0 -22
- package/front_end/third_party/acorn-loose/acorn-loose-tsconfig.json +0 -8
- package/front_end/third_party/acorn-loose/acorn-loose.ts +0 -9
- package/front_end/third_party/acorn-loose/package/CHANGELOG.md +0 -123
- package/front_end/third_party/acorn-loose/package/LICENSE +0 -21
- package/front_end/third_party/acorn-loose/package/README.md +0 -66
- package/front_end/third_party/acorn-loose/package/dist/acorn-loose.d.ts +0 -16
- package/front_end/third_party/acorn-loose/package/dist/acorn-loose.js +0 -1538
- package/front_end/third_party/acorn-loose/package/dist/acorn-loose.js.map +0 -1
- package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs +0 -1528
- package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs.d.ts +0 -10
- package/front_end/third_party/acorn-loose/package/dist/acorn-loose.mjs.map +0 -1
- package/front_end/third_party/acorn-loose/package/package.json +0 -47
- package/front_end/third_party/puppeteer/package/LICENSE +0 -202
- package/front_end/third_party/puppeteer/package/install.js +0 -89
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts +0 -60
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DeviceDescriptors.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkConditions.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkConditions.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.d.ts +0 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.js +0 -21
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/compat.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.d.ts +0 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.js +0 -10
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/constants.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/initializePuppeteer.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/initializePuppeteer.js +0 -47
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/initializePuppeteer.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js +0 -213
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js +0 -198
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.d.ts +0 -10
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.js +0 -40
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/util.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.d.ts +0 -27
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.js +0 -44
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/puppeteer.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.js +0 -19
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/getPackageDirectory.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/vendor/mitt/src/index.d.ts +0 -27
- package/front_end/third_party/puppeteer/package/lib/cjs/vendor/mitt/src/index.js +0 -56
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts +0 -60
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DeviceDescriptors.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkConditions.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkConditions.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.d.ts +0 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.js +0 -20
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/compat.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.d.ts +0 -5
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.js +0 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/constants.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/initializePuppeteer.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/initializePuppeteer.js +0 -43
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/initializePuppeteer.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js +0 -209
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Puppeteer.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js +0 -190
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/install.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.d.ts +0 -10
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.js +0 -13
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/util.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer.d.ts +0 -27
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/puppeteer.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.d.ts.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.js +0 -15
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/getPackageDirectory.js.map +0 -1
- package/front_end/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.d.ts +0 -27
- package/front_end/third_party/puppeteer/package/lib/esm/vendor/mitt/src/index.js +0 -53
- package/front_end/third_party/puppeteer/package/typescript-if-required.js +0 -70
- package/scripts/eslint_rules/lib/render_coordinator_write.js +0 -58
- package/scripts/eslint_rules/tests/render_coordinator_write_test.js +0 -55
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* Lighthouse v9.6.
|
2
|
+
* Lighthouse v9.6.8 16a0a776e82b69b66dffdbfab809dae97686429f (Oct 31 2022)
|
3
3
|
*
|
4
4
|
* Automated auditing, performance metrics, and best practices for the web.
|
5
5
|
*
|
@@ -34,18 +34,18 @@ r||checkInt(this,e,t,4,2147483647,-2147483648),Buffer$2.TYPED_ARRAY_SUPPORT?(thi
|
|
34
34
|
if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function base64ToBytes(e){return function toByteArray(e){var t,i,o,s,c,l;n||init$1();var u=e.length;if(u%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===e[u-2]?2:"="===e[u-1]?1:0,l=new a(3*u/4-c),o=c>0?u-4:u;var d=0;for(t=0,i=0;t<o;t+=4,i+=3)s=r[e.charCodeAt(t)]<<18|r[e.charCodeAt(t+1)]<<12|r[e.charCodeAt(t+2)]<<6|r[e.charCodeAt(t+3)],l[d++]=s>>16&255,l[d++]=s>>8&255,l[d++]=255&s;return 2===c?(s=r[e.charCodeAt(t)]<<2|r[e.charCodeAt(t+1)]>>4,l[d++]=255&s):1===c&&(s=r[e.charCodeAt(t)]<<10|r[e.charCodeAt(t+1)]<<4|r[e.charCodeAt(t+2)]>>2,l[d++]=s>>8&255,l[d++]=255&s),l}(function base64clean(e){if((e=function stringtrim(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(l,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,r,a){
|
35
35
|
for(var n=0;n<a&&!(n+r>=t.length||n>=e.length);++n)t[n+r]=e[n];return n}function isBuffer$4(e){return null!=e&&(!!e._isBuffer||isFastBuffer(e)||function isSlowBuffer(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&isFastBuffer(e.slice(0,0))}(e))}function isFastBuffer(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var u=Object.freeze({__proto__:null,Buffer:Buffer$2,INSPECT_MAX_BYTES:50,SlowBuffer:function SlowBuffer(e){return+e!=e&&(e=0),Buffer$2.alloc(+e)},isBuffer:isBuffer$4,kMaxLength:s});function getAugmentedNamespace(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})})),t}var d=function listCacheClear$1(){this.__data__=[],this.size=0};var m=function eq$2(e,t){return e===t||e!=e&&t!=t},p=m
|
36
36
|
;var h=function assocIndexOf$4(e,t){for(var r=e.length;r--;)if(p(e[r][0],t))return r;return-1},f=h,y=Array.prototype.splice;var v=h;var b=h;var w=h;var S=d,T=function listCacheDelete$1(e){var t=this.__data__,r=f(t,e);return!(r<0)&&(r==t.length-1?t.pop():y.call(t,r,1),--this.size,!0)},E=function listCacheGet$1(e){var t=this.__data__,r=v(t,e);return r<0?void 0:t[r][1]},x=function listCacheHas$1(e){return b(this.__data__,e)>-1},_=function listCacheSet$1(e,t){var r=this.__data__,a=w(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this};function ListCache$4(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}ListCache$4.prototype.clear=S,ListCache$4.prototype.delete=T,ListCache$4.prototype.get=E,ListCache$4.prototype.has=x,ListCache$4.prototype.set=_;var A=ListCache$4,R=A;var k=function stackClear$1(){this.__data__=new R,this.size=0};var D=function stackDelete$1(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}
|
37
|
-
;var C=function stackGet$1(e){return this.__data__.get(e)};var I=function stackHas$1(e){return this.__data__.has(e)},N="object"==typeof e&&e&&e.Object===Object&&e,L=N,M="object"==typeof self&&self&&self.Object===Object&&self,P=L||M||Function("return this")(),O=P.Symbol,F=O,U=Object.prototype,j=U.hasOwnProperty,B=U.toString,$=F?F.toStringTag:void 0;var q=function getRawTag$1(e){var t=j.call(e,$),r=e[$];try{e[$]=void 0;var a=!0}catch(e){}var n=B.call(e);return a&&(t?e[$]=r:delete e[$]),n},z=Object.prototype.toString;var V=q,W=function objectToString$2(e){return z.call(e)},
|
37
|
+
;var C=function stackGet$1(e){return this.__data__.get(e)};var I=function stackHas$1(e){return this.__data__.has(e)},N="object"==typeof e&&e&&e.Object===Object&&e,L=N,M="object"==typeof self&&self&&self.Object===Object&&self,P=L||M||Function("return this")(),O=P.Symbol,F=O,U=Object.prototype,j=U.hasOwnProperty,B=U.toString,$=F?F.toStringTag:void 0;var q=function getRawTag$1(e){var t=j.call(e,$),r=e[$];try{e[$]=void 0;var a=!0}catch(e){}var n=B.call(e);return a&&(t?e[$]=r:delete e[$]),n},z=Object.prototype.toString;var V=q,W=function objectToString$2(e){return z.call(e)},H=O?O.toStringTag:void 0;var G=function baseGetTag$4(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":H&&H in Object(e)?V(e):W(e)};var Y=function isObject$3(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},K=G,J=Y;var X,Z=function isFunction$3(e){if(!J(e))return!1;var t=K(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t
|
38
38
|
},Q=P["__core-js_shared__"],ee=(X=/[^.]+$/.exec(Q&&Q.keys&&Q.keys.IE_PROTO||""))?"Symbol(src)_1."+X:"";var te=function isMasked$1(e){return!!ee&&ee in e},re=Function.prototype.toString;var ae=function toSource$2(e){if(null!=e){try{return re.call(e)}catch(e){}try{return e+""}catch(e){}}return""},ne=Z,ie=te,oe=Y,se=ae,ce=/^\[object .+?Constructor\]$/,le=Function.prototype,ue=Object.prototype,de=le.toString,me=ue.hasOwnProperty,pe=RegExp("^"+de.call(me).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var he=function baseIsNative$1(e){return!(!oe(e)||ie(e))&&(ne(e)?pe:ce).test(se(e))},ge=function getValue$1(e,t){return null==e?void 0:e[t]};var fe=function getNative$6(e,t){var r=ge(e,t);return he(r)?r:void 0},ye=fe(P,"Map"),ve=fe(Object,"create"),be=ve;var we=function hashClear$1(){this.__data__=be?be(null):{},this.size=0};var Se=function hashDelete$1(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t
|
39
39
|
},Te=ve,Ee=Object.prototype.hasOwnProperty;var xe=function hashGet$1(e){var t=this.__data__;if(Te){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return Ee.call(t,e)?t[e]:void 0},_e=ve,Ae=Object.prototype.hasOwnProperty;var Re=ve;var ke=we,De=Se,Ce=xe,Ie=function hashHas$1(e){var t=this.__data__;return _e?void 0!==t[e]:Ae.call(t,e)},Ne=function hashSet$1(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Re&&void 0===t?"__lodash_hash_undefined__":t,this};function Hash$1(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Hash$1.prototype.clear=ke,Hash$1.prototype.delete=De,Hash$1.prototype.get=Ce,Hash$1.prototype.has=Ie,Hash$1.prototype.set=Ne;var Le=Hash$1,Me=A,Pe=ye;var Oe=function isKeyable$1(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var Fe=function getMapData$4(e,t){var r=e.__data__;return Oe(t)?r["string"==typeof t?"string":"hash"]:r.map},Ue=Fe;var je=Fe
|
40
|
-
;var Be=Fe;var $e=Fe;var qe=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Le,map:new(Pe||Me),string:new Le}},ze=function mapCacheDelete$1(e){var t=Ue(this,e).delete(e);return this.size-=t?1:0,t},Ve=function mapCacheGet$1(e){return je(this,e).get(e)},We=function mapCacheHas$1(e){return Be(this,e).has(e)},
|
41
|
-
var t=this.__data__=new Xe(e);this.size=t.size}Stack$1.prototype.clear=Ze,Stack$1.prototype.delete=Qe,Stack$1.prototype.get=et,Stack$1.prototype.has=tt,Stack$1.prototype.set=rt;var at=Stack$1;var nt=
|
40
|
+
;var Be=Fe;var $e=Fe;var qe=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Le,map:new(Pe||Me),string:new Le}},ze=function mapCacheDelete$1(e){var t=Ue(this,e).delete(e);return this.size-=t?1:0,t},Ve=function mapCacheGet$1(e){return je(this,e).get(e)},We=function mapCacheHas$1(e){return Be(this,e).has(e)},He=function mapCacheSet$1(e,t){var r=$e(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this};function MapCache$2(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}MapCache$2.prototype.clear=qe,MapCache$2.prototype.delete=ze,MapCache$2.prototype.get=Ve,MapCache$2.prototype.has=We,MapCache$2.prototype.set=He;var Ge=MapCache$2,Ye=A,Ke=ye,Je=Ge;var Xe=A,Ze=k,Qe=D,et=C,tt=I,rt=function stackSet$1(e,t){var r=this.__data__;if(r instanceof Ye){var a=r.__data__;if(!Ke||a.length<199)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new Je(a)}return r.set(e,t),this.size=r.size,this};function Stack$1(e){
|
41
|
+
var t=this.__data__=new Xe(e);this.size=t.size}Stack$1.prototype.clear=Ze,Stack$1.prototype.delete=Qe,Stack$1.prototype.get=et,Stack$1.prototype.has=tt,Stack$1.prototype.set=rt;var at=Stack$1;var nt=Ge,it=function setCacheAdd$1(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},ot=function setCacheHas$1(e){return this.__data__.has(e)};function SetCache$1(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new nt;++t<r;)this.add(e[t])}SetCache$1.prototype.add=SetCache$1.prototype.push=it,SetCache$1.prototype.has=ot;var st=SetCache$1,ct=function arraySome$1(e,t){for(var r=-1,a=null==e?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1},ut=function cacheHas$1(e,t){return e.has(t)};var dt=function equalArrays$2(e,t,r,a,n,i){var o=1&r,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=i.get(e),u=i.get(t);if(l&&u)return l==t&&u==e;var d=-1,m=!0,p=2&r?new st:void 0;for(i.set(e,t),i.set(t,e);++d<s;){var h=e[d],f=t[d];if(a)var y=o?a(f,h,d,t,e,i):a(h,f,d,e,t,i);if(void 0!==y){
|
42
42
|
if(y)continue;m=!1;break}if(p){if(!ct(t,(function(e,t){if(!ut(p,t)&&(h===e||n(h,e,r,a,i)))return p.push(t)}))){m=!1;break}}else if(h!==f&&!n(h,f,r,a,i)){m=!1;break}}return i.delete(e),i.delete(t),m};var mt=P.Uint8Array,pt=m,ht=dt,ft=function mapToArray$1(e){var t=-1,r=Array(e.size);return e.forEach((function(e,a){r[++t]=[a,e]})),r},yt=function setToArray$1(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},vt=O?O.prototype:void 0,bt=vt?vt.valueOf:void 0;var wt=function equalByTag$1(e,t,r,a,n,i,o){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!i(new mt(e),new mt(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return pt(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var s=ft;case"[object Set]":var c=1&a
|
43
|
-
;if(s||(s=yt),e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;a|=2,o.set(e,t);var u=ht(s(e),s(t),a,n,i,o);return o.delete(e),u;case"[object Symbol]":if(bt)return bt.call(e)==bt.call(t)}return!1};var St=function arrayPush$1(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e},Tt=Array.isArray,Et=St,xt=Tt;var _t=function baseGetAllKeys$1(e,t,r){var a=t(e);return xt(e)?a:Et(a,r(e))};var At=function arrayFilter$1(e,t){for(var r=-1,a=null==e?0:e.length,n=0,i=[];++r<a;){var o=e[r];t(o,r,e)&&(i[n++]=o)}return i},Rt=function stubArray$1(){return[]},kt=Object.prototype.propertyIsEnumerable,Dt=Object.getOwnPropertySymbols,Ct=Dt?function(e){return null==e?[]:(e=Object(e),At(Dt(e),(function(t){return kt.call(e,t)})))}:Rt;var It=function baseTimes$1(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a};var Nt=function isObjectLike$4(e){return null!=e&&"object"==typeof e},Lt=
|
44
|
-
},Ot=Nt,Ft=Object.prototype,Ut=Ft.hasOwnProperty,jt=Ft.propertyIsEnumerable,Bt=Pt(function(){return arguments}())?Pt:function(e){return Ot(e)&&Ut.call(e,"callee")&&!jt.call(e,"callee")},$t={exports:{}};var zt=function stubFalse(){return!1};!function(e,t){var r=P,a=zt,n=t&&!t.nodeType&&t,i=n&&e&&!e.nodeType&&e,o=i&&i.exports===n?r.Buffer:void 0,s=(o?o.isBuffer:void 0)||a;e.exports=s}($t,$t.exports);var Vt=/^(?:0|[1-9]\d*)$/;var Wt=function isIndex$1(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Vt.test(e))&&e>-1&&e%1==0&&e<t};var
|
45
|
-
Jt["[object Arguments]"]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object Boolean]"]=Jt["[object DataView]"]=Jt["[object Date]"]=Jt["[object Error]"]=Jt["[object Function]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt["[object Object]"]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object WeakMap]"]=!1;var Xt=function baseIsTypedArray$1(e){return Kt(e)&&Yt(e.length)&&!!Jt[
|
46
|
-
var r=sr(e),a=!r&&or(e),n=!r&&!a&&cr(e),i=!r&&!a&&!n&&ur(e),o=r||a||n||i,s=o?ir(e.length,String):[],c=s.length;for(var l in e)!t&&!dr.call(e,l)||o&&("length"==l||n&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||lr(l,c))||s.push(l);return s},pr=Object.prototype;var hr=function isPrototype$1(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||pr)};var gr=function overArg$1(e,t){return function(r){return e(t(r))}}(Object.keys,Object),fr=hr,yr=gr,vr=Object.prototype.hasOwnProperty;var br=Z,wr=
|
47
|
-
;if(c!=Rr(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:kr.call(t,u)))return!1}var d=i.get(e),m=i.get(t);if(d&&m)return d==t&&m==e;var p=!0;i.set(e,t),i.set(t,e);for(var h=o;++l<c;){var f=e[u=s[l]],y=t[u];if(a)var v=o?a(y,f,u,t,e,i):a(f,y,u,e,t,i);if(!(void 0===v?f===y||n(f,y,r,a,i):v)){p=!1;break}h||(h="constructor"==u)}if(p&&!h){var b=e.constructor,w=t.constructor;b==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof w&&w instanceof w||(p=!1)}return i.delete(e),i.delete(t),p},Cr=fe(P,"DataView"),Ir=ye,Nr=fe(P,"Promise"),Lr=fe(P,"Set"),Mr=fe(P,"WeakMap"),Pr=
|
48
|
-
var t=Pr(e),r="[object Object]"==t?e.constructor:void 0,a=r?Or(r):"";if(a)switch(a){case qr:return $r;case zr:return Fr;case Vr:return Ur;case Wr:return jr;case
|
43
|
+
;if(s||(s=yt),e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;a|=2,o.set(e,t);var u=ht(s(e),s(t),a,n,i,o);return o.delete(e),u;case"[object Symbol]":if(bt)return bt.call(e)==bt.call(t)}return!1};var St=function arrayPush$1(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e},Tt=Array.isArray,Et=St,xt=Tt;var _t=function baseGetAllKeys$1(e,t,r){var a=t(e);return xt(e)?a:Et(a,r(e))};var At=function arrayFilter$1(e,t){for(var r=-1,a=null==e?0:e.length,n=0,i=[];++r<a;){var o=e[r];t(o,r,e)&&(i[n++]=o)}return i},Rt=function stubArray$1(){return[]},kt=Object.prototype.propertyIsEnumerable,Dt=Object.getOwnPropertySymbols,Ct=Dt?function(e){return null==e?[]:(e=Object(e),At(Dt(e),(function(t){return kt.call(e,t)})))}:Rt;var It=function baseTimes$1(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a};var Nt=function isObjectLike$4(e){return null!=e&&"object"==typeof e},Lt=G,Mt=Nt;var Pt=function baseIsArguments$1(e){return Mt(e)&&"[object Arguments]"==Lt(e)
|
44
|
+
},Ot=Nt,Ft=Object.prototype,Ut=Ft.hasOwnProperty,jt=Ft.propertyIsEnumerable,Bt=Pt(function(){return arguments}())?Pt:function(e){return Ot(e)&&Ut.call(e,"callee")&&!jt.call(e,"callee")},$t={exports:{}};var zt=function stubFalse(){return!1};!function(e,t){var r=P,a=zt,n=t&&!t.nodeType&&t,i=n&&e&&!e.nodeType&&e,o=i&&i.exports===n?r.Buffer:void 0,s=(o?o.isBuffer:void 0)||a;e.exports=s}($t,$t.exports);var Vt=/^(?:0|[1-9]\d*)$/;var Wt=function isIndex$1(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Vt.test(e))&&e>-1&&e%1==0&&e<t};var Ht=function isLength$2(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},Gt=G,Yt=Ht,Kt=Nt,Jt={};Jt["[object Float32Array]"]=Jt["[object Float64Array]"]=Jt["[object Int8Array]"]=Jt["[object Int16Array]"]=Jt["[object Int32Array]"]=Jt["[object Uint8Array]"]=Jt["[object Uint8ClampedArray]"]=Jt["[object Uint16Array]"]=Jt["[object Uint32Array]"]=!0,
|
45
|
+
Jt["[object Arguments]"]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object Boolean]"]=Jt["[object DataView]"]=Jt["[object Date]"]=Jt["[object Error]"]=Jt["[object Function]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt["[object Object]"]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object WeakMap]"]=!1;var Xt=function baseIsTypedArray$1(e){return Kt(e)&&Yt(e.length)&&!!Jt[Gt(e)]};var Zt=function baseUnary$1(e){return function(t){return e(t)}},Qt={exports:{}};!function(e,t){var r=N,a=t&&!t.nodeType&&t,n=a&&e&&!e.nodeType&&e,i=n&&n.exports===a&&r.process,o=function(){try{var e=n&&n.require&&n.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=o}(Qt,Qt.exports);var er=Xt,tr=Zt,rr=Qt.exports,ar=rr&&rr.isTypedArray,nr=ar?tr(ar):er,ir=It,or=Bt,sr=Tt,cr=$t.exports,lr=Wt,ur=nr,dr=Object.prototype.hasOwnProperty;var mr=function arrayLikeKeys$1(e,t){
|
46
|
+
var r=sr(e),a=!r&&or(e),n=!r&&!a&&cr(e),i=!r&&!a&&!n&&ur(e),o=r||a||n||i,s=o?ir(e.length,String):[],c=s.length;for(var l in e)!t&&!dr.call(e,l)||o&&("length"==l||n&&("offset"==l||"parent"==l)||i&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||lr(l,c))||s.push(l);return s},pr=Object.prototype;var hr=function isPrototype$1(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||pr)};var gr=function overArg$1(e,t){return function(r){return e(t(r))}}(Object.keys,Object),fr=hr,yr=gr,vr=Object.prototype.hasOwnProperty;var br=Z,wr=Ht;var Sr=mr,Tr=function baseKeys$1(e){if(!fr(e))return yr(e);var t=[];for(var r in Object(e))vr.call(e,r)&&"constructor"!=r&&t.push(r);return t},Er=function isArrayLike$1(e){return null!=e&&wr(e.length)&&!br(e)};var xr=_t,_r=Ct,Ar=function keys$2(e){return Er(e)?Sr(e):Tr(e)};var Rr=function getAllKeys$1(e){return xr(e,Ar,_r)},kr=Object.prototype.hasOwnProperty;var Dr=function equalObjects$1(e,t,r,a,n,i){var o=1&r,s=Rr(e),c=s.length
|
47
|
+
;if(c!=Rr(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:kr.call(t,u)))return!1}var d=i.get(e),m=i.get(t);if(d&&m)return d==t&&m==e;var p=!0;i.set(e,t),i.set(t,e);for(var h=o;++l<c;){var f=e[u=s[l]],y=t[u];if(a)var v=o?a(y,f,u,t,e,i):a(f,y,u,e,t,i);if(!(void 0===v?f===y||n(f,y,r,a,i):v)){p=!1;break}h||(h="constructor"==u)}if(p&&!h){var b=e.constructor,w=t.constructor;b==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof w&&w instanceof w||(p=!1)}return i.delete(e),i.delete(t),p},Cr=fe(P,"DataView"),Ir=ye,Nr=fe(P,"Promise"),Lr=fe(P,"Set"),Mr=fe(P,"WeakMap"),Pr=G,Or=ae,Fr="[object Map]",Ur="[object Promise]",jr="[object Set]",Br="[object WeakMap]",$r="[object DataView]",qr=Or(Cr),zr=Or(Ir),Vr=Or(Nr),Wr=Or(Lr),Hr=Or(Mr),Gr=Pr;(Cr&&Gr(new Cr(new ArrayBuffer(1)))!=$r||Ir&&Gr(new Ir)!=Fr||Nr&&Gr(Nr.resolve())!=Ur||Lr&&Gr(new Lr)!=jr||Mr&&Gr(new Mr)!=Br)&&(Gr=function(e){
|
48
|
+
var t=Pr(e),r="[object Object]"==t?e.constructor:void 0,a=r?Or(r):"";if(a)switch(a){case qr:return $r;case zr:return Fr;case Vr:return Ur;case Wr:return jr;case Hr:return Br}return t});var Yr=at,Kr=dt,Jr=wt,Xr=Dr,Zr=Gr,Qr=Tt,ea=$t.exports,ta=nr,ra="[object Arguments]",aa="[object Array]",na="[object Object]",ia=Object.prototype.hasOwnProperty;var oa=function baseIsEqualDeep$1(e,t,r,a,n,i){var o=Qr(e),s=Qr(t),c=o?aa:Zr(e),l=s?aa:Zr(t),u=(c=c==ra?na:c)==na,d=(l=l==ra?na:l)==na,m=c==l;if(m&&ea(e)){if(!ea(t))return!1;o=!0,u=!1}if(m&&!u)return i||(i=new Yr),o||ta(e)?Kr(e,t,r,a,n,i):Jr(e,t,c,r,a,n,i);if(!(1&r)){var p=u&&ia.call(e,"__wrapped__"),h=d&&ia.call(t,"__wrapped__");if(p||h){var f=p?e.value():e,y=h?t.value():t;return i||(i=new Yr),n(f,y,r,a,i)}}return!!m&&(i||(i=new Yr),Xr(e,t,r,a,n,i))},sa=Nt;var ca=function baseIsEqual$1(e,t,r,a,n){return e===t||(null==e||null==t||!sa(e)&&!sa(t)?e!=e&&t!=t:oa(e,t,r,a,baseIsEqual$1,n))};var la=function isEqual(e,t){return ca(e,t)}
|
49
49
|
;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}var ua=defaultSetTimout,da=defaultClearTimeout;function runTimeout(e){if(ua===setTimeout)return setTimeout(e,0);if((ua===defaultSetTimout||!ua)&&setTimeout)return ua=setTimeout,setTimeout(e,0);try{return ua(e,0)}catch(t){try{return ua.call(null,e,0)}catch(t){return ua.call(this,e,0)}}}"function"==typeof e.setTimeout&&(ua=setTimeout),"function"==typeof e.clearTimeout&&(da=clearTimeout);var ma,pa=[],ha=!1,ga=-1;function cleanUpNextTick(){ha&&ma&&(ha=!1,ma.length?pa=ma.concat(pa):ga=-1,pa.length&&drainQueue())}function drainQueue(){if(!ha){var e=runTimeout(cleanUpNextTick);ha=!0;for(var t=pa.length;t;){for(ma=pa,pa=[];++ga<t;)ma&&ma[ga].run();ga=-1,t=pa.length}ma=null,ha=!1,function runClearTimeout(e){if(da===clearTimeout)return clearTimeout(e);if((da===defaultClearTimeout||!da)&&clearTimeout)return da=clearTimeout,
|
50
50
|
clearTimeout(e);try{return da(e)}catch(t){try{return da.call(null,e)}catch(t){return da.call(this,e)}}}(e)}}function nextTick(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];pa.push(new Item(e,t)),1!==pa.length||ha||runTimeout(drainQueue)}function Item(e,t){this.fun=e,this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};var fa="browser",ya="browser",va={},ba=[],wa={},Sa={},Ta={};function noop$1(){}var Ea=noop$1,xa=noop$1,_a=noop$1,Aa=noop$1,Ra=noop$1,ka=noop$1,Da=noop$1;function binding$1(e){throw new Error("process.binding is not supported")}function cwd(){return"/"}function chdir(e){throw new Error("process.chdir is not supported")}function umask(){return 0}var Ca=e.performance||{},Ia=Ca.now||Ca.mozNow||Ca.msNow||Ca.oNow||Ca.webkitNow||function(){return(new Date).getTime()};function hrtime$1(e){var t=.001*Ia.call(Ca),r=Math.floor(t),a=Math.floor(t%1*1e9);return e&&(r-=e[0],(a-=e[1])<0&&(r--,
|
51
51
|
a+=1e9)),[r,a]}var Na=new Date;function uptime(){return(new Date-Na)/1e3}var La={nextTick,title:fa,browser:true,env:va,argv:ba,version:"",versions:wa,on:Ea,addListener:xa,once:_a,off:Aa,removeListener:Ra,removeAllListeners:ka,emit:Da,binding:binding$1,cwd,chdir,umask,hrtime:hrtime$1,platform:ya,release:Sa,config:Ta,uptime},Ma=Object.freeze({__proto__:null,addListener:xa,argv:ba,binding:binding$1,browser:true,chdir,config:Ta,cwd,default:La,emit:Da,env:va,hrtime:hrtime$1,nextTick,off:Aa,on:Ea,once:_a,platform:ya,release:Sa,removeAllListeners:ka,removeListener:Ra,title:fa,umask,uptime,version:"",versions:wa}),Pa={exports:{}},Oa=1e3,Fa=60*Oa,Ua=60*Fa,ja=24*Ua,Ba=7*ja,$a=365.25*ja,ms=function(e,t){t=t||{};var r=typeof e;if("string"===r&&e.length>0)return function parse$3(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var r=parseFloat(t[1])
|
@@ -56,17 +56,17 @@ a=createDebug.enabled(e)),a),set:e=>{n=e}}),"function"==typeof createDebug.init&
|
|
56
56
|
;!function(e,t){t.formatArgs=function formatArgs(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let a=0,n=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(a++,"%c"===e&&(n=a))})),t.splice(n,0,r)},t.save=function save(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function load(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&void 0!==La&&"env"in La&&(e=La.env.DEBUG);return e},t.useColors=function useColors(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1
|
57
57
|
;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function localstorage(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),
|
58
58
|
t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=qa(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}(Pa,Pa.exports)
|
59
|
-
;var za,Va,Wa,Ga
|
60
|
-
;e.splice(a,0,t)}(Za,a),a},Wa=function(){return Za},
|
59
|
+
;var za,Va,Wa,Ha,Ga=Pa.exports,Ya="undefined"!=typeof performance&&performance,Ka=La.hrtime,getNanoSeconds=function(){var e=Ka();return 1e9*e[0]+e[1]},Ja=getNanoSeconds(),now=function(){return(getNanoSeconds()-Ja)/1e6};function throwIfEmpty(e){if(!e)throw new Error("name must be non-empty")}if(Ya&&Ya.mark&&Ya.getEntriesByName&&Ya.getEntriesByType&&Ya.clearMeasures)za=function(e){throwIfEmpty(e),Ya.mark("start "+e)},Va=function(e){throwIfEmpty(e),Ya.mark("end "+e),Ya.measure(e,"start "+e,"end "+e);var t=Ya.getEntriesByName(e);return t[t.length-1]},Wa=function(){return Ya.getEntriesByType("measure")},Ha=function(){Ya.clearMarks(),Ya.clearMeasures()};else{var Xa={},Za=[];za=function(e){throwIfEmpty(e);var t=now();Xa["$"+e]=t},Va=function(e){throwIfEmpty(e);var t=now(),r=Xa["$"+e];if(!r)throw new Error("no known mark: "+e);var a={startTime:r,name:e,duration:t-r,entryType:"measure"};return function insertSorted(e,t){for(var r,a=0,n=e.length;a<n;)e[r=a+n>>>1].startTime<t.startTime?a=r+1:n=r
|
60
|
+
;e.splice(a,0,t)}(Za,a),a},Wa=function(){return Za},Ha=function(){Xa={},Za=[]}}function EventHandlers(){}function EventEmitter$4(){EventEmitter$4.init.call(this)}function $getMaxListeners(e){return void 0===e._maxListeners?EventEmitter$4.defaultMaxListeners:e._maxListeners}function emitNone(e,t,r){if(t)e.call(r);else for(var a=e.length,n=arrayClone(e,a),i=0;i<a;++i)n[i].call(r)}function emitOne(e,t,r,a){if(t)e.call(r,a);else for(var n=e.length,i=arrayClone(e,n),o=0;o<n;++o)i[o].call(r,a)}function emitTwo(e,t,r,a,n){if(t)e.call(r,a,n);else for(var i=e.length,o=arrayClone(e,i),s=0;s<i;++s)o[s].call(r,a,n)}function emitThree(e,t,r,a,n,i){if(t)e.call(r,a,n,i);else for(var o=e.length,s=arrayClone(e,o),c=0;c<o;++c)s[c].call(r,a,n,i)}function emitMany(e,t,r,a){if(t)e.apply(r,a);else for(var n=e.length,i=arrayClone(e,n),o=0;o<n;++o)i[o].apply(r,a)}function _addListener(e,t,r,a){var n,i,o;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function')
|
61
61
|
;if((i=e._events)?(i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),o=i[t]):(i=e._events=new EventHandlers,e._eventsCount=0),o){if("function"==typeof o?o=i[t]=a?[r,o]:[o,r]:a?o.unshift(r):o.push(r),!o.warned&&(n=$getMaxListeners(e))&&n>0&&o.length>n){o.warned=!0;var s=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");s.name="MaxListenersExceededWarning",s.emitter=e,s.type=t,s.count=o.length,function emitWarning(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(s)}}else o=i[t]=r,++e._eventsCount;return e}function _onceWrap(e,t,r){var a=!1;function g(){e.removeListener(t,g),a||(a=!0,r.apply(e,arguments))}return g.listener=r,g}function listenerCount$1(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function arrayClone(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}
|
62
62
|
EventHandlers.prototype=Object.create(null),EventEmitter$4.EventEmitter=EventEmitter$4,EventEmitter$4.usingDomains=!1,EventEmitter$4.prototype.domain=void 0,EventEmitter$4.prototype._events=void 0,EventEmitter$4.prototype._maxListeners=void 0,EventEmitter$4.defaultMaxListeners=10,EventEmitter$4.init=function(){this.domain=null,EventEmitter$4.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new EventHandlers,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},EventEmitter$4.prototype.setMaxListeners=function setMaxListeners(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},EventEmitter$4.prototype.getMaxListeners=function getMaxListeners(){return $getMaxListeners(this)},EventEmitter$4.prototype.emit=function emit(e){var t,r,a,n,i,o,s,c="error"===e;if(o=this._events)c=c&&null==o.error;else if(!c)return!1;if(s=this.domain,c){
|
63
63
|
if(t=arguments[1],!s){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=s,t.domainThrown=!1,s.emit("error",t),!1}if(!(r=o[e]))return!1;var u="function"==typeof r;switch(a=arguments.length){case 1:emitNone(r,u,this);break;case 2:emitOne(r,u,this,arguments[1]);break;case 3:emitTwo(r,u,this,arguments[1],arguments[2]);break;case 4:emitThree(r,u,this,arguments[1],arguments[2],arguments[3]);break;default:for(n=new Array(a-1),i=1;i<a;i++)n[i-1]=arguments[i];emitMany(r,u,this,n)}return!0},EventEmitter$4.prototype.addListener=function addListener(e,t){return _addListener(this,e,t,!1)},EventEmitter$4.prototype.on=EventEmitter$4.prototype.addListener,EventEmitter$4.prototype.prependListener=function prependListener(e,t){return _addListener(this,e,t,!0)},EventEmitter$4.prototype.once=function once(e,t){
|
64
64
|
if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,_onceWrap(this,e,t)),this},EventEmitter$4.prototype.prependOnceListener=function prependOnceListener(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,_onceWrap(this,e,t)),this},EventEmitter$4.prototype.removeListener=function removeListener(e,t){var r,a,n,i,o;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(a=this._events))return this;if(!(r=a[e]))return this;if(r===t||r.listener&&r.listener===t)0==--this._eventsCount?this._events=new EventHandlers:(delete a[e],a.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(n=-1,i=r.length;i-- >0;)if(r[i]===t||r[i].listener&&r[i].listener===t){o=r[i].listener,n=i;break}if(n<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new EventHandlers,this
|
65
65
|
;delete a[e]}else!function spliceOne(e,t){for(var r=t,a=r+1,n=e.length;a<n;r+=1,a+=1)e[r]=e[a];e.pop()}(r,n);a.removeListener&&this.emit("removeListener",e,o||t)}return this},EventEmitter$4.prototype.off=function(e,t){return this.removeListener(e,t)},EventEmitter$4.prototype.removeAllListeners=function removeAllListeners(e){var t,r;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=new EventHandlers,this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=new EventHandlers:delete r[e]),this;if(0===arguments.length){for(var a,n=Object.keys(r),i=0;i<n.length;++i)"removeListener"!==(a=n[i])&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=new EventHandlers,this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(t)do{this.removeListener(e,t[t.length-1])}while(t[0]);return this},EventEmitter$4.prototype.listeners=function listeners(e){var t,r=this._events
|
66
|
-
;return r&&(t=r[e])?"function"==typeof t?[t.listener||t]:function unwrapListeners(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(t):[]},EventEmitter$4.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount$1.call(e,t)},EventEmitter$4.prototype.listenerCount=listenerCount$1,EventEmitter$4.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var Qa=Object.freeze({__proto__:null,default:EventEmitter$4,EventEmitter:EventEmitter$4});const en="win32"===La.platform,tn=La.browser,rn={red:tn?"crimson":1,yellow:tn?"gold":3,cyan:tn?"darkturquoise":6,green:tn?"forestgreen":2,blue:tn?"steelblue":4,magenta:tn?"palevioletred":5};
|
67
|
-
e.endsWith("error")?t.color=rn.red:e.endsWith("warn")&&(t.color=rn.yellow)),t}static setLevel(e){switch(nn=e,e){case"silent":
|
66
|
+
;return r&&(t=r[e])?"function"==typeof t?[t.listener||t]:function unwrapListeners(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(t):[]},EventEmitter$4.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount$1.call(e,t)},EventEmitter$4.prototype.listenerCount=listenerCount$1,EventEmitter$4.prototype.eventNames=function eventNames(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};var Qa=Object.freeze({__proto__:null,default:EventEmitter$4,EventEmitter:EventEmitter$4});const en="win32"===La.platform,tn=La.browser,rn={red:tn?"crimson":1,yellow:tn?"gold":3,cyan:tn?"darkturquoise":6,green:tn?"forestgreen":2,blue:tn?"steelblue":4,magenta:tn?"palevioletred":5};Ga.colors=[rn.cyan,rn.green,rn.blue,rn.magenta];const an={};let nn;class Log{static _logToStdErr(e,t){Log.loggerfn(e)(...t)}static loggerfn(e){let t=an[e=`LH:${e}`];return t||(t=Ga(e),an[e]=t,
|
67
|
+
e.endsWith("error")?t.color=rn.red:e.endsWith("warn")&&(t.color=rn.yellow)),t}static setLevel(e){switch(nn=e,e){case"silent":Ga.enable("-LH:*");break;case"verbose":Ga.enable("LH:*");break;case"error":Ga.enable("-LH:*, LH:*:error");break;default:Ga.enable("LH:*, -LH:*:verbose")}}static formatProtocol(e,t,r){const a=!La||La.browser?1/0:La.stdout.columns,n=t.method||"?????",i=a-n.length-e.length-25,o=t.params&&"IO.read"!==n?JSON.stringify(t.params).substr(0,i):"";Log._logToStdErr(`${e}:${r||""}`,[n,o])}static isVerbose(){return"verbose"===nn}static time({msg:e,id:t,args:r=[]},a="log"){za(t),Log[a]("status",e,...r)}static timeEnd({msg:e,id:t,args:r=[]},a="verbose"){Log[a]("statusEnd",e,...r),Va(t)}static log(e,...t){return Log.events.issueStatus(e,t),Log._logToStdErr(e,t)}static warn(e,...t){return Log.events.issueWarning(e,t),Log._logToStdErr(`${e}:warn`,t)}static error(e,...t){return Log._logToStdErr(`${e}:error`,t)}static verbose(e,...t){return Log.events.issueStatus(e,t),
|
68
68
|
Log._logToStdErr(`${e}:verbose`,t)}static greenify(e){return`${Log.green}${e}${Log.reset}`}static redify(e){return`${Log.red}${e}${Log.reset}`}static get green(){return"[32m"}static get red(){return"[31m"}static get yellow(){return"[33m"}static get purple(){return"[95m"}static get reset(){return"[0m"}static get bold(){return"[1m"}static get dim(){return"[2m"}static get tick(){return en?"√":"✓"}static get cross(){return en?"×":"✘"}static get whiteSmallSquare(){return en?"·":"▫"}static get heavyHorizontal(){return en?"─":"━"}static get heavyVertical(){return en?"│ ":"┃ "}static get heavyUpAndRight(){return en?"└":"┗"}static get heavyVerticalAndRight(){return en?"├":"┣"}static get heavyDownAndHorizontal(){return en?"┬":"┳"}static get doubleLightHorizontal(){return"──"}}Log.events=new class Emitter extends EventEmitter$4{issueStatus(e,t){"status"!==e&&"statusEnd"!==e||this.emit(e,[e,...t])}issueWarning(e,t){this.emit("warning",[e,...t])}},Log.takeTimeEntries=()=>{const e=Wa()
|
69
|
-
;return
|
69
|
+
;return Ha(),e},Log.getTimeEntries=()=>Wa();var on=getAugmentedNamespace(Object.freeze({__proto__:null,default:Log}));const sn=3.75,cn=.9,ln={DEVTOOLS_RTT_ADJUSTMENT_FACTOR:sn,DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR:cn,mobileSlow4G:{rttMs:150,throughputKbps:1638.4,requestLatencyMs:562.5,downloadThroughputKbps:1474.5600000000002,uploadThroughputKbps:675,cpuSlowdownMultiplier:4},mobileRegular3G:{rttMs:300,throughputKbps:700,requestLatencyMs:1125,downloadThroughputKbps:630,uploadThroughputKbps:630,cpuSlowdownMultiplier:4},desktopDense4G:{rttMs:40,throughputKbps:10240,cpuSlowdownMultiplier:1,requestLatencyMs:0,downloadThroughputKbps:0,uploadThroughputKbps:0}},un={mobile:{mobile:!0,width:360,height:640,deviceScaleFactor:2.625,disabled:!1},desktop:{mobile:!1,width:1350,height:940,deviceScaleFactor:1,disabled:!1}},dn={mobile:"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Mobile Safari/537.36 Chrome-Lighthouse",
|
70
70
|
desktop:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4695.0 Safari/537.36 Chrome-Lighthouse"};var mn={throttling:ln,screenEmulationMetrics:un,userAgents:dn,defaultSettings:{output:"json",maxWaitForFcp:3e4,maxWaitForLoad:45e3,formFactor:"mobile",throttling:ln.mobileSlow4G,throttlingMethod:"simulate",screenEmulation:un.mobile,emulatedUserAgent:dn.mobile,auditMode:!1,gatherMode:!1,disableStorageReset:!1,debugNavigation:!1,channel:"node",budgets:null,locale:"en-US",blockedUrlPatterns:null,additionalTraceCategories:null,extraHeaders:null,precomputedLanternData:null,onlyAudits:null,onlyCategories:null,skipAudits:null},defaultPassConfig:{passName:"defaultPass",loadFailureMode:"fatal",recordTrace:!1,useThrottling:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",gatherers:[]},defaultNavigationConfig:{id:"default",loadFailureMode:"fatal",
|
71
71
|
disableThrottling:!1,disableStorageReset:!1,pauseAfterFcpMs:0,pauseAfterLoadMs:0,networkQuietThresholdMs:0,cpuQuietThresholdMs:0,blockedUrlPatterns:[],blankPage:"about:blank",artifacts:[]},nonSimulatedPassConfigOverrides:{pauseAfterFcpMs:5250,pauseAfterLoadMs:5250,networkQuietThresholdMs:5250,cpuQuietThresholdMs:5250}};function wrapRuntimeEvalErrorInBrowser(e){return e&&"string"!=typeof e||(e=new Error(e)),{__failedInBrowser:!0,name:e.name||"Error",message:e.message||"unknown error",stack:e.stack}}function getElementsInDocument(e){const t=window.__ElementMatches||window.Element.prototype.matches,r=[],_findAllElements=a=>{for(let n,i=0;n=a[i];++i){if(!e||t.call(n,e)){const e=n;r.push(e)}n.shadowRoot&&_findAllElements(n.shadowRoot.querySelectorAll("*"))}};return _findAllElements(document.querySelectorAll("*")),r}function getOuterHTMLSnippet(e,t=[],r=500){const a=["autofill-information","autofill-prediction","title"];e instanceof ShadowRoot&&(e=e.host);try{const n=e.cloneNode()
|
72
72
|
;e.ownerDocument.createElement("template").content.append(n),t.concat(a).forEach((e=>{n.removeAttribute(e)}));let i=0;for(const t of n.getAttributeNames()){if(i>r){n.removeAttribute(t);continue}let a=n.getAttribute(t);if(null===a)continue;let o=!1;if("src"===t&&"currentSrc"in e){const t=e,r=t.currentSrc,n=t.ownerDocument.location.href;new URL(a,n).toString()!==r&&(a=r,o=!0)}if(a.length>75&&(a=a.slice(0,74)+"…",o=!0),o)if("style"===t){n.style.cssText=a}else n.setAttribute(t,a);i+=t.length+a.length}const o=/^[\s\S]*?>/,[s]=n.outerHTML.match(o)||[];return s&&i>r?s.slice(0,s.length-1)+" …>":s||""}catch(t){return`<${e.localName}>`}}function computeBenchmarkIndex(){return(function benchmarkIndexGC(){const e=Date.now();let t=0;for(;Date.now()-e<500;){let e="";for(let t=0;t<1e4;t++)e+="a";if(1===e.length)throw new Error("will never happen, but prevents compiler optimizations");t++}const r=(Date.now()-e)/1e3;return Math.round(t/10/r)}()+function benchmarkIndexNoGC(){const e=[],t=[]
|
@@ -81,7 +81,7 @@ for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var a=r>=0?arguments[r]:"/
|
|
81
81
|
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"+hex(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+hex(e)}))}function classEscape(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"+hex(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+hex(e)}))}return"Expected "+function describeExpected(e){var t,a,n,i=new Array(e.length);for(t=0;t<e.length;t++)i[t]=(n=e[t],r[n.type](n));if(i.sort(),i.length>0){for(t=1,a=1;t<i.length;t++)i[t-1]!==i[t]&&(i[a]=i[t],a++);i.length=a}switch(i.length){case 1:return i[0];case 2:return i[0]+" or "+i[1];default:return i.slice(0,-1).join(", ")+", or "+i[i.length-1]}}(e)+" but "+function describeFound(e){
|
82
82
|
return e?'"'+literalEscape(e)+'"':"end of input"}(t)+" found."},{SyntaxError:peg$SyntaxError,parse:function peg$parse(e,t){t=void 0!==t?t:{};var r,a={},n={start:peg$parsestart},i=peg$parsestart,peg$c3=function(e){return e.join("")
|
83
83
|
},o=peg$literalExpectation("{",!1),s=",",c=peg$literalExpectation(",",!1),l=peg$literalExpectation("}",!1),u="number",d=peg$literalExpectation("number",!1),m="date",p=peg$literalExpectation("date",!1),h="time",f=peg$literalExpectation("time",!1),y="plural",v=peg$literalExpectation("plural",!1),b="selectordinal",w=peg$literalExpectation("selectordinal",!1),S="select",T=peg$literalExpectation("select",!1),E=peg$literalExpectation("=",!1),x="offset:",_=peg$literalExpectation("offset:",!1),A=peg$otherExpectation("whitespace"),R=/^[ \t\n\r]/,k=peg$classExpectation([" ","\t","\n","\r"],!1,!1),D=peg$otherExpectation("optionalWhitespace"),C=/^[0-9]/,I=peg$classExpectation([["0","9"]],!1,!1),N=/^[0-9a-f]/i,L=peg$classExpectation([["0","9"],["a","f"]],!1,!0),M=peg$literalExpectation("0",!1),P=/^[1-9]/,O=peg$classExpectation([["1","9"]],!1,!1),F="'",U=peg$literalExpectation("'",!1),j=/^[ \t\n\r,.+={}#]/,B=peg$classExpectation([" ","\t","\n","\r",",",".","+","=","{","}","#"],!1,!1),$={type:"any"
|
84
|
-
},q=/^[^{}\\\0-\x1F\x7F \t\n\r]/,z=peg$classExpectation(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),V=peg$literalExpectation("\\\\",!1),W=peg$literalExpectation("\\#",!1),
|
84
|
+
},q=/^[^{}\\\0-\x1F\x7F \t\n\r]/,z=peg$classExpectation(["{","}","\\",["\0",""],""," ","\t","\n","\r"],!0,!1),V=peg$literalExpectation("\\\\",!1),W=peg$literalExpectation("\\#",!1),H=peg$literalExpectation("\\{",!1),G=peg$literalExpectation("\\}",!1),Y=peg$literalExpectation("\\u",!1),K=0,J=0,X=[{line:1,column:1}],Z=0,Q=[],ee=0;if("startRule"in t){if(!(t.startRule in n))throw new Error("Can't start parsing from rule \""+t.startRule+'".');i=n[t.startRule]}function location(){return peg$computeLocation(J,K)}function peg$literalExpectation(e,t){return{type:"literal",text:e,ignoreCase:t}}function peg$classExpectation(e,t,r){return{type:"class",parts:e,inverted:t,ignoreCase:r}}function peg$otherExpectation(e){return{type:"other",description:e}}function peg$computePosDetails(t){var r,a=X[t];if(a)return a;for(r=t-1;!X[r];)r--;for(a={line:(a=X[r]).line,column:a.column};r<t;)10===e.charCodeAt(r)?(a.line++,a.column=1):a.column++,r++;return X[t]=a,a}function peg$computeLocation(e,t){
|
85
85
|
var r=peg$computePosDetails(e),a=peg$computePosDetails(t);return{start:{offset:e,line:r.line,column:r.column},end:{offset:t,line:a.line,column:a.column}}}function peg$fail(e){K<Z||(K>Z&&(Z=K,Q=[]),Q.push(e))}function peg$parsestart(){return peg$parsemessageFormatPattern()}function peg$parsemessageFormatPattern(){var e,t,r;for(e=K,t=[],r=peg$parsemessageFormatElement();r!==a;)t.push(r),r=peg$parsemessageFormatElement();return t!==a&&(J=e,t={type:"messageFormatPattern",elements:t,location:location()}),e=t}function peg$parsemessageFormatElement(){var t;return(t=function peg$parsemessageTextElement(){var t,r;t=K,(r=function peg$parsemessageText(){var t,r,n,i,o,s;t=K,r=[],n=K,(i=peg$parse_())!==a&&(o=peg$parsechars())!==a&&(s=peg$parse_())!==a?n=i=[i,o,s]:(K=n,n=a);if(n!==a)for(;n!==a;)r.push(n),n=K,(i=peg$parse_())!==a&&(o=peg$parsechars())!==a&&(s=peg$parse_())!==a?n=i=[i,o,s]:(K=n,n=a);else r=a;r!==a&&(J=t,r=r.reduce((function(e,t){return e.concat(t)}),[]).join(""));(t=r)===a&&(t=K,
|
86
86
|
t=(r=peg$parsews())!==a?e.substring(t,K):r);return t}())!==a&&(J=t,r={type:"messageTextElement",value:r,location:location()});return t=r}())===a&&(t=function peg$parseargumentElement(){var t,r,n,i,E,x,_;t=K,123===e.charCodeAt(K)?(r="{",K++):(r=a,0===ee&&peg$fail(o));r!==a&&peg$parse_()!==a&&(n=function peg$parseargument(){var e,t,r;if((e=peg$parsenumber())===a){for(e=K,t=[],r=peg$parsequoteEscapedChar();r!==a;)t.push(r),r=peg$parsequoteEscapedChar();t!==a&&(J=e,t=peg$c3(t)),e=t}return e}())!==a&&peg$parse_()!==a?(i=K,44===e.charCodeAt(K)?(E=s,K++):(E=a,0===ee&&peg$fail(c)),E!==a&&(x=peg$parse_())!==a&&(_=function peg$parseelementFormat(){var t;(t=function peg$parsesimpleFormat(){var t,r,n,i,o,l;t=K,e.substr(K,6)===u?(r=u,K+=6):(r=a,0===ee&&peg$fail(d));r===a&&(e.substr(K,4)===m?(r=m,K+=4):(r=a,0===ee&&peg$fail(p)),r===a&&(e.substr(K,4)===h?(r=h,K+=4):(r=a,0===ee&&peg$fail(f))));r!==a&&peg$parse_()!==a?(n=K,44===e.charCodeAt(K)?(i=s,K++):(i=a,0===ee&&peg$fail(c)),
|
87
87
|
i!==a&&(o=peg$parse_())!==a&&(l=peg$parsechars())!==a?n=i=[i,o,l]:(K=n,n=a),n===a&&(n=null),n!==a?(J=t,t=r={type:r+"Format",style:(y=n)&&y[2],location:location()}):(K=t,t=a)):(K=t,t=a);var y;return t}())===a&&(t=function peg$parsepluralFormat(){var t,r,n,i;t=K,e.substr(K,6)===y?(r=y,K+=6):(r=a,0===ee&&peg$fail(v));r!==a&&peg$parse_()!==a?(44===e.charCodeAt(K)?(n=s,K++):(n=a,0===ee&&peg$fail(c)),n!==a&&peg$parse_()!==a&&(i=peg$parsepluralStyle())!==a?(J=t,t=r={type:(o=i).type,ordinal:!1,offset:o.offset||0,options:o.options,location:location()}):(K=t,t=a)):(K=t,t=a);var o;return t}())===a&&(t=function peg$parseselectOrdinalFormat(){var t,r,n,i;t=K,e.substr(K,13)===b?(r=b,K+=13):(r=a,0===ee&&peg$fail(w));r!==a&&peg$parse_()!==a?(44===e.charCodeAt(K)?(n=s,K++):(n=a,0===ee&&peg$fail(c)),n!==a&&peg$parse_()!==a&&(i=peg$parsepluralStyle())!==a?(J=t,t=r={type:(o=i).type,ordinal:!0,offset:o.offset||0,options:o.options,location:location()}):(K=t,t=a)):(K=t,t=a);var o;return t
|
@@ -89,7 +89,7 @@ i!==a&&(o=peg$parse_())!==a&&(l=peg$parsechars())!==a?n=i=[i,o,l]:(K=n,n=a),n===
|
|
89
89
|
0===ee&&peg$fail(E)),n!==a&&(i=peg$parsenumber())!==a?r=n=[n,i]:(K=r,r=a),(t=r!==a?e.substring(t,K):r)===a&&(t=peg$parsechars()),t}())!==a&&peg$parse_()!==a?(123===e.charCodeAt(K)?(n="{",K++):(n=a,0===ee&&peg$fail(o)),n!==a&&(i=peg$parsemessageFormatPattern())!==a?(125===e.charCodeAt(K)?(s="}",K++):(s=a,0===ee&&peg$fail(l)),s!==a?(J=t,t={type:"optionalFormatPattern",selector:r,value:i,location:location()}):(K=t,t=a)):(K=t,t=a)):(K=t,t=a),t}function peg$parsepluralStyle(){var t,r,n,i;if(t=K,(r=function peg$parseoffset(){var t,r,n;return t=K,e.substr(K,7)===x?(r=x,K+=7):(r=a,0===ee&&peg$fail(_)),r!==a&&peg$parse_()!==a&&(n=peg$parsenumber())!==a?(J=t,t=r=n):(K=t,t=a),t}())===a&&(r=null),r!==a)if(peg$parse_()!==a){if(n=[],(i=peg$parseoptionalFormatPattern())!==a)for(;i!==a;)n.push(i),i=peg$parseoptionalFormatPattern();else n=a;n!==a?(J=t,t=r=function(e,t){return{type:"pluralFormat",offset:e,options:t,location:location()}}(r,n)):(K=t,t=a)}else K=t,t=a;else K=t,t=a;return t}
|
90
90
|
function peg$parsews(){var t,r;if(ee++,t=[],R.test(e.charAt(K))?(r=e.charAt(K),K++):(r=a,0===ee&&peg$fail(k)),r!==a)for(;r!==a;)t.push(r),R.test(e.charAt(K))?(r=e.charAt(K),K++):(r=a,0===ee&&peg$fail(k));else t=a;return ee--,t===a&&(r=a,0===ee&&peg$fail(A)),t}function peg$parse_(){var t,r,n;for(ee++,t=K,r=[],n=peg$parsews();n!==a;)r.push(n),n=peg$parsews();return t=r!==a?e.substring(t,K):r,ee--,t===a&&(r=a,0===ee&&peg$fail(D)),t}function peg$parsedigit(){var t;return C.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(I)),t}function peg$parsehexDigit(){var t;return N.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(L)),t}function peg$parsenumber(){var t,r,n,i,o,s;if(t=K,48===e.charCodeAt(K)?(r="0",K++):(r=a,0===ee&&peg$fail(M)),r===a){if(r=K,n=K,P.test(e.charAt(K))?(i=e.charAt(K),K++):(i=a,0===ee&&peg$fail(O)),i!==a){for(o=[],s=peg$parsedigit();s!==a;)o.push(s),s=peg$parsedigit();o!==a?n=i=[i,o]:(K=n,n=a)}else K=n,n=a;r=n!==a?e.substring(r,K):n}return r!==a&&(J=t,
|
91
91
|
r=parseInt(r,10)),t=r}function peg$parsequoteEscapedChar(){var t,r,n;return t=K,r=K,ee++,39===e.charCodeAt(K)?(n=F,K++):(n=a,0===ee&&peg$fail(U)),n===a&&(j.test(e.charAt(K))?(n=e.charAt(K),K++):(n=a,0===ee&&peg$fail(B))),ee--,n===a?r=void 0:(K=r,r=a),r!==a?(e.length>K?(n=e.charAt(K),K++):(n=a,0===ee&&peg$fail($)),n!==a?(J=t,t=r=n):(K=t,t=a)):(K=t,t=a),t===a&&(t=K,39===e.charCodeAt(K)?(r=F,K++):(r=a,0===ee&&peg$fail(U)),r!==a&&(n=function peg$parseescape(){var t;j.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(B));t===a&&(t=peg$parseapostrophe());return t}())!==a?(J=t,t=r=n):(K=t,t=a)),t}function peg$parseapostrophe(){var t;return 39===e.charCodeAt(K)?(t=F,K++):(t=a,0===ee&&peg$fail(U)),t}function peg$parsechar(){var t,r,n,i,o,s,c,l,u;return t=K,39===e.charCodeAt(K)?(r=F,K++):(r=a,0===ee&&peg$fail(U)),r!==a&&(n=peg$parseapostrophe())!==a?(J=t,t=r=n):(K=t,t=a),t===a&&(q.test(e.charAt(K))?(t=e.charAt(K),K++):(t=a,0===ee&&peg$fail(z)),t===a&&(t=K,
|
92
|
-
"\\\\"===e.substr(K,2)?(r="\\\\",K+=2):(r=a,0===ee&&peg$fail(V)),r!==a&&(J=t,r="\\"),(t=r)===a&&(t=K,"\\#"===e.substr(K,2)?(r="\\#",K+=2):(r=a,0===ee&&peg$fail(W)),r!==a&&(J=t,r="\\#"),(t=r)===a&&(t=K,"\\{"===e.substr(K,2)?(r="\\{",K+=2):(r=a,0===ee&&peg$fail(
|
92
|
+
"\\\\"===e.substr(K,2)?(r="\\\\",K+=2):(r=a,0===ee&&peg$fail(V)),r!==a&&(J=t,r="\\"),(t=r)===a&&(t=K,"\\#"===e.substr(K,2)?(r="\\#",K+=2):(r=a,0===ee&&peg$fail(W)),r!==a&&(J=t,r="\\#"),(t=r)===a&&(t=K,"\\{"===e.substr(K,2)?(r="\\{",K+=2):(r=a,0===ee&&peg$fail(H)),r!==a&&(J=t,r="{"),(t=r)===a&&(t=K,"\\}"===e.substr(K,2)?(r="\\}",K+=2):(r=a,0===ee&&peg$fail(G)),r!==a&&(J=t,r="}"),(t=r)===a&&(t=K,"\\u"===e.substr(K,2)?(r="\\u",K+=2):(r=a,0===ee&&peg$fail(Y)),r!==a?(n=K,i=K,(o=peg$parsehexDigit())!==a&&(s=peg$parsehexDigit())!==a&&(c=peg$parsehexDigit())!==a&&(l=peg$parsehexDigit())!==a?i=o=[o,s,c,l]:(K=i,i=a),(n=i!==a?e.substring(n,K):i)!==a?(J=t,u=n,t=r=String.fromCharCode(parseInt(u,16))):(K=t,t=a)):(K=t,t=a))))))),t}function peg$parsechars(){var e,t,r;if(e=K,t=[],(r=peg$parsechar())!==a)for(;r!==a;)t.push(r),r=peg$parsechar();else t=a;return t!==a&&(J=e,t=peg$c3(t)),e=t}if((r=i())!==a&&K===e.length)return r;throw r!==a&&K<e.length&&peg$fail({type:"end"}),
|
93
93
|
function peg$buildStructuredError(e,t,r){return new peg$SyntaxError(peg$SyntaxError.buildMessage(e,t),e,t,r)}(Q,Z<e.length?e.charAt(Z):null,Z<e.length?peg$computeLocation(Z,Z+1):peg$computeLocation(Z,Z))}}}(),Tn=globalThis&&globalThis.__extends||(yn=function(e,t){return(yn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function __(){this.constructor=e}yn(e,t),e.prototype=null===t?Object.create(t):(__.prototype=t.prototype,new __)}),En=function(){function Compiler(e,t,r){this.locales=[],this.formats={number:{},date:{},time:{}},this.pluralNumberFormat=null,this.currentPlural=null,this.pluralStack=[],this.locales=e,this.formats=t,this.formatters=r}return Compiler.prototype.compile=function(e){return this.pluralStack=[],this.currentPlural=null,this.pluralNumberFormat=null,this.compileMessage(e)},Compiler.prototype.compileMessage=function(e){var t=this
|
94
94
|
;if(!e||"messageFormatPattern"!==e.type)throw new Error('Message AST is not of type: "messageFormatPattern"');var r=e.elements,a=r.filter((function(e){return"messageTextElement"===e.type||"argumentElement"===e.type})).map((function(e){return"messageTextElement"===e.type?t.compileMessageText(e):t.compileArgument(e)}));if(a.length!==r.length)throw new Error("Message element does not have a valid type");return a},Compiler.prototype.compileMessageText=function(e){return this.currentPlural&&/(^|[^\\])#/g.test(e.value)?(this.pluralNumberFormat||(this.pluralNumberFormat=new Intl.NumberFormat(this.locales)),new Rn(this.currentPlural.id,this.currentPlural.format.offset,this.pluralNumberFormat,e.value)):e.value.replace(/\\#/g,"#")},Compiler.prototype.compileArgument=function(e){var t=e.format,r=e.id,a=this.formatters;if(!t)return new _n(r);var n=this.formats,i=this.locales;switch(t.type){case"numberFormat":return{id:r,format:a.getNumberFormat(i,n.number[t.style]).format};case"dateFormat":return{
|
95
95
|
id:r,format:a.getDateTimeFormat(i,n.date[t.style]).format};case"timeFormat":return{id:r,format:a.getDateTimeFormat(i,n.time[t.style]).format};case"pluralFormat":return new An(r,t.offset,this.compileOptions(e),a.getPluralRules(i,{type:t.ordinal?"ordinal":"cardinal"}));case"selectFormat":return new kn(r,this.compileOptions(e));default:throw new Error("Message element does not have a valid format type")}},Compiler.prototype.compileOptions=function(e){var t=this,r=e.format,a=r.options;this.pluralStack.push(this.currentPlural),this.currentPlural="pluralFormat"===r.type?e:null;var n=a.reduce((function(e,r){return e[r.selector]=t.compileMessage(r.value),e}),{});return this.currentPlural=this.pluralStack.pop(),n},Compiler}(),xn=function xn(e){this.id=e},_n=function(e){function StringFormat(){return null!==e&&e.apply(this,arguments)||this}return Tn(StringFormat,e),StringFormat.prototype.format=function(e){return e||"number"==typeof e?"string"==typeof e?e:String(e):""},StringFormat
|
@@ -102,7 +102,7 @@ day:"numeric",year:"2-digit"},medium:{month:"short",day:"numeric",year:"numeric"
|
|
102
102
|
;function collectAllCustomElementsFromICU(e,t=new Map){for(const r of e)if("argumentElement"===r.type&&(t.set(r.id,r),r.format&&"pluralFormat"===r.format.type))for(const e of r.format.options)collectAllCustomElementsFromICU(e.value.elements,t);return t}function formatMessage$1(e,t={},r){const a="en-XA"===r||"en-XL"===r?"de-DE":r,n=new(On.IntlMessageFormat||On)(e,a,zn),i=function _preformatValues(e,t,r){const a=[...collectAllCustomElementsFromICU(e.getAst().elements).values()],n={};for(const{id:e,format:i}of a){if(e&&e in t==0)throw new Error(`ICU Message "${r}" contains a value reference ("${e}") that wasn't provided`);const a=t[e];if(i&&"numberFormat"===i.type){if("number"!=typeof a)throw new Error(`ICU Message "${r}" contains a numeric reference ("${e}") but provided value was not a number`);"milliseconds"===i.style?n[e]=10*Math.round(a/10):"seconds"===i.style&&"timeInMs"===e?n[e]=Math.round(a/100)/10:"bytes"===i.style?n[e]=a/1024:n[e]=a}else n[e]=a}
|
103
103
|
for(const e of Object.keys(t))if(!(e in n)){if("errorCode"!==e)throw new Error(`Provided value "${e}" does not match any placeholder in ICU message "${r}"`);n.errorCode=t.errorCode}return n}(n,t,e);return n.format(i)}function isIcuMessage$2(e){if(!Fn(e))return!1;const{i18nId:t,values:r,formattedDefault:a}=e;if("string"!=typeof t)return!1;if("string"!=typeof a)return!1;if(void 0!==r){if(!Fn(r))return!1;for(const e of Object.values(r))if("string"!=typeof e&&"number"!=typeof e)return!1}return qn.test(t)}function getFormatted(e,t){if(isIcuMessage$2(e))return function _localizeIcuMessage(e,t){const r=_getLocaleMessages(t)[e.i18nId];return r?formatMessage$1(r.message,e.values,t):e.formattedDefault}(e,t);if("string"==typeof e)return e;throw new Error("Attempted to format invalid icuMessage type")}function _formatPathAsString(e){let t="";for(const r of e)if(/^[a-z]+$/i.test(r))t.length&&(t+="."),t+=r;else{if(/]|"|'|\s/.test(r))throw new Error(`Cannot handle "${r}" in i18n`);t+=`[${r}]`}
|
104
104
|
return t}function _getLocaleMessages(e){const t=jn[e];if(!t){if(e===Bn)return{};throw new Error(`Unsupported locale '${e}'`)}return t}function getIcuMessageIdParts(e){if(!qn.test(e))throw Error(`"${e}" does not appear to be a valid ICU message id`);const[t,r]=e.split(" | ");return{filename:t,key:r}}var Vn={DEFAULT_LOCALE:Bn,_formatPathAsString,collectAllCustomElementsFromICU,isIcuMessage:isIcuMessage$2,getFormatted,getRendererFormattedStrings:function getRendererFormattedStrings(e){const t=_getLocaleMessages(e),r=Object.keys(t).filter((e=>e.startsWith("report/"))),a={};for(const e of r){const{filename:r,key:n}=getIcuMessageIdParts(e);if(!r.endsWith("util.js"))throw new Error(`Unexpected message: ${e}`);a[n]=t[e].message}return a},replaceIcuMessages:function replaceIcuMessages(e,t){const r={};return function replaceInObject(e,r,a=[]){if(Un(e))for(const[n,i]of Object.entries(e)){const o=a.concat([n]);if(isIcuMessage$2(i)){
|
105
|
-
const a=getFormatted(i,t),s=r[i.i18nId]||[],c=_formatPathAsString(o);s.push(i.values?{values:i.values,path:c}:c),e[n]=a,r[i.i18nId]=s}else replaceInObject(i,r,o)}}(e,r),r},hasLocale:function hasLocale(e){if(e===Bn)return!0;const t=Intl.NumberFormat.supportedLocalesOf([e]).length>0,r=Boolean(jn[e]);return t&&r},registerLocaleData:function registerLocaleData(e,t){jn[e]=t},formatMessage:formatMessage$1,getIcuMessageIdParts,getAvailableLocales:function getAvailableLocales$1(){return[...new Set([...Object.keys(jn),Bn])].sort()},getCanonicalLocales:function getCanonicalLocales(){return $n}};const Wn=globalThis.URL;var
|
105
|
+
const a=getFormatted(i,t),s=r[i.i18nId]||[],c=_formatPathAsString(o);s.push(i.values?{values:i.values,path:c}:c),e[n]=a,r[i.i18nId]=s}else replaceInObject(i,r,o)}}(e,r),r},hasLocale:function hasLocale(e){if(e===Bn)return!0;const t=Intl.NumberFormat.supportedLocalesOf([e]).length>0,r=Boolean(jn[e]);return t&&r},registerLocaleData:function registerLocaleData(e,t){jn[e]=t},formatMessage:formatMessage$1,getIcuMessageIdParts,getAvailableLocales:function getAvailableLocales$1(){return[...new Set([...Object.keys(jn),Bn])].sort()},getCanonicalLocales:function getCanonicalLocales(){return $n}};const Wn=globalThis.URL;var Hn=getAugmentedNamespace(Object.freeze({__proto__:null,URL:Wn}));const Gn=wn,Yn=bn,Kn=Hn;var Jn={LH_ROOT:"",readJson(e,t){const r=t?Yn.dirname(Kn.fileURLToPath(t.url)):"";return e=Yn.resolve(r,e),JSON.parse(Gn.readFileSync(e,"utf-8"))}};const Xn=bn,Zn=function lookupClosestLocale(e,t){if("string"==typeof e&&t[e])return e
|
106
106
|
;for(var r=[].concat(e||[]),a=0,n=r.length;a<n;++a)for(var i=r[a].split("-");i.length;){var o=i.join("-");if(t[o])return o;i.pop()}},{getAvailableLocales:Qn}=Vn,ei=on.default,{LH_ROOT:ti}=Jn,{isIcuMessage:ri,formatMessage:ai,DEFAULT_LOCALE:ni}=Vn,ii={ms:"{timeInMs, number, milliseconds} ms",seconds:"{timeInMs, number, seconds} s",displayValueByteSavings:"Potential savings of {wastedBytes, number, bytes} KiB",displayValueMsSavings:"Potential savings of {wastedMs, number, milliseconds} ms",displayValueElementsFound:"{nodeCount, plural, =1 {1 element found} other {# elements found}}",columnURL:"URL",columnSize:"Size",columnResourceSize:"Resource Size",columnTransferSize:"Transfer Size",columnCacheTTL:"Cache TTL",columnWastedBytes:"Potential Savings",columnWastedMs:"Potential Savings",columnBlockingTime:"Main-Thread Blocking Time",columnTimeSpent:"Time Spent",columnLocation:"Location",columnResourceType:"Resource Type",columnRequests:"Requests",columnName:"Name",columnSource:"Source",
|
107
107
|
columnOverBudget:"Over Budget",columnElement:"Element",columnStartTime:"Start Time",columnDuration:"Duration",columnFailingElem:"Failing Elements",columnDescription:"Description",totalResourceType:"Total",documentResourceType:"Document",scriptResourceType:"Script",stylesheetResourceType:"Stylesheet",imageResourceType:"Image",mediaResourceType:"Media",fontResourceType:"Font",otherResourceType:"Other",thirdPartyResourceType:"Third-party",otherResourcesLabel:"Other resources",firstContentfulPaintMetric:"First Contentful Paint",interactiveMetric:"Time to Interactive",firstMeaningfulPaintMetric:"First Meaningful Paint",totalBlockingTimeMetric:"Total Blocking Time",maxPotentialFIDMetric:"Max Potential First Input Delay",speedIndexMetric:"Speed Index",largestContentfulPaintMetric:"Largest Contentful Paint",cumulativeLayoutShiftMetric:"Cumulative Layout Shift",interactionToNextPaint:"Interaction to Next Paint",itemSeverityLow:"Low",itemSeverityMedium:"Medium",itemSeverityHigh:"High"}
|
108
108
|
;function createIcuMessageFn(e,t){const r={...ii,...t};return(a,n)=>{const i=Object.keys(r).find((e=>r[e]===a));if(!i)throw new Error(`Could not locate: ${a}`);const o=i in t?e:"lighthouse-core/lib/i18n/i18n.js";return{i18nId:`${Xn.relative(ti,o).replace(/\\/g,"/")} | ${i}`,values:n,formattedDefault:ai(a,n,ni)}}}var oi={UIStrings:ii,lookupLocale:function lookupLocale(e,t){if("object"!=typeof Intl)throw new Error("Lighthouse must be run in Node with `Intl` support. See https://nodejs.org/api/intl.html for help");const r=Intl.getCanonicalLocales(e),a=Intl.NumberFormat.supportedLocalesOf(r),n=t||Qn(),i=Object.fromEntries(n.map((e=>[e,{}]))),o=Zn(a,i);return o||(0===Intl.NumberFormat.supportedLocalesOf("es").length&&ei.warn("i18n","Requested locale not available in this version of node. The `full-icu` npm module can provide additional locales. For help, see https://github.com/GoogleChrome/lighthouse/blob/master/readme.md#how-do-i-get-localized-lighthouse-results-via-the-cli"),
|
@@ -138,14 +138,14 @@ opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Esti
|
|
138
138
|
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.",
|
139
139
|
throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling"};Util$3.UIStrings=Ii;var Ni={Util:Util$3,UIStrings:Ii};const{Util:Li}=Ni,Mi=vi.exports,Pi=["https:","http:","chrome:","chrome-extension:"],Oi=["data","https","wss","blob","chrome","chrome-extension","about","filesystem"],Fi=["localhost","127.0.0.1"],Ui=["blob","data","intent","file","filesystem"];function rewriteChromeInternalUrl(e){return e&&e.startsWith("chrome://")?(e.endsWith("/")&&(e=e.replace(/\/$/,"")),e.replace(/^chrome:\/\/chrome\//,"chrome://")):e}class URLShim extends URL{static isValid(e){try{return new URL(e),!0}catch(e){return!1}}static hostsMatch(e,t){try{return new URL(e).host===new URL(t).host}catch(e){return!1}}static originsMatch(e,t){try{return new URL(e).origin===new URL(t).origin}catch(e){return!1}}static getOrigin(e){try{const t=new URL(e);return t.host&&t.origin||null
|
140
140
|
}catch(e){return null}}static rootDomainsMatch(e,t){let r,a;try{r=Li.createOrReturnURL(e),a=Li.createOrReturnURL(t)}catch(e){return!1}if(!r.hostname||!a.hostname)return!1;return Li.getRootDomain(r)===Li.getRootDomain(a)}static getURLDisplayName(e,t){return Li.getURLDisplayName(new URL(e),t)}static elideDataURI(e){try{return"data:"===new URL(e).protocol?e.slice(0,100):e}catch(t){return e}}static equalWithExcludedFragments(e,t){[e,t]=[e,t].map(rewriteChromeInternalUrl);try{const r=new URL(e);r.hash="";const a=new URL(t);return a.hash="",r.href===a.href}catch(e){return!1}}static isProtocolAllowed(e){try{const t=new URL(e);return Pi.includes(t.protocol)}catch(e){return!1}}static isLikeLocalhost(e){return Fi.includes(e)||e.endsWith(".localhost")}static isSecureScheme(e){return Oi.includes(e)}static isNonNetworkProtocol(e){const t=e.includes(":")?e.slice(0,e.indexOf(":")):e;return Ui.includes(t)}static guessMimeType(e){let t;try{t=new URL(e)}catch{return}if("data:"===t.protocol){
|
141
|
-
const e=t.pathname.match(/^(image\/(png|jpeg|svg\+xml|webp|gif|avif))[;,]/);if(!e)return;return e[1]}const r=t.pathname.toLowerCase().match(/\.(png|jpeg|jpg|svg|webp|gif|avif)$/);if(!r)return;const a=r[1];return"svg"===a?"image/svg+xml":"jpg"===a?"image/jpeg":`image/${a}`}static normalizeUrl(e){if(e&&this.isValid(e)&&this.isProtocolAllowed(e))return new URL(e).href;throw new Mi(Mi.errors.INVALID_URL)}}URLShim.URL=URL,URLShim.INVALID_URL_DEBUG_STRING="Lighthouse was unable to determine the URL of some script executions. It's possible a Chrome extension or other eval'd code is the source.";var ji=URLShim;const Bi=ji,$i="X-TCPMs",qi="X-SSLMs",zi="X-RequestMs",Vi="X-ResponseMs",Wi="X-TotalMs",
|
142
|
-
SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport"};class NetworkRequest$p{constructor(){this.requestId="",this.connectionId="0",this.connectionReused=!1,this.url="",this.protocol="",this.isSecure=!1,this.isValid=!1,this.parsedURL={scheme:""},this.documentURL="",this.startTime=-1,this.endTime=-1,this.responseReceivedTime=-1,this.transferSize=0,this.resourceSize=0,this.fromDiskCache=!1,this.fromMemoryCache=!1,this.fromPrefetchCache=!1,this.lrStatistics=void 0,this.finished=!1,this.requestMethod="",this.statusCode=-1,this.redirectSource=void 0,this.redirectDestination=void 0,this.redirects=void 0,this.failed=!1,this.localizedFailDescription="",this.initiator={type:"other"},this.timing=void 0,this.resourceType=void 0,this.mimeType="",this.priority="Low",this.initiatorRequest=void 0,this.responseHeaders=[],this.responseHeadersText="",this.fetchedViaServiceWorker=!1,this.frameId="",
|
143
|
-
hasErrorStatusCode(){return this.statusCode>=400}setInitiatorRequest(e){this.initiatorRequest=e}onRequestWillBeSent(e){let t;this.requestId=e.requestId;try{t=new Bi(e.request.url)}catch(e){return}this.url=e.request.url,this.documentURL=e.documentURL,this.parsedURL={scheme:t.protocol.split(":")[0],host:t.hostname,securityOrigin:t.origin},this.isSecure=Bi.isSecureScheme(this.parsedURL.scheme),this.startTime=e.timestamp,this.requestMethod=e.request.method,this.initiator=e.initiator,this.resourceType=e.type&&Yi[e.type],this.priority=e.request.initialPriority,this.frameId=e.frameId,this.isLinkPreload="preload"===e.initiator.type||!!e.request.isLinkPreload,this.isValid=!0}onRequestServedFromCache(){this.fromMemoryCache=!0}onResponseReceived(e){this._onResponse(e.response,e.timestamp,e.type),this._updateProtocolForLightrider(),this.frameId=e.frameId}onDataReceived(e){this.resourceSize+=e.dataLength
|
144
|
-
this.finished||(this.finished=!0,this.endTime=e.timestamp,e.encodedDataLength>=0&&(this.transferSize=e.encodedDataLength),this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onLoadingFailed(e){this.finished||(this.finished=!0,this.endTime=e.timestamp,this.failed=!0,this.resourceType=e.type&&Yi[e.type],this.localizedFailDescription=e.errorText,this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onResourceChangedPriority(e){this.priority=e.newPriority}onRedirectResponse(e){if(!e.redirectResponse)throw new Error("Missing redirectResponse data");this._onResponse(e.redirectResponse,e.timestamp,e.type),this.resourceType=void 0,this.finished=!0,this.endTime=e.timestamp,this._updateResponseReceivedTimeIfNecessary()}setSession(e){this.sessionId=e}_onResponse(e,t,r){
|
145
|
-
this.connectionReused=e.connectionReused,e.protocol&&(this.protocol=e.protocol),this.responseReceivedTime=t,this.transferSize=e.encodedDataLength,"boolean"==typeof e.fromDiskCache&&(this.fromDiskCache=e.fromDiskCache),"boolean"==typeof e.fromPrefetchCache&&(this.fromPrefetchCache=e.fromPrefetchCache),this.statusCode=e.status,this.timing=e.timing,r&&(this.resourceType=Yi[r]),this.mimeType=e.mimeType,this.responseHeadersText=e.headersText||"",this.responseHeaders=NetworkRequest$p._headersDictToHeadersArray(e.headers),this.fetchedViaServiceWorker=!!e.fromServiceWorker,this.fromMemoryCache&&(this.timing=void 0),this.timing&&this._recomputeTimesWithResourceTiming(this.timing)}_recomputeTimesWithResourceTiming(e){if(0===e.requestTime||-1===e.receiveHeadersEnd)return;this.startTime=e.requestTime;const t=e.requestTime+e.receiveHeadersEnd/1e3;(!this.responseReceivedTime||this.responseReceivedTime<0)&&(this.responseReceivedTime=t),
|
146
|
-
this.responseReceivedTime=Math.max(this.responseReceivedTime,this.startTime),this.endTime=Math.max(this.endTime,this.responseReceivedTime)}_updateResponseReceivedTimeIfNecessary(){this.responseReceivedTime=Math.min(this.endTime,this.responseReceivedTime)}_updateTransferSizeForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===
|
141
|
+
const e=t.pathname.match(/^(image\/(png|jpeg|svg\+xml|webp|gif|avif))[;,]/);if(!e)return;return e[1]}const r=t.pathname.toLowerCase().match(/\.(png|jpeg|jpg|svg|webp|gif|avif)$/);if(!r)return;const a=r[1];return"svg"===a?"image/svg+xml":"jpg"===a?"image/jpeg":`image/${a}`}static normalizeUrl(e){if(e&&this.isValid(e)&&this.isProtocolAllowed(e))return new URL(e).href;throw new Mi(Mi.errors.INVALID_URL)}}URLShim.URL=URL,URLShim.INVALID_URL_DEBUG_STRING="Lighthouse was unable to determine the URL of some script executions. It's possible a Chrome extension or other eval'd code is the source.";var ji=URLShim;const Bi=ji,$i="X-TCPMs",qi="X-SSLMs",zi="X-RequestMs",Vi="X-ResponseMs",Wi="X-TotalMs",Hi="X-TotalFetchedSize",Gi="X-ProtocolIsH2",Yi={XHR:"XHR",Fetch:"Fetch",EventSource:"EventSource",Script:"Script",Stylesheet:"Stylesheet",Image:"Image",Media:"Media",Font:"Font",Document:"Document",TextTrack:"TextTrack",WebSocket:"WebSocket",Other:"Other",Manifest:"Manifest",
|
142
|
+
SignedExchange:"SignedExchange",Ping:"Ping",Preflight:"Preflight",CSPViolationReport:"CSPViolationReport",Prefetch:"Prefetch"};class NetworkRequest$p{constructor(){this.requestId="",this.connectionId="0",this.connectionReused=!1,this.url="",this.protocol="",this.isSecure=!1,this.isValid=!1,this.parsedURL={scheme:""},this.documentURL="",this.rendererStartTime=-1,this.startTime=-1,this.endTime=-1,this.responseReceivedTime=-1,this.transferSize=0,this.resourceSize=0,this.fromDiskCache=!1,this.fromMemoryCache=!1,this.fromPrefetchCache=!1,this.lrStatistics=void 0,this.finished=!1,this.requestMethod="",this.statusCode=-1,this.redirectSource=void 0,this.redirectDestination=void 0,this.redirects=void 0,this.failed=!1,this.localizedFailDescription="",this.initiator={type:"other"},this.timing=void 0,this.resourceType=void 0,this.mimeType="",this.priority="Low",this.initiatorRequest=void 0,this.responseHeaders=[],this.responseHeadersText="",this.fetchedViaServiceWorker=!1,this.frameId="",
|
143
|
+
this.sessionId=void 0,this.isLinkPreload=!1}hasErrorStatusCode(){return this.statusCode>=400}setInitiatorRequest(e){this.initiatorRequest=e}onRequestWillBeSent(e){let t;this.requestId=e.requestId;try{t=new Bi(e.request.url)}catch(e){return}this.url=e.request.url,this.documentURL=e.documentURL,this.parsedURL={scheme:t.protocol.split(":")[0],host:t.hostname,securityOrigin:t.origin},this.isSecure=Bi.isSecureScheme(this.parsedURL.scheme),this.rendererStartTime=e.timestamp,this.startTime=e.timestamp,this.requestMethod=e.request.method,this.initiator=e.initiator,this.resourceType=e.type&&Yi[e.type],this.priority=e.request.initialPriority,this.frameId=e.frameId,this.isLinkPreload="preload"===e.initiator.type||!!e.request.isLinkPreload,this.isValid=!0}onRequestServedFromCache(){this.fromMemoryCache=!0}onResponseReceived(e){this._onResponse(e.response,e.timestamp,e.type),this._updateProtocolForLightrider(),this.frameId=e.frameId}onDataReceived(e){this.resourceSize+=e.dataLength,
|
144
|
+
-1!==e.encodedDataLength&&(this.transferSize+=e.encodedDataLength)}onLoadingFinished(e){this.finished||(this.finished=!0,this.endTime=e.timestamp,e.encodedDataLength>=0&&(this.transferSize=e.encodedDataLength),this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onLoadingFailed(e){this.finished||(this.finished=!0,this.endTime=e.timestamp,this.failed=!0,this.resourceType=e.type&&Yi[e.type],this.localizedFailDescription=e.errorText,this._updateResponseReceivedTimeIfNecessary(),this._updateTransferSizeForLightrider(),this._updateTimingsForLightrider())}onResourceChangedPriority(e){this.priority=e.newPriority}onRedirectResponse(e){if(!e.redirectResponse)throw new Error("Missing redirectResponse data");this._onResponse(e.redirectResponse,e.timestamp,e.type),this.resourceType=void 0,this.finished=!0,this.endTime=e.timestamp,this._updateResponseReceivedTimeIfNecessary()}setSession(e){this.sessionId=e}_onResponse(e,t,r){
|
145
|
+
this.url=e.url,this.connectionId=String(e.connectionId),this.connectionReused=e.connectionReused,e.protocol&&(this.protocol=e.protocol),this.responseReceivedTime=t,this.transferSize=e.encodedDataLength,"boolean"==typeof e.fromDiskCache&&(this.fromDiskCache=e.fromDiskCache),"boolean"==typeof e.fromPrefetchCache&&(this.fromPrefetchCache=e.fromPrefetchCache),this.statusCode=e.status,this.timing=e.timing,r&&(this.resourceType=Yi[r]),this.mimeType=e.mimeType,this.responseHeadersText=e.headersText||"",this.responseHeaders=NetworkRequest$p._headersDictToHeadersArray(e.headers),this.fetchedViaServiceWorker=!!e.fromServiceWorker,this.fromMemoryCache&&(this.timing=void 0),this.timing&&this._recomputeTimesWithResourceTiming(this.timing)}_recomputeTimesWithResourceTiming(e){if(0===e.requestTime||-1===e.receiveHeadersEnd)return;this.startTime=e.requestTime;const t=e.requestTime+e.receiveHeadersEnd/1e3;(!this.responseReceivedTime||this.responseReceivedTime<0)&&(this.responseReceivedTime=t),
|
146
|
+
this.responseReceivedTime=Math.min(this.responseReceivedTime,t),this.responseReceivedTime=Math.max(this.responseReceivedTime,this.startTime),this.endTime=Math.max(this.endTime,this.responseReceivedTime)}_updateResponseReceivedTimeIfNecessary(){this.responseReceivedTime=Math.min(this.endTime,this.responseReceivedTime)}_updateTransferSizeForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===Hi));if(!e)return;const t=parseFloat(e.value);isNaN(t)||(this.transferSize=t)}_updateProtocolForLightrider(){globalThis.isLightrider&&this.responseHeaders.some((e=>e.name===Gi))&&(this.protocol="h2")}_updateTimingsForLightrider(){if(!globalThis.isLightrider)return;const e=this.responseHeaders.find((e=>e.name===Wi));if(!e)return
|
147
147
|
;const t=parseInt(e.value),r=this.responseHeaders.find((e=>e.name===$i)),a=this.responseHeaders.find((e=>e.name===qi)),n=this.responseHeaders.find((e=>e.name===zi)),i=this.responseHeaders.find((e=>e.name===Vi)),o=r?Math.max(0,parseInt(r.value)):0,s=a?Math.max(0,parseInt(a.value)):0,c=n?Math.max(0,parseInt(n.value)):0,l=i?Math.max(0,parseInt(i.value)):0;o+c+l===t&&(s>o||(this.lrStatistics={endTimeDeltaMs:1e3*(this.endTime-(this.startTime+t/1e3)),TCPMs:o,requestMs:c,responseMs:l}))}static getRequestIdForBackend(e){return e.replace(/(:redirect)+$/,"")}static _headersDictToHeadersArray(e){const t=[];for(const r of Object.keys(e)){const a=e[r].split("\n");for(let e=0;e<a.length;++e)t.push({name:r,value:a[e]})}return t}static get TYPES(){return Yi}static isNonNetworkRequest(e){return Bi.isNonNetworkProtocol(e.protocol)||Bi.isNonNetworkProtocol(e.parsedURL.scheme)}static isSecureRequest(e){
|
148
|
-
return Bi.isSecureScheme(e.parsedURL.scheme)||Bi.isSecureScheme(e.protocol)||Bi.isLikeLocalhost(e.parsedURL.host)||NetworkRequest$p.isHstsRequest(e)}static isHstsRequest(e){const t=e.redirectDestination;if(!t)return!1;return"HSTS"===e.responseHeaders.find((e=>"Non-Authoritative-Reason"===e.name))?.value&&NetworkRequest$p.isSecureRequest(t)}static getResourceSizeOnNetwork(e){return Math.min(e.resourceSize||0,e.transferSize||1/0)}}NetworkRequest$p.HEADER_TCP=$i,NetworkRequest$p.HEADER_SSL=qi,NetworkRequest$p.HEADER_REQ=zi,NetworkRequest$p.HEADER_RES=Vi,NetworkRequest$p.HEADER_TOTAL=Wi,NetworkRequest$p.HEADER_FETCHED_SIZE=
|
148
|
+
return Bi.isSecureScheme(e.parsedURL.scheme)||Bi.isSecureScheme(e.protocol)||Bi.isLikeLocalhost(e.parsedURL.host)||NetworkRequest$p.isHstsRequest(e)}static isHstsRequest(e){const t=e.redirectDestination;if(!t)return!1;return"HSTS"===e.responseHeaders.find((e=>"Non-Authoritative-Reason"===e.name))?.value&&NetworkRequest$p.isSecureRequest(t)}static getResourceSizeOnNetwork(e){return Math.min(e.resourceSize||0,e.transferSize||1/0)}}NetworkRequest$p.HEADER_TCP=$i,NetworkRequest$p.HEADER_SSL=qi,NetworkRequest$p.HEADER_REQ=zi,NetworkRequest$p.HEADER_RES=Vi,NetworkRequest$p.HEADER_TOTAL=Wi,NetworkRequest$p.HEADER_FETCHED_SIZE=Hi,NetworkRequest$p.HEADER_PROTOCOL_IS_H2=Gi;var Ki=NetworkRequest$p;const Ji=Ki;var Xi={fetchResponseBodyFromCache:async function fetchResponseBodyFromCache$4(e,t,r=1e3){return t=Ji.getRequestIdForBackend(t),e.setNextProtocolTimeout(r),(await e.sendCommand("Network.getResponseBody",{requestId:t})).body}},Zi=getAugmentedNamespace(Qa);var Qi=class DevtoolsLog$a{
|
149
149
|
constructor(e){this._filter=e,this._messages=[],this._isRecording=!1}get messages(){return this._messages}reset(){this._messages=[]}beginRecording(){this._isRecording=!0}endRecording(){this._isRecording=!1}record(e){this._isRecording&&"string"==typeof e.method&&(this._filter&&!this._filter.test(e.method)||this._messages.push(e))}};var eo=class FRGatherer$C{meta={supportedModes:[]};startInstrumentation(e){}startSensitiveInstrumentation(e){}stopSensitiveInstrumentation(e){}stopInstrumentation(e){}getArtifact(e){}get name(){let e=this.constructor.name;return e.includes("$")&&(e=e.substr(0,e.indexOf("$"))),e}async beforePass(e){await this.startInstrumentation({...e,dependencies:{}}),await this.startSensitiveInstrumentation({...e,dependencies:{}})}pass(e){}async afterPass(e,t){if("dependencies"in this.meta)throw Error("Gatherer with dependencies should override afterPass");return await this.stopSensitiveInstrumentation({...e,dependencies:{}}),await this.stopInstrumentation({...e,
|
150
150
|
dependencies:{}}),this.getArtifact({...e,dependencies:{}})}};const to=on.default,ro=/^(chrome|https?):/;class TraceProcessor$5{static get TIMESPAN_MARKER_ID(){return"__lighthouseTimespanStart__"}static createNoNavstartError(){return new Error("No navigationStart event found")}static createNoResourceSendRequestError(){return new Error("No ResourceSendRequest event found")}static createNoTracingStartedError(){return new Error("No tracingStartedInBrowser event found")}static createNoFirstContentfulPaintError(){return new Error("No FirstContentfulPaint event found")}static createNoLighthouseMarkerError(){return new Error("No Lighthouse timespan marker event found")}static _isNavigationStartOfInterest(e){return"navigationStart"===e.name&&(void 0===e.args.data?.documentLoaderURL||!!e.args.data?.documentLoaderURL&&ro.test(e.args.data.documentLoaderURL))}static _sortTimestampEventGroup(e,t,r,a){
|
151
151
|
const lookupArrayIndexByTsIndex=e=>t[e],lookupEventByTsIndex=e=>a[lookupArrayIndexByTsIndex(e)],n=[],i=[],o=[];for(const t of e){const e=lookupArrayIndexByTsIndex(t),r=lookupEventByTsIndex(t);"E"===r.ph?n.push(e):"X"===r.ph||"B"===r.ph?i.push(e):o.push(e)}const s=new Map;for(const n of i){const i=a[n];if("X"===i.ph)s.set(n,i.dur);else{let a=Number.MAX_SAFE_INTEGER,o=0;for(let n=r+e.length;n<t.length;n++){const e=lookupEventByTsIndex(n);if(e.name===i.name&&e.pid===i.pid&&e.tid===i.tid){if("E"===e.ph&&0===o){a=e.ts-i.ts;break}"E"===e.ph?o--:"B"===e.ph&&o++}}s.set(n,a)}}return i.sort(((e,t)=>(s.get(t)||0)-(s.get(e)||0)||e-t)),o.sort(((e,t)=>e-t)),[...n,...i,...o]}static filteredTraceSort(e,t){const r=[];for(let a=0;a<e.length;a++)t(e[a])&&r.push(a);r.sort(((t,r)=>e[t].ts-e[r].ts));for(let t=0;t<r.length-1;t++){const a=e[r[t]].ts,n=[t];for(let i=t+1;i<r.length&&e[r[i]].ts===a;i++)n.push(i);if(1===n.length)continue;const i=TraceProcessor$5._sortTimestampEventGroup(n,r,t,e)
|
@@ -178,11 +178,11 @@ if(!Number.isFinite(r.receiveHeadersEnd)||r.receiveHeadersEnd<0)return;if(!Numbe
|
|
178
178
|
static estimateRTTByOrigin(e,t){const{forceCoarseEstimates:r=!1,coarseEstimateMultiplier:a=.3,useDownloadEstimates:n=!0,useSendStartEstimates:i=!0,useHeadersEndEstimates:o=!0}=t||{};let s=NetworkAnalyzer$b._estimateRTTByOriginViaTCPTiming(e);if(!s.size||r){s=new Map;const t=NetworkAnalyzer$b._estimateRTTByOriginViaDownloadTiming(e),r=NetworkAnalyzer$b._estimateRTTByOriginViaSendStartTiming(e),c=NetworkAnalyzer$b._estimateRTTByOriginViaHeadersEndTiming(e);for(const[e,r]of t.entries())n&&s.set(e,r);for(const[e,t]of r.entries()){if(!i)continue;const r=s.get(e)||[];s.set(e,r.concat(t))}for(const[e,t]of c.entries()){if(!o)continue;const r=s.get(e)||[];s.set(e,r.concat(t))}for(const e of s.values())e.forEach(((t,r)=>e[r]=t*a))}if(!s.size)throw new Error("No timing information available");return NetworkAnalyzer$b.summarize(s)}static estimateServerResponseTimeByOrigin(e,t){let r=(t||{}).rttByOrigin;if(!r){r=new Map;const a=NetworkAnalyzer$b.estimateRTTByOrigin(e,t)
|
179
179
|
;for(const[e,t]of a.entries())r.set(e,t.min)}const a=NetworkAnalyzer$b._estimateResponseTimeByOrigin(e,r);return NetworkAnalyzer$b.summarize(a)}static estimateThroughput(e){let t=0;const r=e.reduce(((e,r)=>("data"===r.parsedURL?.scheme||r.failed||!r.finished||r.statusCode>300||!r.transferSize||(t+=r.transferSize,e.push({time:r.responseReceivedTime,isStart:!0}),e.push({time:r.endTime,isStart:!1})),e)),[]).sort(((e,t)=>e.time-t.time));if(!r.length)return 1/0;let a=0,n=0,i=0;return r.forEach((e=>{e.isStart?(0===a&&(n=e.time),a++):(a--,0===a&&(i+=e.time-n))})),8*t/i}static findMainDocument(e,t){const r=NetworkAnalyzer$b.findOptionalMainDocument(e,t);if(!r)throw new Error("Unable to identify the main resource");return r}static findOptionalMainDocument(e,t){if(t){const r=e.find((e=>t.startsWith(e.url)&&Po.equalWithExcludedFragments(e.url,t)));if(r)return r}const r=e.filter((e=>e.resourceType===Mo.TYPES.Document));if(r.length)return r.reduce(((e,t)=>t.startTime<e.startTime?t:e))}
|
180
180
|
static resolveRedirects(e){for(;e.redirectDestination;)e=e.redirectDestination;return e}}var Fo=NetworkAnalyzer$b;const Uo=vi.exports,jo=Fo;function getNetworkError(e){if(!e)return new Uo(Uo.errors.NO_DOCUMENT_REQUEST);if(e.failed){const t=e.localizedFailDescription;return"net::ERR_NAME_NOT_RESOLVED"===t||"net::ERR_NAME_RESOLUTION_FAILED"===t||t.startsWith("net::ERR_DNS_")?new Uo(Uo.errors.DNS_FAILURE):new Uo(Uo.errors.FAILED_DOCUMENT_REQUEST,{errorDetails:t})}return e.hasErrorStatusCode()?new Uo(Uo.errors.ERRORED_DOCUMENT_REQUEST,{statusCode:`${e.statusCode}`}):void 0}function getInterstitialError(e,t){if(!e)return;return t.find((e=>e.documentURL.startsWith("chrome-error://")))&&e.failed?e.localizedFailDescription.startsWith("net::ERR_CERT")?new Uo(Uo.errors.INSECURE_DOCUMENT_REQUEST,{securityMessages:e.localizedFailDescription}):new Uo(Uo.errors.CHROME_INTERSTITIAL_ERROR):void 0}function getNonHtmlError(e){if(e)return"text/html"!==e.mimeType?new Uo(Uo.errors.NOT_HTML,{
|
181
|
-
mimeType:e.mimeType}):void 0}var Bo={getNetworkError,getInterstitialError,getPageLoadError:function getPageLoadError$2(e,t){const{url:r,loadFailureMode:a,networkRecords:n}=t;let i,o;try{i=jo.findMainDocument(n,r)}catch(e){}i&&(o=jo.resolveRedirects(i));const s=getNetworkError(i),c=getInterstitialError(i,n),l=getNonHtmlError(o);if("ignore"!==a)return c||(s||(l||e))},getNonHtmlError};var $o=getAugmentedNamespace(Object.freeze({__proto__:null,version:"9.6.
|
181
|
+
mimeType:e.mimeType}):void 0}var Bo={getNetworkError,getInterstitialError,getPageLoadError:function getPageLoadError$2(e,t){const{url:r,loadFailureMode:a,networkRecords:n}=t;let i,o;try{i=jo.findMainDocument(n,r)}catch(e){}i&&(o=jo.resolveRedirects(i));const s=getNetworkError(i),c=getInterstitialError(i,n),l=getNonHtmlError(o);if("ignore"!==a)return c||(s||(l||e))},getNonHtmlError};var $o=getAugmentedNamespace(Object.freeze({__proto__:null,version:"9.6.8"}));const{version:qo}=$o,zo={latency:0,downloadThroughput:0,uploadThroughput:0,offline:!1},Vo={rate:1};function parseUseragentIntoMetadata(e,t){const r=e.match(/Chrome\/([\d.]+)/)?.[1]||"99.0.1234.0",[a]=r.split(".",1),n="mobile"===t;return{brands:[{brand:"Chromium",version:a},{brand:"Google Chrome",version:a},{brand:"Lighthouse",version:qo}],fullVersion:r,...n?{platform:"Android",platformVersion:"6.0",architecture:"",model:"Moto G4"}:{platform:"macOS",platformVersion:"10.15.7",architecture:"x86",model:""},mobile:n}}
|
182
182
|
function enableNetworkThrottling(e,t){const r={offline:!1,latency:t.requestLatencyMs||0,downloadThroughput:t.downloadThroughputKbps||0,uploadThroughput:t.uploadThroughputKbps||0};return r.downloadThroughput=Math.floor(1024*r.downloadThroughput/8),r.uploadThroughput=Math.floor(1024*r.uploadThroughput/8),e.sendCommand("Network.emulateNetworkConditions",r)}function clearNetworkThrottling(e){return e.sendCommand("Network.emulateNetworkConditions",zo)}function enableCPUThrottling(e,t){const r=t.cpuSlowdownMultiplier;return e.sendCommand("Emulation.setCPUThrottlingRate",{rate:r})}function clearCPUThrottling(e){return e.sendCommand("Emulation.setCPUThrottlingRate",Vo)}var Wo={emulate:async function emulate(e,t){if(!1!==t.emulatedUserAgent){const r=t.emulatedUserAgent;await e.sendCommand("Network.setUserAgentOverride",{userAgent:r,userAgentMetadata:parseUseragentIntoMetadata(r,t.formFactor)})}if(!0!==t.screenEmulation.disabled){
|
183
|
-
const{width:r,height:a,deviceScaleFactor:n,mobile:i}=t.screenEmulation,o={width:r,height:a,deviceScaleFactor:n,mobile:i};await e.sendCommand("Emulation.setDeviceMetricsOverride",o),await e.sendCommand("Emulation.setTouchEmulationEnabled",{enabled:o.mobile})}},throttle:async function throttle(e,t){if("devtools"!==t.throttlingMethod)return clearNetworkThrottling(e);await Promise.all([enableNetworkThrottling(e,t.throttling),enableCPUThrottling(e,t.throttling)])},clearThrottling:async function clearThrottling(e){await Promise.all([clearNetworkThrottling(e),clearCPUThrottling(e)])},enableNetworkThrottling,clearNetworkThrottling,enableCPUThrottling,clearCPUThrottling};const
|
184
|
-
warningData:"{locationCount, plural,\n =1 {There may be stored data affecting loading performance in this location: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n other {There may be stored data affecting loading performance in these locations: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n }"},Yo=oi.createMessageInstanceIdFn("lighthouse-core/gather/driver/storage.js",
|
185
|
-
clearBrowserCaches:async function clearBrowserCaches(e){const t={msg:"Cleaning browser cache",id:"lh:storage:clearBrowserCaches"};
|
183
|
+
const{width:r,height:a,deviceScaleFactor:n,mobile:i}=t.screenEmulation,o={width:r,height:a,deviceScaleFactor:n,mobile:i};await e.sendCommand("Emulation.setDeviceMetricsOverride",o),await e.sendCommand("Emulation.setTouchEmulationEnabled",{enabled:o.mobile})}},throttle:async function throttle(e,t){if("devtools"!==t.throttlingMethod)return clearNetworkThrottling(e);await Promise.all([enableNetworkThrottling(e,t.throttling),enableCPUThrottling(e,t.throttling)])},clearThrottling:async function clearThrottling(e){await Promise.all([clearNetworkThrottling(e),clearCPUThrottling(e)])},enableNetworkThrottling,clearNetworkThrottling,enableCPUThrottling,clearCPUThrottling};const Ho=on.default,Go={
|
184
|
+
warningData:"{locationCount, plural,\n =1 {There may be stored data affecting loading performance in this location: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n other {There may be stored data affecting loading performance in these locations: {locations}. Audit this page in an incognito window to prevent those resources from affecting your scores.}\n }"},Yo=oi.createMessageInstanceIdFn("lighthouse-core/gather/driver/storage.js",Go);var Ko={clearDataForOrigin:async function clearDataForOrigin(e,t){const r={msg:"Cleaning origin data",id:"lh:storage:clearDataForOrigin"};Ho.time(r);const a=new URL(t).origin,n=["file_systems","shader_cache","service_workers","cache_storage"].join(",");e.setNextProtocolTimeout(5e3);try{await e.sendCommand("Storage.clearDataForOrigin",{origin:a,storageTypes:n})}catch(e){if("PROTOCOL_TIMEOUT"!==e.code)throw e;Ho.warn("Driver","clearDataForOrigin timed out")}finally{Ho.timeEnd(r)}},
|
185
|
+
clearBrowserCaches:async function clearBrowserCaches(e){const t={msg:"Cleaning browser cache",id:"lh:storage:clearBrowserCaches"};Ho.time(t),await e.sendCommand("Network.clearBrowserCache"),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!0}),await e.sendCommand("Network.setCacheDisabled",{cacheDisabled:!1}),Ho.timeEnd(t)},getImportantStorageWarning:async function getImportantStorageWarning(e,t){const r=await e.sendCommand("Storage.getUsageAndQuota",{origin:t}),a={local_storage:"Local Storage",indexeddb:"IndexedDB",websql:"Web SQL"},n=r.usageBreakdown.filter((e=>e.usage)).map((e=>a[e.storageType]||"")).filter(Boolean);if(n.length)return Yo(Go.warningData,{locations:n.join(", "),locationCount:n.length})},UIStrings:Go};const Jo=on.default,Xo=Ko,Zo=Wo,Qo=hn;async function prepareThrottlingAndNetwork(e,t,r){const a={msg:"Preparing network conditions",id:"lh:gather:prepareThrottlingAndNetwork"};Jo.time(a),r.disableThrottling?await Zo.clearThrottling(e):await Zo.throttle(e,t)
|
186
186
|
;const n=(r.blockedUrlPatterns||[]).concat(t.blockedUrlPatterns||[]);await e.sendCommand("Network.setBlockedURLs",{urls:n});const i=t.extraHeaders;i&&await e.sendCommand("Network.setExtraHTTPHeaders",{headers:i}),Jo.timeEnd(a)}async function prepareDeviceEmulationAndAsyncStacks(e,t){await e.defaultSession.sendCommand("Network.enable"),await Zo.emulate(e.defaultSession,t),await async function enableAsyncStacks(e){const enable=async()=>{await e.sendCommand("Debugger.enable"),await e.sendCommand("Debugger.setSkipAllPauses",{skip:!0}),await e.sendCommand("Debugger.setAsyncCallStackDepth",{maxDepth:8})};e.on("Debugger.paused",(()=>e.sendCommand("Debugger.resume"))),e.on("Page.frameNavigated",(e=>{e.frame.parentId||enable().catch((e=>Jo.error("Driver",e)))})),await enable()}(e.defaultSession)}var es={prepareThrottlingAndNetwork,prepareTargetForTimespanMode:async function prepareTargetForTimespanMode$1(e,t){const r={msg:"Preparing target for timespan mode",id:"lh:prepare:timespanMode"}
|
187
187
|
;Jo.time(r),await prepareDeviceEmulationAndAsyncStacks(e,t),await prepareThrottlingAndNetwork(e.defaultSession,t,{disableThrottling:!1,blockedUrlPatterns:void 0}),Jo.timeEnd(r)},prepareTargetForNavigationMode:async function prepareTargetForNavigationMode(e,t){const r={msg:"Preparing target for navigation mode",id:"lh:prepare:navigationMode"};Jo.time(r),await prepareDeviceEmulationAndAsyncStacks(e,t),await async function dismissJavaScriptDialogs(e){e.on("Page.javascriptDialogOpening",(t=>{Jo.warn("Driver",`${t.type} dialog opened by the page automatically suppressed.`),e.sendCommand("Page.handleJavaScriptDialog",{accept:!0,promptText:"Lighthouse prompt response"}).catch((e=>Jo.warn("Driver",e)))})),await e.sendCommand("Page.enable")}(e.defaultSession),await e.executionContext.cacheNativesOnNewDocument(),"simulate"===t.throttlingMethod&&await async function shimRequestIdleCallbackOnNewDocument(e,t){await e.executionContext.evaluateOnNewDocument(Qo.wrapRequestIdleCallback,{
|
188
188
|
args:[t.throttling.cpuSlowdownMultiplier]})}(e,t),Jo.timeEnd(r)},prepareTargetForIndividualNavigation:async function prepareTargetForIndividualNavigation(e,t,r){const a={msg:"Preparing target for navigation",id:"lh:prepare:navigation"};Jo.time(a);const n=[],{requestor:i}=r;if(!t.disableStorageReset&&!r.disableStorageReset&&"string"==typeof i){const t=i,{warnings:r}=await async function resetStorageForUrl(e,t){const r=[],a=await Xo.getImportantStorageWarning(e,t);return a&&r.push(a),await Xo.clearDataForOrigin(e,t),await Xo.clearBrowserCaches(e),{warnings:r}}(e,t);n.push(...r)}return await prepareThrottlingAndNetwork(e,t,r),Jo.timeEnd(a),{warnings:n}}};const ts=on.default;var rs=class TargetManager$1{constructor(e){this._enabled=!1,this._session=e,this._listeners=[],this._onSessionAttached=this._onSessionAttached.bind(this),this._targets=new Map,this._onFrameNavigated=async e=>{e.frame.parentId||await this._session.sendCommand("Target.setAutoAttach",{autoAttach:!0,flatten:!0,
|
@@ -217,8 +217,8 @@ warning:"ERROR: 'display' has invalid value "+a+". will fall back to browser."}}
|
|
217
217
|
a.warning=`ERROR: invalid application URL ${e.url}`}return{raw:e,value:{platform:t,id:r,url:a},warning:void 0}}function parseRelatedApplications(e){const t=e.related_applications;if(void 0===t)return{raw:t,value:void 0,warning:void 0};if(!Array.isArray(t))return{raw:t,value:void 0,warning:"ERROR: 'related_applications' expected to be an array but is not."};const r=t.filter((e=>!!e.platform)).map(parseApplication).filter((e=>!!e.value.id.value||!!e.value.url.value));return{raw:t,value:r,warning:void 0}}function parsePreferRelatedApplications(e){const t=e.prefer_related_applications;let r,a;return"boolean"==typeof t?r=t:(void 0!==t&&(a="ERROR: 'prefer_related_applications' expected to be a boolean."),r=void 0),{raw:t,value:r,warning:a}}function parseThemeColor(e){return parseColor(e.theme_color)}function parseBackgroundColor(e){return parseColor(e.background_color)}var Ms=function parse$2(e,t,r){
|
218
218
|
if(void 0===t||void 0===r)throw new Error("Manifest and document URLs required for manifest parsing.");let a;try{a=JSON.parse(e)}catch(r){return{raw:e,value:void 0,warning:"ERROR: file isn't valid JSON: "+r,url:t}}const n={name:parseName(a),short_name:parseShortName(a),start_url:parseStartUrl(a,t,r),display:parseDisplay(a),orientation:parseOrientation(a),icons:parseIcons(a,t),related_applications:parseRelatedApplications(a),prefer_related_applications:parsePreferRelatedApplications(a),theme_color:parseThemeColor(a),background_color:parseBackgroundColor(a)};let i;try{new Ds(t).protocol.startsWith("http")||(i="WARNING: manifest URL not available over a valid network protocol")}catch(e){i=`ERROR: invalid manifest URL: '${t}'`}return{raw:e,value:n,warning:i,url:t}};const Ps=on.default,Os=Ms,Fs=eo;class WebAppManifest$1 extends Fs{meta={supportedModes:["snapshot","navigation"]};static async fetchAppManifest(e){let t;e.setNextProtocolTimeout(1e4);try{
|
219
219
|
t=await e.sendCommand("Page.getAppManifest")}catch(e){if("PROTOCOL_TIMEOUT"===e.code)return Ps.error("WebAppManifest","Failed fetching manifest",e),null;throw e}let r=t.data;if(!r)return null;return 65279===r.charCodeAt(0)&&(r=Buffer.from(r).slice(3).toString()),{...t,data:r}}static async getWebAppManifest(e,t){const r={msg:"Get webapp manifest",id:"lh:gather:getWebAppManifest"};Ps.time(r);const a=await WebAppManifest$1.fetchAppManifest(e);if(!a)return null;const n=Os(a.data,a.url,t);return Ps.timeEnd(r),n}getArtifact(e){const t=e.driver;return WebAppManifest$1.getWebAppManifest(t.defaultSession,e.url)}}var Us=WebAppManifest$1;const js=on.default,Bs=eo;class InstallabilityErrors$1 extends Bs{meta={supportedModes:["snapshot","navigation"]};static async getInstallabilityErrors(e){const t={msg:"Get webapp installability errors",id:"lh:gather:getInstallabilityErrors"};js.time(t);const r=(await e.sendCommand("Page.getInstallabilityErrors")).installabilityErrors;return js.timeEnd(t),{
|
220
|
-
errors:r}}getArtifact(e){const t=e.driver;return InstallabilityErrors$1.getInstallabilityErrors(t.defaultSession)}}var $s=InstallabilityErrors$1;const qs=ls,zs=Qi,Vs=eo;class DevtoolsLog$8 extends Vs{static symbol=Symbol("DevtoolsLog");meta={symbol:DevtoolsLog$8.symbol,supportedModes:["timespan","navigation"]};constructor(){super(),this._networkMonitor=void 0,this._messageLog=new zs(/^(Page|Network)\./),this._onProtocolMessage=e=>this._messageLog.record(e)}async startSensitiveInstrumentation({driver:e}){this._messageLog.reset(),this._messageLog.beginRecording(),this._networkMonitor=new qs(e.defaultSession),this._networkMonitor.on("protocolmessage",this._onProtocolMessage),this._networkMonitor.enable()}async stopSensitiveInstrumentation(){this._networkMonitor&&(this._messageLog.endRecording(),this._networkMonitor.disable(),this._networkMonitor.off("protocolmessage",this._onProtocolMessage))}async getArtifact(){return this._messageLog.messages}}var Ws=DevtoolsLog$8;const
|
221
|
-
;class NetworkUserAgent$1 extends
|
220
|
+
errors:r}}getArtifact(e){const t=e.driver;return InstallabilityErrors$1.getInstallabilityErrors(t.defaultSession)}}var $s=InstallabilityErrors$1;const qs=ls,zs=Qi,Vs=eo;class DevtoolsLog$8 extends Vs{static symbol=Symbol("DevtoolsLog");meta={symbol:DevtoolsLog$8.symbol,supportedModes:["timespan","navigation"]};constructor(){super(),this._networkMonitor=void 0,this._messageLog=new zs(/^(Page|Network)\./),this._onProtocolMessage=e=>this._messageLog.record(e)}async startSensitiveInstrumentation({driver:e}){this._messageLog.reset(),this._messageLog.beginRecording(),this._networkMonitor=new qs(e.defaultSession),this._networkMonitor.on("protocolmessage",this._onProtocolMessage),this._networkMonitor.enable()}async stopSensitiveInstrumentation(){this._networkMonitor&&(this._messageLog.endRecording(),this._networkMonitor.disable(),this._networkMonitor.off("protocolmessage",this._onProtocolMessage))}async getArtifact(){return this._messageLog.messages}}var Ws=DevtoolsLog$8;const Hs=eo,Gs=Ws
|
221
|
+
;class NetworkUserAgent$1 extends Hs{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:Gs.symbol}};static getNetworkUserAgent(e){for(const t of e){if("Network.requestWillBeSent"!==t.method)continue;const e=t.params.request.headers["User-Agent"];if(e)return e}return""}async getArtifact(e){return NetworkUserAgent$1.getNetworkUserAgent(e.dependencies.DevtoolsLog)}}var Ys=NetworkUserAgent$1;const Ks=on.default,Js=eo;async function detectLibraries(){const e=[],t=d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests;for(const[r,a]of Object.entries(t))try{let t;const n=new Promise((e=>t=setTimeout((()=>e(!1)),1e3))),i=await Promise.race([a.test(window),n]);t&&clearTimeout(t),i&&e.push({id:a.id,name:r,version:i.version,npm:a.npm})}catch(e){}return e}class Stacks$1 extends Js{constructor(){super(),this.meta={supportedModes:["snapshot","navigation"]}}static async collectStacks(e){const t={msg:"Collect stacks",id:"lh:gather:collectStacks"};Ks.time(t)
|
222
222
|
;const r=(await e.evaluate(detectLibraries,{args:[],
|
223
223
|
deps:['function _createTimeoutHelper(){let e;return{timeoutPromise:new Promise(((t,o)=>{e=setTimeout((()=>o(new Error("Timed out"))),5e3)})),clearTimeout:()=>clearTimeout(e)}}var UNKNOWN_VERSION=null,d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests={GWT:{id:"gwt",icon:"gwt",url:"http://www.gwtproject.org/",test:function(e){var t=e.document,o=t.getElementById("__gwt_historyFrame"),r=t.gwt_uid,n=t.body.__listener,i=t.body.__eventBits,s=e.__gwt_activeModules,c=e.__gwt_jsonp__,u=e.__gwt_scriptsLoaded||e.__gwt_stylesLoaded||e.__gwt_activeModules;if(o||r||n||i||s||c||u){for(var a=t.getElementsByTagName("iframe"),l=UNKNOWN_VERSION,N=0;N<a.length;N++)try{if(a[N].tabIndex<0&&a[N].contentWindow&&a[N].contentWindow.$gwt_version){l=a[N].contentWindow.$gwt_version;break}}catch(e){}return"0.0.999"==l&&(l="Google Internal"),{version:l}}return!1}},Ink:{id:"ink",icon:"ink",url:"http://ink.sapo.pt/",test:function(e){return!(!e.Ink||!e.Ink.createModule)&&{version:UNKNOWN_VERSION}}},Vaadin:{id:"vaadin",icon:"vaadin",url:"https://vaadin.com/",test:function(e){return!(!e.vaadin||!e.vaadin.registerWidgetset)&&{version:UNKNOWN_VERSION}}},Bootstrap:{id:"bootstrap",icon:"bootstrap",url:"http://getbootstrap.com/",npm:"bootstrap",test:function(e){var t,o=e.$&&e.$.fn;if(o&&(["affix","alert","button","carousel","collapse","dropdown","modal","popover","scrollspy","tab","tooltip"].some((function(o){if(e.$.fn[o]){if(e.$.fn[o].Constructor&&e.$.fn[o].Constructor.VERSION)return t=e.$.fn[o].Constructor.VERSION,!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:\'|\\")(?:bs\\\\.){1}"+o).test(e.$.fn[o].toString()))return t=">= 3.0.0 & <= 3.1.1",!0;if(new RegExp("\\\\$this\\\\.data\\\\((?:\'|\\")"+o).test(e.$.fn[o].toString()))return t=">= 2.0.0 & <= 2.3.2",!0}return!1})),t))return{version:t};return!1}},Zurb:{id:"zurb",icon:"zurb",url:"https://foundation.zurb.com/",npm:"foundation-sites",test:function(e){return!(!e.Foundation||!e.Foundation.Toggler)&&{version:e.Foundation.version||UNKNOWN_VERSION}}},Polymer:{id:"polymer",icon:"polymer",url:"https://www.polymer-project.org/",npm:"@polymer/polymer",test:function(e){return!(!e.Polymer||!e.Polymer.dom)&&{version:e.Polymer.version||UNKNOWN_VERSION}}},LitElement:{id:"litelement",icon:"polymer",url:"https://lit-element.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litElementVersions&&e.litElementVersions.length){var t=[...e.litElementVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},"lit-html":{id:"lit-html",icon:"polymer",url:"https://lit-html.polymer-project.org/",npm:"lit-element",test:function(e){if(e.litHtmlVersions&&e.litHtmlVersions.length){var t=[...e.litHtmlVersions].sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0})));return{version:t[t.length-1]}}return!1}},Highcharts:{id:"highcharts",icon:"highcharts",url:"http://www.highcharts.com",npm:"highcharts",test:function(e){return!(!e.Highcharts||!e.Highcharts.Point)&&{version:e.Highcharts.version||UNKNOWN_VERSION}}},InfoVis:{id:"jit",icon:"jit",url:"http://philogb.github.com/jit/",test:function(e){return!(!e.$jit||!e.$jit.PieChart)&&{version:e.$jit.version||UNKNOWN_VERSION}}},FlotCharts:{id:"flotcharts",icon:"flotcharts",url:"http://www.flotcharts.org/",npm:"flot",test:function(e){return!(!e.$||!e.$.plot)&&{version:e.$.plot.version||UNKNOWN_VERSION}}},CreateJS:{id:"createjs",icon:"createjs",url:"https://createjs.com/",npm:"createjs",test:function(e){return!(!e.createjs||!e.createjs.promote)&&{version:UNKNOWN_VERSION}}},"Google Maps":{id:"gmaps",icon:"gmaps",url:"https://developers.google.com/maps/",test:function(e){return!(!e.google||!e.google.maps)&&{version:e.google.maps.version||UNKNOWN_VERSION}}},jQuery:{id:"jquery",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!!(t&&t.fn&&t.fn.jquery)&&{version:t.fn.jquery.replace(/[^\\d+\\.+]/g,"")||UNKNOWN_VERSION}}},"jQuery (Fast path)":{id:"jquery-fast",icon:"jquery",url:"http://jquery.com",npm:"jquery",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.fn)&&{version:UNKNOWN_VERSION}}},"jQuery UI":{id:"jquery_ui",icon:"jquery_ui",url:"http://jqueryui.com",npm:"jquery-ui",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;if(t&&t.fn&&t.fn.jquery&&t.ui){for(var o="accordion,datepicker,dialog,draggable,droppable,progressbar,resizable,selectable,slider,menu,grid,tabs".split(","),r=[],n=0;n<o.length;n++)t.ui[o[n]]&&r.push(o[n].substr(0,1).toUpperCase()+o[n].substr(1));return{version:t.ui.version||UNKNOWN_VERSION,details:r.length?"Plugins used: "+r.join(","):""}}return!1}},Dojo:{id:"dojo",icon:"dojo",url:"http://dojotoolkit.org",npm:"dojo",test:function(e){return!(!e.dojo||!e.dojo.delegate)&&{version:e.dojo.version?e.dojo.version.toString():UNKNOWN_VERSION,details:"Details: "+(e.dijit?"Uses Dijit":"none")}}},Prototype:{id:"prototype",icon:"prototype",url:"http://prototypejs.org",test:function(e){return!(!e.Prototype||!e.Prototype.BrowserFeatures)&&{version:e.Prototype.Version||UNKNOWN_VERSION}}},Scriptaculous:{id:"scriptaculous",icon:"scriptaculous",url:"http://script.aculo.us",test:function(e){return!(!e.Scriptaculous||!e.Scriptaculous.load)&&{version:e.Scriptaculous.Version||UNKNOWN_VERSION}}},MooTools:{id:"mootools",icon:"mootools",url:"https://mootools.net/",test:function(e){return!(!e.MooTools||!e.MooTools.build)&&{version:e.MooTools.version||UNKNOWN_VERSION}}},Spry:{id:"spry",icon:"spry",url:"http://labs.adobe.com/technologies/spry",test:function(e){return!(!e.Spry||!e.Spry.Data)&&{version:UNKNOWN_VERSION}}},"YUI 2":{id:"yui",icon:"yui",url:"http://developer.yahoo.com/yui/2/",test:function(e){return!(!e.YAHOO||!e.YAHOO.util)&&{version:e.YAHOO.VERSION||UNKNOWN_VERSION}}},"YUI 3":{id:"yui3",icon:"yui3",url:"https://yuilibrary.com/",npm:"yui",test:function(e){return!(!e.YUI||!e.YUI.Env)&&{version:e.YUI.version||UNKNOWN_VERSION}}},Qooxdoo:{id:"qooxdoo",icon:"qooxdoo",url:"http://www.qooxdoo.org/",npm:"qooxdoo",test:function(e){return!(!e.qx||!e.qx.Bootstrap)&&{version:UNKNOWN_VERSION}}},"Ext JS":{id:"extjs",icon:"extjs",url:"https://www.sencha.com/products/extjs/",test:function(e){return e.Ext&&e.Ext.versions?{version:e.Ext.versions.core.version}:!!e.Ext&&{version:e.Ext.version||UNKNOWN_VERSION}}},Ezoic:{id:"ezoic",icon:"ezoic",url:"https://www.ezoic.com/",test:function(e){return!(!e.__ez||!e.__ez.template)&&{version:UNKNOWN_VERSION}}},base2:{id:"base2",icon:"base2",url:"http://code.google.com/p/base2",test:function(e){return!(!e.base2||!e.base2.dom)&&{version:e.base2.version||UNKNOWN_VERSION}}},"Closure Library":{id:"closure",icon:"closure",url:"https://developers.google.com/closure/library/",npm:"google-closure-library",test:function(e){return!(!e.goog||!e.goog.provide)&&{version:UNKNOWN_VERSION}}},"Raphaël":{id:"raphael",icon:"raphael",url:"http://dmitrybaranovskiy.github.io/raphael/",test:function(e){return!(!e.Raphael||!e.Raphael.circle)&&{version:e.Raphael.version||UNKNOWN_VERSION}}},React:{id:"react",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),r=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||null!=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return t(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()||o&&o.innerText.length>0||r||e.React&&e.React.Component)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"React (Fast path)":{id:"react-fast",icon:"react",url:"https://reactjs.org/",npm:"react",test:function(e){function t(e){return null!=e&&null!=e._reactRootContainer}var o=document.getElementById("react-root"),r=document.querySelector("*[data-reactroot]");return!!(t(document.body)||t(document.body.firstElementChild)||o||r||e.React)&&{version:e.React&&e.React.version||UNKNOWN_VERSION}}},"Next.js":{id:"next",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!(!e.__NEXT_DATA__||!e.__NEXT_DATA__.buildId)&&{version:window.next&&window.next.version||UNKNOWN_VERSION}}},"Next.js (Fast path)":{id:"next-fast",icon:"next",url:"https://nextjs.org/",npm:"next",test:function(e){return!!e.__NEXT_DATA__&&{version:UNKNOWN_VERSION}}},Preact:{id:"preact",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("preactattr");function o(e){return"__k"in e&&"props"in e.__k&&"type"in e.__k||("_component"in e||"__preactattr_"in e||t&&null!=e[t])}function r(e){return null!=e&&o(e)&&e}var n=r(document.body)||r(document.body.firstElementChild);if(n||(n=document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return o(e)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()),n||e.preact){var i=UNKNOWN_VERSION;return n&&("__k"in n&&(i="10"),"__preactattr_"in n&&(i="8"),t&&null!=n[t]&&(i="7")),{version:i}}return!1}},"Preact (Fast path)":{id:"preact-fast",icon:"preact",url:"https://preactjs.com/",npm:"preact",test:function(e){var t=UNKNOWN_VERSION;function o(e){return null!=e&&function(e){return null!=e.__k?(t="10",!0):null!=e._component||null!=e.__preactattr_}(e)}return!(!o(document.body)&&!o(document.body.firstElementChild)&&!e.preact)&&{version:t}}},Modernizr:{id:"modernizr",icon:"modernizr",url:"https://modernizr.com/",npm:"modernizr",test:function(e){return!(!e.Modernizr||!e.Modernizr.addTest)&&{version:e.Modernizr._version||UNKNOWN_VERSION}}},"Processing.js":{id:"processingjs",icon:"processingjs",url:"http://processingjs.org",npm:"processing-js",test:function(e){return!(!e.Processing||!e.Processing.box)&&{version:Processing.version||UNKNOWN_VERSION}}},Backbone:{id:"backbone",icon:"backbone",url:"http://backbonejs.org/",npm:"backbone",test:function(e){return!(!e.Backbone||!e.Backbone.Model.extend)&&{version:e.Backbone.VERSION||UNKNOWN_VERSION}}},Leaflet:{id:"leaflet",icon:"leaflet",url:"http://leafletjs.com",npm:"leaflet",test:function(e){return!(!e.L||!e.L.GeoJSON||!e.L.marker&&!e.L.Marker)&&{version:e.L.version||e.L.VERSION||UNKNOWN_VERSION}}},Mapbox:{id:"mapbox",icon:"mapbox",url:"https://www.mapbox.com/",npm:"mapbox-gl",test:function(e){return!!(e.L&&e.L.mapbox&&e.L.mapbox.geocoder)&&{version:e.L.mapbox.VERSION||UNKNOWN_VERSION}}},"Lo-Dash":{id:"lodash",icon:"lodash",url:"https://lodash.com/",npm:"lodash",test:function(e){var t="function"==typeof(t=e._)&&t,o="function"==typeof(o=t&&t.chain)&&o,r=(o||t||function(){return{}})(1);return!(!t||!r.__wrapped__)&&{version:t.VERSION||UNKNOWN_VERSION}}},Underscore:{id:"underscore",icon:"underscore",url:"http://underscorejs.org/",npm:"underscore",test:function(e){return!(!e._||"function"!=typeof e._.tap||d41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests["Lo-Dash"].test(e))&&{version:e._.VERSION||UNKNOWN_VERSION}}},Sammy:{id:"sammy",icon:"sammy",url:"http://sammyjs.org",test:function(e){return!(!e.Sammy||!e.Sammy.Application.curry)&&{version:e.Sammy.VERSION||UNKNOWN_VERSION}}},Rico:{id:"rico",icon:"rico",url:"http://openrico.sourceforge.net/examples/index.html",test:function(e){return!(!e.Rico||!window.Rico.checkIfComplete)&&{version:e.Rico.Version||UNKNOWN_VERSION}}},MochiKit:{id:"mochikit",icon:"mochikit",url:"https://mochi.github.io/mochikit/",test:function(e){return!(!e.MochiKit||!e.MochiKit.Base.module)&&{version:MochiKit.VERSION||UNKNOWN_VERSION}}},"gRaphaël":{id:"graphael",icon:"graphael",url:"https://github.com/DmitryBaranovskiy/g.raphael",test:function(e){return!(!e.Raphael||!e.Raphael.fn.g)&&{version:UNKNOWN_VERSION}}},Glow:{id:"glow",icon:"glow",url:"http://www.bbc.co.uk/glow/",test:function(e){return e.gloader&&e.gloader.getRequests?{version:UNKNOWN_VERSION}:e.glow&&e.glow.dom?{version:e.glow.VERSION||UNKNOWN_VERSION}:!!e.Glow&&{version:e.Glow.version||UNKNOWN_VERSION}}},"Socket.IO":{id:"socketio",icon:"socketio",url:"https://socket.io/",npm:"socket.io",test:function(e){return!(!e.io||!e.io.sockets&&!e.io.Socket)&&{version:e.io.version||UNKNOWN_VERSION}}},Mustache:{id:"mustache",icon:"mustache",url:"http://mustache.github.io/",npm:"mustache",test:function(e){return!(!e.Mustache||!e.Mustache.to_html)&&{version:e.Mustache.version||UNKNOWN_VERSION}}},"Fabric.js":{id:"fabricjs",icon:"icon38",url:"http://fabricjs.com/",npm:"fabric",test:function(e){return!(!e.fabric||!e.fabric.util)&&{version:e.fabric.version||UNKNOWN_VERSION}}},FuseJS:{id:"fusejs",icon:"fusejs",url:"http://fusejs.io/",npm:"fuse.js",test:function(e){return!!e.Fuse&&{version:UNKNOWN_VERSION}}},"Tween.js":{id:"tweenjs",icon:"icon38",url:"https://github.com/tweenjs/tween.js",npm:"tween.js",test:function(e){return!(!e.TWEEN||!e.TWEEN.Easing)&&{version:UNKNOWN_VERSION}}},SproutCore:{id:"sproutcore",icon:"sproutcore",url:"http://sproutcore.com/",test:function(e){return!(!e.SC||!e.SC.Application)&&{version:UNKNOWN_VERSION}}},"Zepto.js":{id:"zepto",icon:"zepto",url:"http://zeptojs.com",npm:"zepto",test:function(e){return!(!e.Zepto||!e.Zepto.fn)&&{version:UNKNOWN_VERSION}}},"three.js":{id:"threejs",icon:"icon38",url:"https://threejs.org/",npm:"three",test:function(e){return e.THREE&&e.THREE.REVISION?{version:"r"+e.THREE.REVISION}:!!e.THREE&&{version:UNKNOWN_VERSION}}},PhiloGL:{id:"philogl",icon:"philogl",url:"http://www.senchalabs.org/philogl/",npm:"philogl",test:function(e){return!(!e.PhiloGL||!e.PhiloGL.Camera)&&{version:e.PhiloGL.version||UNKNOWN_VERSION}}},CamanJS:{id:"camanjs",icon:"camanjs",url:"http://camanjs.com/",npm:"caman",test:function(e){return e.Caman&&e.Caman.version?{version:e.Caman.version.release}:!!e.Caman&&{version:UNKNOWN_VERSION}}},yepnope:{id:"yepnope",icon:"yepnope",url:"http://yepnopejs.com/",test:function(e){return!(!e.yepnope||!e.yepnope.injectJs)&&{version:UNKNOWN_VERSION}}},LABjs:{id:"labjs",icon:"icon38",url:"https://github.com/getify/LABjs",test:function(e){return!(!e.$LAB||!e.$LAB.setOptions)&&{version:UNKNOWN_VERSION}}},"Head JS":{id:"headjs",icon:"headjs",url:"http://headjs.com/",npm:"headjs",test:function(e){return!(!e.head||!e.head.js)&&{version:UNKNOWN_VERSION}}},ControlJS:{id:"controljs",icon:"icon38",url:"http://stevesouders.com/controljs/",test:function(e){return!(!e.CJS||!e.CJS.start)&&{version:UNKNOWN_VERSION}}},RequireJS:{id:"requirejs",icon:"requirejs",url:"http://requirejs.org/",npm:"requirejs",test:function(e){var t=e.require||e.requirejs;return!(!t||!(t.load||t.s&&t.s.contexts&&t.s.contexts._&&(t.s.contexts._.loaded||t.s.contexts._.load)))&&{version:t.version||UNKNOWN_VERSION}}},RightJS:{id:"rightjs",icon:"rightjs",url:"http://rightjs.org/",test:function(e){return!(!e.RightJS||!e.RightJS.isNode)&&{version:e.RightJS.version||UNKNOWN_VERSION}}},"jQuery Tools":{id:"jquerytools",icon:"jquerytools",url:"http://jquerytools.github.io/",test:function(e){var t=e.jQuery||e.$;return!(!t||!t.tools)&&{version:t.tools.version||UNKNOWN_VERSION}}},Pusher:{id:"pusher",icon:"pusher",url:"https://pusher.com/docs/",npm:"pusher-js",test:function(e){return!(!e.Pusher||!e.Pusher.Channel)&&{version:e.Pusher.VERSION||UNKNOWN_VERSION}}},"Paper.js":{id:"paperjs",icon:"paperjs",url:"http://paperjs.org/",npm:"paper",test:function(e){return!(!e.paper||!e.paper.Point)&&{version:e.paper.version||UNKNOWN_VERSION}}},Swiffy:{id:"swiffy",icon:"icon38",url:"https://developers.google.com/swiffy/",test:function(e){return!(!e.swiffy||!e.swiffy.Stage)&&{version:UNKNOWN_VERSION}}},Move:{id:"move",icon:"move",url:"https://github.com/rsms/move",npm:"move",test:function(e){return!(!e.move||!e.move.compile)&&{version:e.move.version()||UNKNOWN_VERSION}}},AmplifyJS:{id:"amplifyjs",icon:"amplifyjs",url:"http://amplifyjs.com/",npm:"amplifyjs",test:function(e){return!(!e.amplify||!e.amplify.publish)&&{version:UNKNOWN_VERSION}}},"Popcorn.js":{id:"popcornjs",icon:"popcornjs",url:"https://github.com/mozilla/popcorn-js/",test:function(e){return!(!e.Popcorn||!e.Popcorn.Events)&&{version:e.Popcorn.version||UNKNOWN_VERSION}}},D3:{id:"d3",icon:"d3",url:"https://d3js.org/",npm:"d3",test:function(e){return!(!e.d3||!e.d3.select)&&{version:e.d3.version||UNKNOWN_VERSION}}},Handlebars:{id:"handlebars",icon:"handlebars",url:"http://handlebarsjs.com/",npm:"handlebars",test:function(e){return!(!e.Handlebars||!e.Handlebars.compile)&&{version:e.Handlebars.VERSION||UNKNOWN_VERSION}}},Knockout:{id:"knockout",icon:"knockout",url:"http://knockoutjs.com/",npm:"knockout",test:function(e){return!(!e.ko||!e.ko.applyBindings)&&{version:e.ko.version||UNKNOWN_VERSION}}},Spine:{id:"spine",icon:"icon38",url:"http://spine.github.io/",test:function(e){return!(!e.Spine||!e.Spine.Controller)&&{version:e.Spine.version||UNKNOWN_VERSION}}},"jQuery Mobile":{id:"jquery-mobile",icon:"jquery_mobile",url:"http://jquerymobile.com/",npm:"jquery-mobile",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.mobile)&&{version:t.mobile.version||UNKNOWN_VERSION}}},"WebFont Loader":{id:"webfontloader",icon:"icon38",url:"https://github.com/typekit/webfontloader",npm:"webfontloader",test:function(e){return!(!e.WebFont||!e.WebFont.load)&&{version:UNKNOWN_VERSION}}},Angular:{id:"angular",icon:"angular",url:"https://angular.io/",npm:"@angular/core",test:function(e){var t=e.document.querySelector("[ng-version]");return t?{version:t.getAttribute("ng-version")||UNKNOWN_VERSION}:!!(e.ng&&e.ng.probe instanceof Function)&&{version:UNKNOWN_VERSION}}},AngularJS:{id:"angularjs",icon:"angularjs",url:"https://angularjs.org/",npm:"angular",test:function(e){var t=e.angular;return t&&t.version&&t.version.full?{version:t.version.full}:!!t&&{version:UNKNOWN_VERSION}}},"Ember.js":{id:"emberjs",icon:"emberjs",url:"https://emberjs.com/",npm:"ember-source",test:function(e){var t=e.Ember||e.Em;return!(!t||!t.GUID_KEY)&&{version:t.VERSION||UNKNOWN_VERSION}}},"Hammer.js":{id:"hammerjs",icon:"hammerjs",url:"http://eightmedia.github.io/hammer.js/",npm:"hammerjs",test:function(e){return!(!e.Hammer||!e.Hammer.Pinch)&&{version:e.Hammer.VERSION||"< 1.0.10"}}},"Visibility.js":{id:"visibilityjs",icon:"icon38",url:"https://github.com/ai/visibilityjs",npm:"visibilityjs",test:function(e){return!(!e.Visibility||!e.Visibility.every)&&{version:UNKNOWN_VERSION}}},"Velocity.js":{id:"velocityjs",icon:"icon38",url:"http://velocityjs.org/",npm:"velocity-animate",test:function(e){var t=e.jQuery||e.$,o=t?t.Velocity:e.Velocity;return o&&o.RegisterEffect&&o.version?{version:o.version.major+"."+o.version.minor+"."+o.version.patch}:!(!o||!o.RegisterEffect)&&{version:UNKNOWN_VERSION}}},"IfVisible.js":{id:"ifvisiblejs",icon:"icon38",url:"http://serkanyersen.github.io/ifvisible.js/",npm:"ifvisible.js",test:function(e){var t=e.ifvisible;return!(!t||"ifvisible.object.event.identifier"!==t.__ceGUID)&&{version:UNKNOWN_VERSION}}},"Pixi.js":{id:"pixi",icon:"pixi",url:"http://www.pixijs.com/",npm:"pixi.js",test:function(e){var t=e.PIXI;return!!(t&&t.WebGLRenderer&&t.VERSION)&&{version:t.VERSION.replace("v","")||UNKNOWN_VERSION}}},"DC.js":{id:"dcjs",icon:"dcjs",url:"http://dc-js.github.io/dc.js/",npm:"dc",test:function(e){var t=e.dc;return!(!t||!t.registerChart)&&{version:t.version||UNKNOWN_VERSION}}},"GreenSock JS":{id:"greensock",icon:"greensock",url:"https://greensock.com/gsap",npm:"gsap",test:function(e){return!(!e.TweenMax||!e.TweenMax.pauseAll)&&{version:e.TweenMax.version||UNKNOWN_VERSION}}},FastClick:{id:"fastclick",icon:"fastclick",url:"https://github.com/ftlabs/fastclick",npm:"fastclick",test:function(e){return!(!e.FastClick||!e.FastClick.notNeeded)&&{version:UNKNOWN_VERSION}}},Isotope:{id:"isotope",icon:"isotope",url:"https://isotope.metafizzy.co/",npm:"isotope-layout",test:function(e){return!!(e.Isotope||null!=e.$&&e.$.Isotope)&&{version:UNKNOWN_VERSION}}},Marionette:{id:"marionette",icon:"marionette",url:"https://marionettejs.com/",npm:"backbone.marionette",test:function(e){return!(!e.Marionette||!e.Marionette.Application)&&{version:e.Marionette.VERSION||UNKNOWN_VERSION}}},Can:{id:"canjs",icon:"canjs",url:"https://canjs.com/",npm:"can",test:function(e){return!(!e.can||!e.can.Construct)&&{version:e.can.VERSION||UNKNOWN_VERSION}}},Vue:{id:"vue",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!(null===document.createTreeWalker(document.body,NodeFilter.SHOW_ELEMENT,(function(e){return null!=e.__vue__?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})).nextNode()&&!e.Vue)&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Vue (Fast path)":{id:"vue-fast",icon:"vue",url:"https://vuejs.org/",npm:"vue",test:function(e){return!!e.Vue&&{version:e.Vue&&e.Vue.version||UNKNOWN_VERSION}}},"Nuxt.js":{id:"nuxt",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!!(e.__NUXT__||e.$nuxt||[...e.document.querySelectorAll("*")].some((e=>e.__vue__?.nuxt)))&&{version:UNKNOWN_VERSION}}},"Nuxt.js (Fast path)":{id:"nuxt-fast",icon:"nuxt",url:"https://nuxtjs.org/",npm:"nuxt",test:function(e){return!(!e.__NUXT__&&!e.$nuxt)&&{version:UNKNOWN_VERSION}}},Two:{id:"two",icon:"two",url:"https://two.js.org/",npm:"two.js",test:function(e){return!(!e.Two||!e.Two.Utils)&&{version:e.Two.Version||UNKNOWN_VERSION}}},Brewser:{id:"brewser",icon:"brewser",url:"https://robertpataki.github.io/brewser/",npm:"brewser",test:function(e){return!(!e.BREWSER||!e.BREWSER.ua)&&{version:BREWSER.VERSION||UNKNOWN_VERSION}}},"Material Design Lite":{id:"materialdesignlite",icon:"mdl",url:"https://getmdl.io/",npm:"material-design-lite",test:function(e){return!(!e.componentHandler||!e.componentHandler.upgradeElement)&&{version:UNKNOWN_VERSION}}},"Kendo UI":{id:"kendoui",icon:"kendoui",url:"https://github.com/telerik/kendo-ui-core",npm:"kendo-ui-core",test:function(e){return!!(e.kendo&&e.kendo.View&&e.kendo.View.extend)&&{version:e.kendo.version||UNKNOWN_VERSION}}},"Matter.js":{id:"matterjs",icon:"matter-js",url:"http://brm.io/matter-js/",npm:"matter-js",test:function(e){return!(!e.Matter||!e.Matter.Engine)&&{version:UNKNOWN_VERSION}}},Riot:{id:"riot",icon:"riot",url:"http://riotjs.com/",npm:"riot",test:function(e){return!(!e.riot||!e.riot.mixin)&&{version:e.riot.version||UNKNOWN_VERSION}}},"Sea.js":{id:"seajs",icon:"icon38",url:"https://seajs.github.io/seajs/docs/",npm:"seajs",test:function(e){return!(!e.seajs||!e.seajs.use)&&{version:e.seajs.version||UNKNOWN_VERSION}}},"Moment.js":{id:"momentjs",icon:"momentjs",url:"http://momentjs.com/",npm:"moment",test:function(e){return!(!e.moment||!e.moment.isMoment&&!e.moment.lang)&&{version:e.moment.version||UNKNOWN_VERSION}}},"Moment Timezone":{id:"moment-timezone",icon:"momentjs",url:"http://momentjs.com/timezone/",npm:"moment-timezone",test:function(e){return!(!e.moment||!e.moment.tz)&&{version:e.moment.tz.version||UNKNOWN_VERSION}}},ScrollMagic:{id:"scrollmagic",icon:"scrollmagic",url:"http://scrollmagic.io/",npm:"scrollmagic",test:function(e){return!(!e.ScrollMagic||!e.ScrollMagic.Controller)&&{version:ScrollMagic.version||UNKNOWN_VERSION}}},SWFObject:{id:"swfobject",icon:"icon38",url:"https://github.com/swfobject/swfobject",test:function(e){return e.swfobject&&e.swfobject.embedSWF?{version:e.swfobject.version||UNKNOWN_VERSION}:!(!e.deconcept||!e.deconcept.SWFObject)&&{version:UNKNOWN_VERSION}}},FlexSlider:{id:"flexslider",icon:"icon38",url:"https://woocommerce.com/flexslider/",npm:"flexslider",test:function(e){var t=e.jQuery||e.$||e.$jq||e.$j;return!!(t&&t.fn&&t.fn.jquery&&t.flexslider)&&{version:UNKNOWN_VERSION}}},SPF:{id:"spf",icon:"icon38",url:"https://youtube.github.io/spfjs/",npm:"spf",test:function(e){return!(!e.spf||!e.spf.init)&&{version:UNKNOWN_VERSION}}},"Numeral.js":{id:"numeraljs",icon:"icon38",url:"http://numeraljs.com/",npm:"numeraljs",test:function(e){return!(!e.numeral||!e.isNumeral)&&{version:e.numeral.version||UNKNOWN_VERSION}}},"boomerang.js":{id:"boomerangjs",icon:"icon38",url:"https://soasta.github.io/boomerang/",npm:"boomerangjs",test:function(e){return!!(e.BOOMR&&e.BOOMR.utils&&e.BOOMR.init)&&{version:e.BOOMR.version||UNKNOWN_VERSION}}},Framer:{id:"framer",icon:"framer",url:"https://framer.com/",npm:"framerjs",test:function(e){return!(!e.Framer||!e.Framer.Layer)&&{version:e.Framer.Version.build||UNKNOWN_VERSION}}},Marko:{id:"marko",icon:"marko",url:"https://markojs.com/",npm:"marko",test:function(e){return!!document.querySelector("[data-marko-key], [data-marko]")&&{version:UNKNOWN_VERSION}}},AMP:{id:"amp",icon:"amp",url:"https://amp.dev/",npm:"https://www.npmjs.com/org/ampproject",test:function(e){var t=e.document.documentElement.getAttribute("amp-version");return!!t&&{version:t}}},Gatsby:{id:"gatsby",icon:"gatsby",url:"https://www.gatsbyjs.org/",npm:"gatsby",test:function(e){return!!document.getElementById("___gatsby")&&{version:UNKNOWN_VERSION}}},Shopify:{id:"shopify",icon:"shopify",url:"https://www.shopify.com/",npm:null,test:function(e){return!(!e.Shopify||!e.Shopify.shop)&&{version:UNKNOWN_VERSION}}},Magento:{id:"magento",icon:"magento",url:"https://magento.com/",npm:null,test:function(e){const t=/\\/static(?:\\/version\\d+)?\\/frontend\\/.+\\/.+\\/requirejs\\/require(?:\\.min)?\\.js/;return!!Array.from(document.querySelectorAll("script[src]")||[]).some((e=>t.test(e.src)))&&{version:2}}},WordPress:{id:"wordpress",icon:"wordpress",url:"https://wordpress.org/",npm:null,test:function(e){const t=!!document.querySelector(\'link[rel="https://api.w.org/"]\'),o=!!document.querySelectorAll(\'link[href*="wp-includes"], script[src*="wp-includes"]\').length;if(!t&&!o)return!1;const r=document.querySelector(\'meta[name=generator][content^="WordPress"]\');return{version:r?r.getAttribute("content").replace(/^\\w+\\s/,""):UNKNOWN_VERSION}}},Wix:{id:"wix",icon:"wix",url:"https://www.wix.com/",npm:null,test:function(e){return!!e.wixBiSession&&{version:UNKNOWN_VERSION}}},Workbox:{id:"workbox",icon:"workbox",url:"https://developers.google.com/web/tools/workbox/",npm:"workbox-sw",test:async function(e){var t=e.navigator;if(!("serviceWorker"in t))return!1;const{timeoutPromise:o,clearTimeout:r}=_createTimeoutHelper(),n=t.serviceWorker.getRegistration().then((function(e){var o=t.serviceWorker.controller?t.serviceWorker.controller.scriptURL:e.active.scriptURL;return fetch(o,{credentials:"include",headers:{"service-worker":"script"}}).then((function(e){return e.text()})).then((function(e){if(/new Workbox|new workbox|workbox\\.precaching\\.|workbox\\.strategies/gm.test(e)){var t=/workbox.*?\\b((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?)\\b/gim.exec(e),o=UNKNOWN_VERSION;return Array.isArray(t)&&t.length>1&&t[1]&&(o=t[1]),{version:o}}return!1}))})).catch((function(e){return!1}));return Promise.race([n,o]).catch((function(e){return!1})).finally((e=>(r(),e)))}},Boq:{id:"boq",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/143",npm:null,test:function(e){return!!e.WIZ_global_data&&{version:UNKNOWN_VERSION}}},Wiz:{id:"wiz",icon:"icon38",url:"https://github.com/johnmichel/Library-Detector-for-Chrome/pull/147",npm:null,test:function(e){return!!document.__wizdispatcher&&{version:UNKNOWN_VERSION}}},"core-js":{id:"corejs",icon:"icon38",url:"https://github.com/zloirock/core-js",npm:"core-js",test:function(e){const t=e["__core-js_shared__"],o=e.core;if(t){const e=t.versions;return{version:Array.isArray(e)?e.map((e=>`core-js-${e.mode}@${e.version}`)).join("; "):UNKNOWN_VERSION}}return!!o&&{version:o.version||UNKNOWN_VERSION}}},Drupal:{id:"drupal",icon:"drupal",url:"https://www.drupal.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="Drupal"]\'),o=t?t.getAttribute("content").replace(/\\D+/gi,""):UNKNOWN_VERSION,r=/\\/sites\\/(?:default|all)\\/(?:themes|modules|files)/,n=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(n.some((e=>r.test(e.src)))||n.some((e=>r.test(e.href)))||t||e.Drupal&&e.Drupal.behaviors)&&{version:o}}},TYPO3:{id:"typo3",icon:"typo3",url:"https://typo3.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="TYPO3"]\'),o=/\\/(typo3conf|typo3temp|fileadmin)/,r=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||r.some((e=>o.test(e.src)))||r.some((e=>o.test(e.href))))&&{version:UNKNOWN_VERSION}}},"Create React App":{id:"create-react-app",icon:"cra",url:"https://create-react-app.dev/",npm:"react-scripts",test:function(e){let t,o,r=e.document.body.firstElementChild;do{"noscript"===r.localName?t=r:"root"===r.id&&(o=r)}while(r=r.nextElementSibling);return!!(o&&t&&/You need to enable JavaScript to run this app/.test(t.textContent))&&{version:UNKNOWN_VERSION}}},"Guess.js":{id:"guessjs",icon:"guessjs",url:"https://guess-js.github.io/",test:function(e){return!(!e.__GUESS__||!e.__GUESS__.guess)&&{version:UNKNOWN_VERSION}}},"October CMS":{id:"octobercms",icon:"octobercms",url:"https://octobercms.com/",npm:null,test:function(e){const t=document.querySelector(\'meta[name="generator"][content^="OctoberCMS"]\'),o=document.querySelector(\'meta[name="generator"][content^="October CMS"]\'),r=/\\/modules\\/system\\/assets\\/(css|js)\\/framework(\\.extras|\\.combined)?(-min)?/,n=Array.from(document.querySelectorAll("link,style,script")||[]);return!!(t||o||n.some((e=>r.test(e.src||e.href))))&&{version:UNKNOWN_VERSION}}},Joomla:{id:"joomla",icon:"joomla",url:"https://www.joomla.org/",npm:null,test:function(e){const t=document.querySelector(\'meta[name=generator][content^="Joomla"]\'),o=!!document.querySelectorAll(\'script[src*="/media/jui/js/bootstrap.min.js"]\').length;return t?{version:t.getAttribute("content").replace(/^\\w+\\s/,"")}:!(!e.Joomla&&!o)&&{version:UNKNOWN_VERSION}}},Sugar:{id:"sugar",icon:"sugar",url:"https://sugarjs.com",npm:"sugar",test:function(e){return e.Sugar?{version:e.Sugar.VERSION||UNKNOWN_VERSION}:!!e.Array.SugarMethods&&{version:UNKNOWN_VERSION}}},Bento:{id:"bentojs",icon:"bentojs",url:"https://bentojs.dev",npm:"https://www.npmjs.com/org/bentoproject",test:function(e){return!(!e.BENTO||!e.BENTO.push)&&{version:UNKNOWN_VERSION}}}};']
|
224
224
|
})).map((e=>({detector:"js",id:e.id,name:e.name,version:"number"==typeof e.version?String(e.version):e.version||void 0,npm:e.npm||void 0})));return Ks.timeEnd(t),r}async getArtifact(e){return Stacks$1.collectStacks(e.driver.executionContext)}}var Xs=Stacks$1;const Zs=on.default,Qs=la,{getBrowserVersion:ec,getBenchmarkIndex:tc,getEnvironmentWarnings:rc}=mi;var ac={getBaseArtifacts:async function getBaseArtifacts$3(e,t,r){const a=await tc(t.executionContext),{userAgent:n}=await ec(t.defaultSession);return{fetchTime:(new Date).toJSON(),Timing:[],LighthouseRunWarnings:[],settings:e.settings,BenchmarkIndex:a,HostUserAgent:n,HostFormFactor:n.includes("Android")||n.includes("Mobile")?"mobile":"desktop",URL:{requestedUrl:"",finalUrl:""},PageLoadError:null,GatherContext:r,Stacks:[],NetworkUserAgent:"",WebAppManifest:null,InstallabilityErrors:{errors:[]},traces:{},devtoolsLogs:{}}},finalizeArtifacts:function finalizeArtifacts$4(e,t){
|
@@ -298,8 +298,8 @@ return Object.prototype.hasOwnProperty.call(e,t)}var qc={inherits:Fc,_extend,log
|
|
298
298
|
!((n=(t=this.charBuffer.slice(0,this.charLength).toString(this.encoding)).charCodeAt(t.length-1))>=55296&&n<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var a=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,a),a-=this.charReceived);var n;a=(t+=e.toString(this.encoding,0,a)).length-1;if((n=t.charCodeAt(a))>=55296&&n<=56319){var i=this.surrogateSize;return this.charLength+=i,this.charReceived+=i,this.charBuffer.copy(this.charBuffer,i,0,i),e.copy(this.charBuffer,0,0,i),t.substring(0,a)}return t},StringDecoder.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},StringDecoder.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),
|
299
299
|
this.charReceived){var r=this.charReceived,a=this.charBuffer,n=this.encoding;t+=a.slice(0,r).toString(n)}return t},Readable.ReadableState=ReadableState;var Wc=debuglog("stream");function ReadableState(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,a=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:a,this.highWaterMark=~~this.highWaterMark,this.buffer=new BufferList,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new StringDecoder(e.encoding),this.encoding=e.encoding)}function Readable(e){if(!(this instanceof Readable))return new Readable(e)
|
300
300
|
;this._readableState=new ReadableState(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),EventEmitter$4.call(this)}function readableAddChunk(e,t,r,a,n){var i=function chunkInvalid(e,t){var r=null;Buffer$2.isBuffer(t)||"string"==typeof t||null==t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));return r}(t,r);if(i)e.emit("error",i);else if(null===r)t.reading=!1,function onEofChunk(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,emitReadable(e)}(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!n){var o=new Error("stream.push() after EOF");e.emit("error",o)}else if(t.endEmitted&&n){var s=new Error("stream.unshift() after end event");e.emit("error",s)}else{var c;!t.decoder||n||a||(r=t.decoder.write(r),c=!t.objectMode&&0===r.length),n||(t.reading=!1),c||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,
|
301
|
-
n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&emitReadable(e))),function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,nextTick(maybeReadMore_,e,t))}(e,t)}else n||(t.reading=!1);return function needMoreData(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(t)}Fc(Readable,EventEmitter$4),Readable.prototype.push=function(e,t){var r=this._readableState;return r.objectMode||"string"!=typeof e||(t=t||r.defaultEncoding)!==r.encoding&&(e=Buffer$2.from(e,t),t=""),readableAddChunk(this,r,e,t,!1)},Readable.prototype.unshift=function(e){return readableAddChunk(this,this._readableState,e,"",!0)},Readable.prototype.isPaused=function(){return!1===this._readableState.flowing},Readable.prototype.setEncoding=function(e){return this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var
|
302
|
-
return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=
|
301
|
+
n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&emitReadable(e))),function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,nextTick(maybeReadMore_,e,t))}(e,t)}else n||(t.reading=!1);return function needMoreData(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(t)}Fc(Readable,EventEmitter$4),Readable.prototype.push=function(e,t){var r=this._readableState;return r.objectMode||"string"!=typeof e||(t=t||r.defaultEncoding)!==r.encoding&&(e=Buffer$2.from(e,t),t=""),readableAddChunk(this,r,e,t,!1)},Readable.prototype.unshift=function(e){return readableAddChunk(this,this._readableState,e,"",!0)},Readable.prototype.isPaused=function(){return!1===this._readableState.flowing},Readable.prototype.setEncoding=function(e){return this._readableState.decoder=new StringDecoder(e),this._readableState.encoding=e,this};var Hc=8388608;function howMuchToRead(e,t){
|
302
|
+
return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=Hc?e=Hc:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function emitReadable(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(Wc("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?nextTick(emitReadable_,e):emitReadable_(e))}function emitReadable_(e){Wc("emit readable"),e.emit("readable"),flow(e)}function maybeReadMore_(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(Wc("maybeReadMore read 0"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function nReadingNextTick(e){Wc("readable nexttick read 0"),e.read(0)}function resume_(e,t){t.reading||(Wc("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}
|
303
303
|
function flow(e){var t=e._readableState;for(Wc("flow",t.flowing);t.flowing&&null!==e.read(););}function fromList(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function fromListPartial(e,t,r){var a;e<t.head.data.length?(a=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):a=e===t.head.data.length?t.shift():r?function copyFromBufferString(e,t){var r=t.head,a=1,n=r.data;e-=n.length;for(;r=r.next;){var i=r.data,o=e>i.length?i.length:e;if(o===i.length?n+=i:n+=i.slice(0,e),0===(e-=o)){o===i.length?(++a,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(o));break}++a}return t.length-=a,n}(e,t):function copyFromBuffer(e,t){var r=Buffer$2.allocUnsafe(e),a=t.head,n=1;a.data.copy(r),e-=a.data.length;for(;a=a.next;){var i=a.data,o=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,o),0===(e-=o)){o===i.length?(++n,
|
304
304
|
a.next?t.head=a.next:t.head=t.tail=null):(t.head=a,a.data=i.slice(o));break}++n}return t.length-=n,r}(e,t);return a}(e,t.buffer,t.decoder),r);var r}function endReadable(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,nextTick(endReadableNT,t,e))}function endReadableNT(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function indexOf(e,t){for(var r=0,a=e.length;r<a;r++)if(e[r]===t)return r;return-1}function nop(){}function WriteReq(e,t,r){this.chunk=e,this.encoding=t,this.callback=r,this.next=null}function WritableState(e,t){Object.defineProperty(this,"buffer",{get:deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")}),e=e||{},this.objectMode=!!e.objectMode,t instanceof Duplex&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,a=this.objectMode?16:16384
|
305
305
|
;this.highWaterMark=r||0===r?r:a,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var n=!1===e.decodeStrings;this.decodeStrings=!n,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function onwrite(e,t){var r=e._writableState,a=r.sync,n=r.writecb;if(function onwriteStateUpdate(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function onwriteError(e,t,r,a,n){--t.pendingcb,r?nextTick(n,a):n(a);e._writableState.errorEmitted=!0,e.emit("error",a)}(e,r,a,t,n);else{var i=needFinish(r);i||r.corked||r.bufferProcessing||!r.bufferedRequest||clearBuffer(e,r),a?nextTick(afterWrite,e,r,i,n):afterWrite(e,r,i,n)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,
|
@@ -312,7 +312,7 @@ var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)re
|
|
312
312
|
e.flowing=!0,function resume(e,t){t.resumeScheduled||(t.resumeScheduled=!0,nextTick(resume_,e,t))}(this,e)),this},Readable.prototype.pause=function(){return Wc("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(Wc("pause"),this._readableState.flowing=!1,this.emit("pause")),this},Readable.prototype.wrap=function(e){var t=this._readableState,r=!1,a=this;for(var n in e.on("end",(function(){if(Wc("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&a.push(e)}a.push(null)})),e.on("data",(function(n){(Wc("wrapped data"),t.decoder&&(n=t.decoder.write(n)),t.objectMode&&null==n)||(t.objectMode||n&&n.length)&&(a.push(n)||(r=!0,e.pause()))})),e)void 0===this[n]&&"function"==typeof e[n]&&(this[n]=function(t){return function(){return e[t].apply(e,arguments)}}(n));return function forEach(e,t){for(var r=0,a=e.length;r<a;r++)t(e[r],r)}(["error","close","destroy","pause","resume"],(function(t){e.on(t,a.emit.bind(a,t))})),a._read=function(t){
|
313
313
|
Wc("wrapped _read",t),r&&(r=!1,e.resume())},a},Readable._fromList=fromList,Writable.WritableState=WritableState,Fc(Writable,EventEmitter$4),WritableState.prototype.getBuffer=function writableStateGetBuffer(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},Writable.prototype.write=function(e,t,r){var a=this._writableState,n=!1;return"function"==typeof t&&(r=t,t=null),Buffer$2.isBuffer(e)?t="buffer":t||(t=a.defaultEncoding),"function"!=typeof r&&(r=nop),a.ended?function writeAfterEnd(e,t){var r=new Error("write after end");e.emit("error",r),nextTick(t,r)}(this,r):function validChunk(e,t,r,a){var n=!0,i=!1;return null===r?i=new TypeError("May not write null values to stream"):Buffer$2.isBuffer(r)||"string"==typeof r||void 0===r||t.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(e.emit("error",i),nextTick(a,i),n=!1),n}(this,a,e,r)&&(a.pendingcb++,
|
314
314
|
n=function writeOrBuffer(e,t,r,a,n){r=function decodeChunk(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=Buffer$2.from(t,r));return t}(t,r,a),Buffer$2.isBuffer(r)&&(a="buffer");var i=t.objectMode?1:r.length;t.length+=i;var o=t.length<t.highWaterMark;o||(t.needDrain=!0);if(t.writing||t.corked){var s=t.lastBufferedRequest;t.lastBufferedRequest=new WriteReq(r,a,n),s?s.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else doWrite(e,t,!1,i,r,a,n);return o}(this,a,e,t,r)),n},Writable.prototype.cork=function(){this._writableState.corked++},Writable.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||clearBuffer(this,e))},Writable.prototype.setDefaultEncoding=function setDefaultEncoding(e){if("string"==typeof e&&(e=e.toLowerCase()),
|
315
|
-
!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Writable.prototype._write=function(e,t,r){r(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var a=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),a.corked&&(a.corked=1,this.uncork()),a.ending||a.finished||function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,a,r)},Fc(Duplex,Readable);for(var
|
315
|
+
!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Writable.prototype._write=function(e,t,r){r(new Error("not implemented"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var a=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),a.corked&&(a.corked=1,this.uncork()),a.ending||a.finished||function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,a,r)},Fc(Duplex,Readable);for(var Gc=Object.keys(Writable.prototype),Yc=0;Yc<Gc.length;Yc++){var Kc=Gc[Yc];Duplex.prototype[Kc]||(Duplex.prototype[Kc]=Writable.prototype[Kc])}function Duplex(e){if(!(this instanceof Duplex))return new Duplex(e);Readable.call(this,e),Writable.call(this,e),
|
316
316
|
e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",onend)}function onend(){this.allowHalfOpen||this._writableState.ended||nextTick(onEndNT,this)}function onEndNT(e){e.end()}function TransformState(e){this.afterTransform=function(t,r){return function afterTransform(e,t,r){var a=e._transformState;a.transforming=!1;var n=a.writecb;if(!n)return e.emit("error",new Error("no writecb in Transform class"));a.writechunk=null,a.writecb=null,null!=r&&e.push(r);n(t);var i=e._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&e._read(i.highWaterMark)}(e,t,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function Transform(e){if(!(this instanceof Transform))return new Transform(e);Duplex.call(this,e),this._transformState=new TransformState(this);var t=this;this._readableState.needReadable=!0,
|
317
317
|
this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.once("prefinish",(function(){"function"==typeof this._flush?this._flush((function(e){done(t,e)})):done(t)}))}function done(e,t){if(t)return e.emit("error",t);var r=e._writableState,a=e._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(a.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}function PassThrough(e){if(!(this instanceof PassThrough))return new PassThrough(e);Transform.call(this,e)}function Stream(){EventEmitter$4.call(this)}Fc(Transform,Duplex),Transform.prototype.push=function(e,t){return this._transformState.needTransform=!1,Duplex.prototype.push.call(this,e,t)},Transform.prototype._transform=function(e,t,r){throw new Error("Not implemented")},Transform.prototype._write=function(e,t,r){var a=this._transformState;if(a.writecb=r,
|
318
318
|
a.writechunk=e,a.writeencoding=t,!a.transforming){var n=this._readableState;(a.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}},Transform.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},Fc(PassThrough,Transform),PassThrough.prototype._transform=function(e,t,r){r(null,e)},Fc(Stream,EventEmitter$4),Stream.Readable=Readable,Stream.Writable=Writable,Stream.Duplex=Duplex,Stream.Transform=Transform,Stream.PassThrough=PassThrough,Stream.Stream=Stream,Stream.prototype.pipe=function(e,t){var r=this;function ondata(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function ondrain(){r.readable&&r.resume&&r.resume()}r.on("data",ondata),e.on("drain",ondrain),e._isStdio||t&&!1===t.end||(r.on("end",onend),r.on("close",onclose));var a=!1;function onend(){a||(a=!0,e.end())}function onclose(){a||(a=!0,
|
@@ -344,8 +344,8 @@ serverResponseTimeByOrigin:{}};for(const[r,a]of e.additionalRttByOrigin.entries(
|
|
344
344
|
;let a=500,n="";for(const e of t)n+=`,\n ${JSON.stringify(e)}`,a--,0===a&&(yield n,a=500,n="");yield n}yield"\n]"}async function saveTrace(e,t){const r=function*traceJsonGenerator(e){const{traceEvents:t,...r}=e;yield"{\n",yield'"traceEvents": ',yield*arrayOfObjectsJsonGenerator(t);for(const[e,t]of Object.entries(r))yield`,\n"${e}": ${JSON.stringify(t,null,2)}`;yield"}\n"}(e),a=Cl.createWriteStream(t);return $l(r,a)}function saveDevtoolsLog(e,t){const r=Cl.createWriteStream(t);return $l((function*(){yield*arrayOfObjectsJsonGenerator(e),yield"\n"}),r)}var Wl={saveArtifacts:async function saveArtifacts(e,t){const r={msg:"Saving artifacts",id:"lh:assetSaver:saveArtifacts"};Nl.time(r),Cl.mkdirSync(t,{recursive:!0});const a=Cl.readdirSync(t);for(const e of a)(e.endsWith(zl)||e.endsWith(Vl)||e===ql)&&Cl.unlinkSync(`${t}/${e}`);const{traces:n,devtoolsLogs:i,...o}=e;for(const[e,r]of Object.entries(n))await saveTrace(r,`${t}/${e}.trace.json`)
|
345
345
|
;for(const[e,r]of Object.entries(i))await saveDevtoolsLog(r,`${t}/${e}.devtoolslog.json`);const s=JSON.stringify(o,stringifyReplacer,2)+"\n";Cl.writeFileSync(`${t}/artifacts.json`,s,"utf8"),Nl.log("Artifacts saved to disk in folder:",t),Nl.timeEnd(r)},saveLhr:function saveLhr(e,t){Cl.writeFileSync(`${t}/lhr.report.json`,JSON.stringify(e,null,2))},loadArtifacts:function loadArtifacts(e){if(Nl.log("Reading artifacts from disk:",e),!Cl.existsSync(e))throw new Error("No saved artifacts found at "+e);const t=Cl.readFileSync(Il.join(e,ql),"utf8"),r=JSON.parse(t,Bl.parseReviver),a=Cl.readdirSync(e);return r.devtoolsLogs={},a.filter((e=>e.endsWith(Vl))).forEach((t=>{const a=t.replace(Vl,""),n=JSON.parse(Cl.readFileSync(Il.join(e,t),"utf8"));r.devtoolsLogs[a]=n})),r.traces={},a.filter((e=>e.endsWith(zl))).forEach((t=>{const a=Cl.readFileSync(Il.join(e,t),{encoding:"utf-8"}),n=JSON.parse(a),i=t.replace(zl,"");r.traces[i]=Array.isArray(n)?{traceEvents:n}:n})),
|
346
346
|
Array.isArray(r.Timing)&&r.Timing.forEach((e=>e.gather=!0)),r},saveAssets:async function saveAssets(e,t,r){const a=(await prepareAssets(e,t)).map((async(e,t)=>{const a=`${r}-${t}.devtoolslog.json`;Cl.writeFileSync(a,JSON.stringify(e.devtoolsLog,null,2)),Nl.log("saveAssets","devtools log saved to disk: "+a);const n=`${r}-${t}.trace.json`;Nl.log("saveAssets","streaming trace file to disk: "+n),await saveTrace(e.traceData,n),Nl.log("saveAssets","trace file streamed to disk: "+n)}));await Promise.all(a),await async function saveLanternDebugTraces(e){if(process.env.LANTERN_DEBUG)for(const[t,r]of Pl.ALL_NODE_TIMINGS){if(Ol.simulationNamesToIgnore.includes(t))continue;const a=`${e}-${t}.trace.json`;await saveTrace(Ol.convertNodeTimingsToTrace(r),a),Nl.log("saveAssets",`${t} lantern trace file streamed to disk: ${a}`)}}(r)},prepareAssets,saveTrace,saveDevtoolsLog,saveLanternNetworkData:async function saveLanternNetworkData(e,t){const r={computedCache:new Map
|
347
|
-
},a=await Ul.request(e,r),n=jl.convertAnalysisToSaveableLanternData(a);Cl.writeFileSync(t,JSON.stringify(n))},stringifyReplacer,normalizeTimingEntries:function normalizeTimingEntries(e){let t=0;for(const r of e)r.startTime=t++,r.duration=1}},
|
348
|
-
const t=`audit-${n.audit}-${e.message}`;if(a.has(t))return;a.set(t,!0)}if(n.gatherer){const t=`gatherer-${n.gatherer}-${e.message}`;if(a.has(t))return;a.set(t,!0)}const i=Yl.find((t=>t.pattern.test(e.message)));i&&i.rate<=Math.random()||(e.protocolMethod&&(r.fingerprint=["{{ default }}",e.protocolMethod,e.protocolError],r.tags=r.tags||{},r.tags.protocolMethod=e.protocolMethod),t.withScope((a=>{r.level&&a.setLevel(r.level),r.tags&&a.setTags(r.tags),r.extra&&a.setExtras(r.extra),t.captureException(e)})))}}catch(e){
|
347
|
+
},a=await Ul.request(e,r),n=jl.convertAnalysisToSaveableLanternData(a);Cl.writeFileSync(t,JSON.stringify(n))},stringifyReplacer,normalizeTimingEntries:function normalizeTimingEntries(e){let t=0;for(const r of e)r.startTime=t++,r.duration=1}},Hl=getAugmentedNamespace(Object.freeze({__proto__:null,default:{}}));const Gl=on.default,Yl=[],noop=()=>{},Kl={init:function init(e){if(!e.flags.enableErrorReporting)return;if(!Kl._shouldSample())return;try{const t=Hl;t.init({...e.environmentData,dsn:"https://a6bb0da87ee048cc9ae2a345fc09ab2e:63a7029f46f74265981b7e005e0f69f8@sentry.io/174697"});const r={...e.flags.throttling,channel:e.flags.channel||"cli",url:e.url,formFactor:e.flags.formFactor,throttlingMethod:e.flags.throttlingMethod};t.setExtras(r),Kl.captureMessage=(...e)=>t.captureMessage(...e),Kl.captureBreadcrumb=(...e)=>t.addBreadcrumb(...e),Kl.getContext=()=>r;const a=new Map;Kl.captureException=async(e,r={})=>{if(!e)return;if(e.expected)return;const n=r.tags||{};if(n.audit){
|
348
|
+
const t=`audit-${n.audit}-${e.message}`;if(a.has(t))return;a.set(t,!0)}if(n.gatherer){const t=`gatherer-${n.gatherer}-${e.message}`;if(a.has(t))return;a.set(t,!0)}const i=Yl.find((t=>t.pattern.test(e.message)));i&&i.rate<=Math.random()||(e.protocolMethod&&(r.fingerprint=["{{ default }}",e.protocolMethod,e.protocolError],r.tags=r.tags||{},r.tags.protocolMethod=e.protocolMethod),t.withScope((a=>{r.level&&a.setLevel(r.level),r.tags&&a.setTags(r.tags),r.extra&&a.setExtras(r.extra),t.captureException(e)})))}}catch(e){Gl.warn("sentry","Could not load Sentry, errors will not be reported.")}},captureMessage:noop,captureBreadcrumb:noop,getContext:noop,captureException:async()=>{},_shouldSample:()=>.01>=Math.random()};var Jl=Kl;const Xl=getAugmentedNamespace(Object.freeze({__proto__:null,default:{}}));class ReportGenerator{static replaceStrings(e,t){if(0===t.length)return e;const r=t[0],a=t.slice(1);return e.split(r.search).map((e=>ReportGenerator.replaceStrings(e,a))).join(r.replacement)}
|
349
349
|
static sanitizeJson(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}static generateReportHtml(e){const t=ReportGenerator.sanitizeJson(e),r=Xl.REPORT_JAVASCRIPT.replace(/<\//g,"\\u003c/");return ReportGenerator.replaceStrings(Xl.REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_JSON%%",replacement:t},{search:"%%LIGHTHOUSE_JAVASCRIPT%%",replacement:r}])}static generateFlowReportHtml(e){const t=ReportGenerator.sanitizeJson(e);return ReportGenerator.replaceStrings(Xl.FLOW_REPORT_TEMPLATE,[{search:"%%LIGHTHOUSE_FLOW_JSON%%",replacement:t},{search:"%%LIGHTHOUSE_FLOW_JAVASCRIPT%%",replacement:Xl.FLOW_REPORT_JAVASCRIPT},{search:"/*%%LIGHTHOUSE_FLOW_CSS%%*/",replacement:Xl.FLOW_REPORT_CSS}])}static generateReportCSV(e){const escape=e=>`"${e.replace(/"/g,'""')}"`,rowFormatter=e=>e.map((e=>e.toString())).map(escape),t=Object.keys(e.categories).map((t=>{const r=[],a=e.categories[t],n=null===a.score?-1:a.score
|
350
350
|
;return r.push(rowFormatter([e.requestedUrl,e.finalUrl,a.title,`${t}-score`,`Overall ${a.title} Category Score`,"numeric",n])),r.concat(a.auditRefs.map((t=>{const r=e.audits[t.id],n=null===r.score?-1:r.score;return rowFormatter([e.requestedUrl,e.finalUrl,a.title,r.id,r.title,r.scoreDisplayMode,n])})))}));return[["requestedUrl","finalUrl","category","name","title","type","score"]].concat(...t).map((e=>e.join(","))).join("\r\n")}static generateReport(e,t){const r=Array.isArray(t);"string"==typeof t&&(t=[t]);const a=t.map((t=>{if("html"===t)return ReportGenerator.generateReportHtml(e);if("csv"===t)return ReportGenerator.generateReportCSV(e);if("json"===t)return JSON.stringify(e,null,2);throw new Error("Invalid output mode: "+t)}));return r?a:a[0]}}var Zl=ReportGenerator;const Ql=la,eu=To,tu=Sc,ru=Cc,au=kc,nu=on.default,iu=Vn,ou=Oc,su=Wl,cu=bn,lu=Jl,uu=Zl.generateReport,du=vi.exports,{version:mu}=$o;class Runner$9{static async audit(e,t){const{config:r,computedCache:a}=t,n=r.settings;try{
|
351
351
|
const t={msg:"Audit phase",id:"lh:runner:audit"};nu.time(t,"verbose");const i=[];if(n.gatherMode&&!n.auditMode)return;if(!r.audits)throw new Error("No audits to evaluate.");const o=await Runner$9._runAudits(n,r.audits,e,i,a),s={msg:"Generating results...",id:"lh:runner:generate"};nu.time(s),e.LighthouseRunWarnings&&i.push(...e.LighthouseRunWarnings);const c={"axe-core":e.Accessibility?.version};let l={};r.categories&&(l=ru.scoreAllCategories(r.categories,o)),nu.timeEnd(s),nu.timeEnd(t);const u={lighthouseVersion:mu,requestedUrl:e.URL.requestedUrl,finalUrl:e.URL.finalUrl,fetchTime:e.fetchTime,gatherMode:e.GatherContext.gatherMode,runtimeError:Runner$9.getArtifactRuntimeError(e),runWarnings:i,userAgent:e.HostUserAgent,environment:{networkUserAgent:e.NetworkUserAgent,hostUserAgent:e.HostUserAgent,benchmarkIndex:e.BenchmarkIndex,credits:c},audits:o,configSettings:n,categories:l,categoryGroups:r.groups||void 0,stackPacks:ou.getStackPacks(e.Stacks),timing:this._getTiming(e),i18n:{
|
@@ -399,8 +399,8 @@ var Fu=class ConsoleMessages extends Ou{meta={supportedModes:["timespan","naviga
|
|
399
399
|
url:e.exceptionDetails.url,lineNumber:e.exceptionDetails.lineNumber,columnNumber:e.exceptionDetails.columnNumber};this._logEntries.push(r)}onLogEntry(e){const{source:t,level:r,text:a,stackTrace:n,timestamp:i,url:o,lineNumber:s}=e.entry,{columnNumber:c}=e.entry.stackTrace?.callFrames[0]||{};this._logEntries.push({eventType:"protocolLog",source:t,level:r,text:a,stackTrace:n,timestamp:i,url:o,lineNumber:s,columnNumber:c})}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Log.entryAdded",this._onLogEntryAdded),await t.sendCommand("Log.enable"),await t.sendCommand("Log.startViolationsReport",{config:[{name:"discouragedAPIUse",threshold:-1}]}),t.on("Runtime.consoleAPICalled",this._onConsoleAPICalled),t.on("Runtime.exceptionThrown",this._onExceptionThrown),await t.sendCommand("Runtime.enable")}async stopInstrumentation({driver:e}){await e.defaultSession.sendCommand("Log.stopViolationsReport"),await e.defaultSession.off("Log.entryAdded",this._onLogEntryAdded),
|
400
400
|
await e.defaultSession.sendCommand("Log.disable"),await e.defaultSession.off("Runtime.consoleAPICalled",this._onConsoleAPICalled),await e.defaultSession.off("Runtime.exceptionThrown",this._onExceptionThrown),await e.defaultSession.sendCommand("Runtime.disable")}async getArtifact(){return this._logEntries}};const Uu=on.default,ju=eo,Bu=Jl;var $u=class CSSUsage extends ju{constructor(){super(),this._session=void 0,this._sheetPromises=new Map,this._ruleUsage=void 0,this._onStylesheetAdded=this._onStylesheetAdded.bind(this)}meta={supportedModes:["snapshot","timespan","navigation"]};async _onStylesheetAdded(e){if(!this._session)throw new Error("Session not initialized");const t=e.header.styleSheetId,r=this._session.sendCommand("CSS.getStyleSheetText",{styleSheetId:t}).then((t=>({header:e.header,content:t.text}))).catch((t=>(Uu.warn("CSSUsage",`Error fetching content of stylesheet with URL "${e.header.sourceURL}"`),Bu.captureException(t,{tags:{gatherer:this.name},extra:{
|
401
401
|
url:e.header.sourceURL},level:"error"}),t)));this._sheetPromises.set(t,r)}async startCSSUsageTracking(e){const t=e.driver.defaultSession;this._session=t,t.on("CSS.styleSheetAdded",this._onStylesheetAdded),await t.sendCommand("DOM.enable"),await t.sendCommand("CSS.enable"),await t.sendCommand("CSS.startRuleUsageTracking")}async stopCSSUsageTracking(e){const t=e.driver.defaultSession,r=await t.sendCommand("CSS.stopRuleUsageTracking");this._ruleUsage=r.ruleUsage,t.off("CSS.styleSheetAdded",this._onStylesheetAdded)}async startInstrumentation(e){"timespan"===e.gatherMode&&await this.startCSSUsageTracking(e)}async stopInstrumentation(e){"timespan"===e.gatherMode&&await this.stopCSSUsageTracking(e)}async getArtifact(e){const t=e.driver.defaultSession,r=e.driver.executionContext;"timespan"!==e.gatherMode&&(await this.startCSSUsageTracking(e),await r.evaluateAsync("getComputedStyle(document.body)"),await this.stopCSSUsageTracking(e))
|
402
|
-
;const a=new Map,n=await Promise.all(this._sheetPromises.values());for(const e of n)e instanceof Error||a.set(e.content,e);if(await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),!this._ruleUsage)throw new Error("Issue collecting rule usages");return{rules:this._ruleUsage,stylesheets:Array.from(a.values())}}};const qu=Ws,zu=eo;var Vu=class DevtoolsLogCompat extends zu{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:qu.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.DevtoolsLog}}};const Wu=eo;function getDoctype(){if(!document.doctype)return null;const{name:e,publicId:t,systemId:r}=document.doctype;return{name:e,publicId:t,systemId:r}}var
|
403
|
-
;const _calcDOMWidthAndHeight=function(e,s=1){s>a&&(r=e,a=s),e.children.length>n&&(o=e,n=e.children.length);let c=e.firstElementChild;for(;c;)_calcDOMWidthAndHeight(c,s+1),t&&c.shadowRoot&&_calcDOMWidthAndHeight(c.shadowRoot,s+1),c=c.nextElementSibling,i++;return{maxDepth:a,maxWidth:n,numElements:i}},s=_calcDOMWidthAndHeight(e);return{depth:{max:s.maxDepth,...getNodeDetails(r)},width:{max:s.maxWidth,...getNodeDetails(o)},totalBodyElements:s.numElements}}var Ku=class DOMStats extends
|
402
|
+
;const a=new Map,n=await Promise.all(this._sheetPromises.values());for(const e of n)e instanceof Error||a.set(e.content,e);if(await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),!this._ruleUsage)throw new Error("Issue collecting rule usages");return{rules:this._ruleUsage,stylesheets:Array.from(a.values())}}};const qu=Ws,zu=eo;var Vu=class DevtoolsLogCompat extends zu{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:qu.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.DevtoolsLog}}};const Wu=eo;function getDoctype(){if(!document.doctype)return null;const{name:e,publicId:t,systemId:r}=document.doctype;return{name:e,publicId:t,systemId:r}}var Hu=class Doctype$1 extends Wu{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(getDoctype,{args:[],useIsolation:!0})}};const Gu=eo,Yu=hn;function getDOMStats(e=document.body,t=!0){let r=null,a=-1,n=-1,i=0,o=null
|
403
|
+
;const _calcDOMWidthAndHeight=function(e,s=1){s>a&&(r=e,a=s),e.children.length>n&&(o=e,n=e.children.length);let c=e.firstElementChild;for(;c;)_calcDOMWidthAndHeight(c,s+1),t&&c.shadowRoot&&_calcDOMWidthAndHeight(c.shadowRoot,s+1),c=c.nextElementSibling,i++;return{maxDepth:a,maxWidth:n,numElements:i}},s=_calcDOMWidthAndHeight(e);return{depth:{max:s.maxDepth,...getNodeDetails(r)},width:{max:s.maxWidth,...getNodeDetails(o)},totalBodyElements:s.numElements}}var Ku=class DOMStats extends Gu{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){const t=e.driver;await t.defaultSession.sendCommand("DOM.enable");const r=await t.executionContext.evaluate(getDOMStats,{args:[],useIsolation:!0,deps:[Yu.getNodeDetailsString]});return await t.defaultSession.sendCommand("DOM.disable"),r}};const Ju=on.default,Xu=eo,Zu=ji,Qu=Ki,ed=Jl,td=Lo,rd=Ws,ad=/^image\/((x|ms|x-ms)-)?(png|bmp|jpeg)$/;class OptimizedImages extends Xu{meta={supportedModes:["timespan","navigation"],dependencies:{
|
404
404
|
DevtoolsLog:rd.symbol}};constructor(){super(),this._encodingStartAt=0}static filterImageRequests(e){const t=new Set;return e.reduce(((e,r)=>{if(t.has(r.url)||!r.finished||r.sessionId)return e;t.add(r.url);const a=r.resourceType===Qu.TYPES.Image&&ad.test(r.mimeType),n=Qu.getResourceSizeOnNetwork(r);return a&&n>4096&&e.push({requestId:r.requestId,url:r.url,mimeType:r.mimeType,resourceSize:n}),e}),[])}_getEncodedResponse(e,t,r){const a={requestId:t=Qu.getRequestIdForBackend(t),encoding:r,quality:"jpeg"===r?.92:.85,sizeOnly:!0};return e.sendCommand("Audits.getEncodedResponse",a)}async calculateImageStats(e,t){const r=t.resourceSize;if(Date.now()-this._encodingStartAt>5e3||r>2048e3)return{originalSize:r,jpegSize:void 0,webpSize:void 0};const a=await this._getEncodedResponse(e,t.requestId,"jpeg"),n=await this._getEncodedResponse(e,t.requestId,"webp");return{originalSize:r,jpegSize:a.encodedSize,webpSize:n.encodedSize}}async computeOptimizedImages(e,t){this._encodingStartAt=Date.now()
|
405
405
|
;const r=[];for(const a of t)try{const t={failed:!1,...await this.calculateImageStats(e,a),...a};r.push(t)}catch(e){Ju.warn("optimized-images",e.message),ed.captureException(e,{tags:{gatherer:"OptimizedImages"},extra:{imageUrl:Zu.elideDataURI(a.url)},level:"warning"});const t={failed:!0,errMsg:e.message,...a};r.push(t)}return r}async _getArtifact(e,t){const r=OptimizedImages.filterImageRequests(t).sort(((e,t)=>t.resourceSize-e.resourceSize)),a=await this.computeOptimizedImages(e.driver.defaultSession,r),n=a.filter((e=>!e.failed));if(a.length&&!n.length)throw new Error("All image optimizations failed");return a}async getArtifact(e){const t=e.dependencies.DevtoolsLog,r=await td.request(t,e);return this._getArtifact(e,r)}async afterPass(e,t){return this._getArtifact({...e,dependencies:{}},t.networkRecords)}}var nd=OptimizedImages;const id=eo,od=hn;function findPasswordInputsWithPreventedPaste(){
|
406
406
|
return Array.from(document.querySelectorAll('input[type="password"]')).filter((e=>!e.dispatchEvent(new ClipboardEvent("paste",{cancelable:!0})))).map((e=>({node:getNodeDetails(e)})))}var sd=class PasswordInputsWithPreventedPaste extends id{meta={supportedModes:["snapshot","navigation"]};getArtifact(e){return e.driver.executionContext.evaluate(findPasswordInputsWithPreventedPaste,{args:[],deps:[od.getNodeDetailsString]})}},cd=getAugmentedNamespace(u),ld={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function ZStream(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}function arraySet(e,t,r,a,n){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+a),n);else for(var i=0;i<a;i++)e[n+i]=t[r+i]}
|
@@ -428,17 +428,17 @@ put_byte(a,e.total_in>>16&255),put_byte(a,e.total_in>>24&255)):(putShortMSB(a,e.
|
|
428
428
|
})),new Config$2(4,4,8,4,deflate_fast),new Config$2(4,5,16,8,deflate_fast),new Config$2(4,6,32,32,deflate_fast),new Config$2(4,4,16,16,deflate_slow),new Config$2(8,16,32,32,deflate_slow),new Config$2(8,16,128,128,deflate_slow),new Config$2(8,32,128,256,deflate_slow),new Config$2(32,128,258,1024,deflate_slow),new Config$2(32,258,258,4096,deflate_slow)];function inflate_fast(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x,_,A,R;r=e.state,a=e.next_in,A=e.input,n=a+(e.avail_in-5),i=e.next_out,R=e.output,o=i-(t-e.avail_out),s=i+(e.avail_out-257),c=r.dmax,l=r.wsize,u=r.whave,d=r.wnext,m=r.window,p=r.hold,h=r.bits,f=r.lencode,y=r.distcode,v=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{h<15&&(p+=A[a++]<<h,h+=8,p+=A[a++]<<h,h+=8),w=f[p&v];t:for(;;){if(p>>>=S=w>>>24,h-=S,0===(S=w>>>16&255))R[i++]=65535&w;else{if(!(16&S)){if(0==(64&S)){w=f[(65535&w)+(p&(1<<S)-1)];continue t}if(32&S){r.mode=12;break e}e.msg="invalid literal/length code",r.mode=30;break e}T=65535&w,(S&=15)&&(h<S&&(p+=A[a++]<<h,
|
429
429
|
h+=8),T+=p&(1<<S)-1,p>>>=S,h-=S),h<15&&(p+=A[a++]<<h,h+=8,p+=A[a++]<<h,h+=8),w=y[p&b];r:for(;;){if(p>>>=S=w>>>24,h-=S,!(16&(S=w>>>16&255))){if(0==(64&S)){w=y[(65535&w)+(p&(1<<S)-1)];continue r}e.msg="invalid distance code",r.mode=30;break e}if(E=65535&w,h<(S&=15)&&(p+=A[a++]<<h,(h+=8)<S&&(p+=A[a++]<<h,h+=8)),(E+=p&(1<<S)-1)>c){e.msg="invalid distance too far back",r.mode=30;break e}if(p>>>=S,h-=S,E>(S=i-o)){if((S=E-S)>u&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(x=0,_=m,0===d){if(x+=l-S,S<T){T-=S;do{R[i++]=m[x++]}while(--S);x=i-E,_=R}}else if(d<S){if(x+=l+d-S,(S-=d)<T){T-=S;do{R[i++]=m[x++]}while(--S);if(x=0,d<T){T-=S=d;do{R[i++]=m[x++]}while(--S);x=i-E,_=R}}}else if(x+=d-S,S<T){T-=S;do{R[i++]=m[x++]}while(--S);x=i-E,_=R}for(;T>2;)R[i++]=_[x++],R[i++]=_[x++],R[i++]=_[x++],T-=3;T&&(R[i++]=_[x++],T>1&&(R[i++]=_[x++]))}else{x=i-E;do{R[i++]=R[x++],R[i++]=R[x++],R[i++]=R[x++],T-=3}while(T>2);T&&(R[i++]=R[x++],T>1&&(R[i++]=R[x++]))}break}}break}}while(a<n&&i<s)
|
430
430
|
;a-=T=h>>3,p&=(1<<(h-=T<<3))-1,e.next_in=a,e.next_out=i,e.avail_in=a<n?n-a+5:5-(a-n),e.avail_out=i<s?s-i+257:257-(i-s),r.hold=p,r.bits=h}var jd=15,Bd=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],$d=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],qd=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],zd=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function inflate_table(e,t,r,a,n,i,o,s){var c,l,u,d,m,p,h,f,y,v=s.bits,b=0,w=0,S=0,T=0,E=0,x=0,_=0,A=0,R=0,k=0,D=null,C=0,I=new dd(16),N=new dd(16),L=null,M=0;for(b=0;b<=jd;b++)I[b]=0;for(w=0;w<a;w++)I[t[r+w]]++;for(E=v,T=jd;T>=1&&0===I[T];T--);if(E>T&&(E=T),0===T)return n[i++]=20971520,n[i++]=20971520,s.bits=1,0;for(S=1;S<T&&0===I[S];S++);for(E<S&&(E=S),A=1,b=1;b<=jd;b++)if(A<<=1,(A-=I[b])<0)return-1;if(A>0&&(0===e||1!==T))return-1
|
431
|
-
;for(N[1]=0,b=1;b<jd;b++)N[b+1]=N[b]+I[b];for(w=0;w<a;w++)0!==t[r+w]&&(o[N[t[r+w]]++]=w);if(0===e?(D=L=o,p=19):1===e?(D=Bd,C-=257,L=$d,M-=257,p=256):(D=qd,L=zd,p=-1),k=0,w=0,b=S,m=i,x=E,_=0,u=-1,d=(R=1<<E)-1,1===e&&R>852||2===e&&R>592)return 1;for(;;){h=b-_,o[w]<p?(f=0,y=o[w]):o[w]>p?(f=L[M+o[w]],y=D[C+o[w]]):(f=96,y=0),c=1<<b-_,S=l=1<<x;do{n[m+(k>>_)+(l-=c)]=h<<24|f<<16|y|0}while(0!==l);for(c=1<<b-1;k&c;)c>>=1;if(0!==c?(k&=c-1,k+=c):k=0,w++,0==--I[b]){if(b===T)break;b=t[r+o[w]]}if(b>E&&(k&d)!==u){for(0===_&&(_=E),m+=S,A=1<<(x=b-_);x+_<T&&!((A-=I[x+_])<=0);)x++,A<<=1;if(R+=1<<x,1===e&&R>852||2===e&&R>592)return 1;n[u=k&d]=E<<24|x<<16|m-i|0}}return 0!==k&&(n[m+k]=b-_<<24|64<<16|0),s.bits=E,0}var Vd=-2,Wd=12,
|
431
|
+
;for(N[1]=0,b=1;b<jd;b++)N[b+1]=N[b]+I[b];for(w=0;w<a;w++)0!==t[r+w]&&(o[N[t[r+w]]++]=w);if(0===e?(D=L=o,p=19):1===e?(D=Bd,C-=257,L=$d,M-=257,p=256):(D=qd,L=zd,p=-1),k=0,w=0,b=S,m=i,x=E,_=0,u=-1,d=(R=1<<E)-1,1===e&&R>852||2===e&&R>592)return 1;for(;;){h=b-_,o[w]<p?(f=0,y=o[w]):o[w]>p?(f=L[M+o[w]],y=D[C+o[w]]):(f=96,y=0),c=1<<b-_,S=l=1<<x;do{n[m+(k>>_)+(l-=c)]=h<<24|f<<16|y|0}while(0!==l);for(c=1<<b-1;k&c;)c>>=1;if(0!==c?(k&=c-1,k+=c):k=0,w++,0==--I[b]){if(b===T)break;b=t[r+o[w]]}if(b>E&&(k&d)!==u){for(0===_&&(_=E),m+=S,A=1<<(x=b-_);x+_<T&&!((A-=I[x+_])<=0);)x++,A<<=1;if(R+=1<<x,1===e&&R>852||2===e&&R>592)return 1;n[u=k&d]=E<<24|x<<16|m-i|0}}return 0!==k&&(n[m+k]=b-_<<24|64<<16|0),s.bits=E,0}var Vd=-2,Wd=12,Hd=30;function zswap32(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function InflateState(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,
|
432
432
|
this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new dd(320),this.work=new dd(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function inflateReset(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,function inflateResetKeep(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new md(852),t.distcode=t.distdyn=new md(592),t.sane=1,t.back=-1,0):Vd}(e)):Vd}function inflateInit2(e,t){var r,a;return e?(a=new InflateState,e.state=a,a.window=null,0!==(r=function inflateReset2(e,t){var r,a;return e&&e.state?(a=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Vd:(null!==a.window&&a.wbits!==t&&(a.window=null),a.wrap=r,
|
433
|
-
a.wbits=t,inflateReset(e))):Vd}(e,t))&&(e.state=null),r):Vd}var
|
434
|
-
;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=
|
433
|
+
a.wbits=t,inflateReset(e))):Vd}(e,t))&&(e.state=null),r):Vd}var Gd,Yd,Kd=!0;function fixedtables(e){if(Kd){var t;for(Gd=new md(512),Yd=new md(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(inflate_table(1,e.lens,0,288,Gd,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;inflate_table(2,e.lens,0,32,Yd,0,e.work,{bits:5}),Kd=!1}e.lencode=Gd,e.lenbits=9,e.distcode=Yd,e.distbits=5}function inflate$1(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x,_,A,R=0,k=new ud(4),D=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Vd;(r=e.state).mode===Wd&&(r.mode=13),o=e.next_out,n=e.output,c=e.avail_out,i=e.next_in,a=e.input,s=e.avail_in,l=r.hold,u=r.bits,d=s,m=c,x=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(2&r.wrap&&35615===l){r.check=0,k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0),l=0,u=0,r.mode=2
|
434
|
+
;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=Hd;break}if(8!=(15&l)){e.msg="unknown compression method",r.mode=Hd;break}if(u-=4,E=8+(15&(l>>>=4)),0===r.wbits)r.wbits=E;else if(E>r.wbits){e.msg="invalid window size",r.mode=Hd;break}r.dmax=1<<E,e.adler=r.check=1,r.mode=512&l?10:Wd,l=0,u=0;break;case 2:for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(r.flags=l,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=Hd;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=Hd;break}r.head&&(r.head.text=l>>8&1),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0,r.mode=3;case 3:for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.head&&(r.head.time=l),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,k[2]=l>>>16&255,k[3]=l>>>24&255,r.check=crc32(r.check,k,4,0)),l=0,u=0,r.mode=4;case 4:for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.head&&(r.head.xflags=255&l,r.head.os=l>>8),
|
435
435
|
512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0,r.mode=5;case 5:if(1024&r.flags){for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.length=l,r.head&&(r.head.extra_len=l),512&r.flags&&(k[0]=255&l,k[1]=l>>>8&255,r.check=crc32(r.check,k,2,0)),l=0,u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&((p=r.length)>s&&(p=s),p&&(r.head&&(E=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),arraySet(r.head.extra,a,i,p,E)),512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,r.length-=p),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===s)break e;p=0;do{E=a[i+p++],r.head&&E&&r.length<65536&&(r.head.name+=String.fromCharCode(E))}while(E&&p<s);if(512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,E)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===s)break e;p=0;do{E=a[i+p++],r.head&&E&&r.length<65536&&(r.head.comment+=String.fromCharCode(E))
|
436
|
-
}while(E&&p<s);if(512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,E)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(65535&r.check)){e.msg="header crc mismatch",r.mode=
|
437
|
-
l+=a[i++]<<u,u+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=
|
438
|
-
b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(b<16)l>>>=y,u-=y,r.lens[r.have++]=b;else{if(16===b){for(A=y+2;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l>>>=y,u-=y,0===r.have){e.msg="invalid bit length repeat",r.mode=
|
439
|
-
r.distbits=_.bits,x){e.msg="invalid distances set",r.mode=
|
440
|
-
;case 23:for(;v=(R=r.distcode[l&(1<<r.distbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(0==(240&v)){for(w=y,S=v,T=b;v=(R=r.distcode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,64&v){e.msg="invalid distance code",r.mode=
|
441
|
-
if(0===c)break e;n[o++]=r.length,c--,r.mode=21;break;case 27:if(r.wrap){for(;u<32;){if(0===s)break e;s--,l|=a[i++]<<u,u+=8}if(m-=c,e.total_out+=m,r.total+=m,m&&(e.adler=r.check=r.flags?crc32(r.check,n,m,o-m):adler32(r.check,n,m,o-m)),m=c,(r.flags?l:zswap32(l))!==r.check){e.msg="incorrect data check",r.mode=
|
436
|
+
}while(E&&p<s);if(512&r.flags&&(r.check=crc32(r.check,a,p,i)),s-=p,i+=p,E)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;u<16;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(65535&r.check)){e.msg="header crc mismatch",r.mode=Hd;break}l=0,u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Wd;break;case 10:for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}e.adler=r.check=zswap32(l),l=0,u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,2;e.adler=r.check=1,r.mode=Wd;case Wd:if(5===t||6===t)break e;case 13:if(r.last){l>>>=7&u,u-=7&u,r.mode=27;break}for(;u<3;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}switch(r.last=1&l,u-=1,3&(l>>>=1)){case 0:r.mode=14;break;case 1:if(fixedtables(r),r.mode=20,6===t){l>>>=2,u-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=Hd}l>>>=2,u-=2;break;case 14:for(l>>>=7&u,u-=7&u;u<32;){if(0===s)break e;s--,
|
437
|
+
l+=a[i++]<<u,u+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=Hd;break}if(r.length=65535&l,l=0,u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(p=r.length){if(p>s&&(p=s),p>c&&(p=c),0===p)break e;arraySet(n,a,i,p,o),s-=p,i+=p,c-=p,o+=p,r.length-=p;break}r.mode=Wd;break;case 17:for(;u<14;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(r.nlen=257+(31&l),l>>>=5,u-=5,r.ndist=1+(31&l),l>>>=5,u-=5,r.ncode=4+(15&l),l>>>=4,u-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=Hd;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;u<3;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.lens[D[r.have++]]=7&l,l>>>=3,u-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,_={bits:r.lenbits},x=inflate_table(0,r.lens,0,19,r.lencode,0,r.work,_),r.lenbits=_.bits,x){e.msg="invalid code lengths set",r.mode=Hd;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;v=(R=r.lencode[l&(1<<r.lenbits)-1])>>>16&255,
|
438
|
+
b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(b<16)l>>>=y,u-=y,r.lens[r.have++]=b;else{if(16===b){for(A=y+2;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l>>>=y,u-=y,0===r.have){e.msg="invalid bit length repeat",r.mode=Hd;break}E=r.lens[r.have-1],p=3+(3&l),l>>>=2,u-=2}else if(17===b){for(A=y+3;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}u-=y,E=0,p=3+(7&(l>>>=y)),l>>>=3,u-=3}else{for(A=y+7;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}u-=y,E=0,p=11+(127&(l>>>=y)),l>>>=7,u-=7}if(r.have+p>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=Hd;break}for(;p--;)r.lens[r.have++]=E}}if(r.mode===Hd)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=Hd;break}if(r.lenbits=9,_={bits:r.lenbits},x=inflate_table(1,r.lens,0,r.nlen,r.lencode,0,r.work,_),r.lenbits=_.bits,x){e.msg="invalid literal/lengths set",r.mode=Hd;break}if(r.distbits=6,r.distcode=r.distdyn,_={bits:r.distbits},x=inflate_table(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,_),
|
439
|
+
r.distbits=_.bits,x){e.msg="invalid distances set",r.mode=Hd;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(s>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,inflate_fast(e,m),o=e.next_out,n=e.output,c=e.avail_out,i=e.next_in,a=e.input,s=e.avail_in,l=r.hold,u=r.bits,r.mode===Wd&&(r.back=-1);break}for(r.back=0;v=(R=r.lencode[l&(1<<r.lenbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(v&&0==(240&v)){for(w=y,S=v,T=b;v=(R=r.lencode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,r.length=b,0===v){r.mode=26;break}if(32&v){r.back=-1,r.mode=Wd;break}if(64&v){e.msg="invalid literal/length code",r.mode=Hd;break}r.extra=15&v,r.mode=22;case 22:if(r.extra){for(A=r.extra;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23
|
440
|
+
;case 23:for(;v=(R=r.distcode[l&(1<<r.distbits)-1])>>>16&255,b=65535&R,!((y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(0==(240&v)){for(w=y,S=v,T=b;v=(R=r.distcode[T+((l&(1<<w+S)-1)>>w)])>>>16&255,b=65535&R,!(w+(y=R>>>24)<=u);){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}l>>>=w,u-=w,r.back+=w}if(l>>>=y,u-=y,r.back+=y,64&v){e.msg="invalid distance code",r.mode=Hd;break}r.offset=b,r.extra=15&v,r.mode=24;case 24:if(r.extra){for(A=r.extra;u<A;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=Hd;break}r.mode=25;case 25:if(0===c)break e;if(p=m-c,r.offset>p){if((p=r.offset-p)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=Hd;break}p>r.wnext?(p-=r.wnext,h=r.wsize-p):h=r.wnext-p,p>r.length&&(p=r.length),f=r.window}else f=n,h=o-r.offset,p=r.length;p>c&&(p=c),c-=p,r.length-=p;do{n[o++]=f[h++]}while(--p);0===r.length&&(r.mode=21);break;case 26:
|
441
|
+
if(0===c)break e;n[o++]=r.length,c--,r.mode=21;break;case 27:if(r.wrap){for(;u<32;){if(0===s)break e;s--,l|=a[i++]<<u,u+=8}if(m-=c,e.total_out+=m,r.total+=m,m&&(e.adler=r.check=r.flags?crc32(r.check,n,m,o-m):adler32(r.check,n,m,o-m)),m=c,(r.flags?l:zswap32(l))!==r.check){e.msg="incorrect data check",r.mode=Hd;break}l=0,u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;u<32;){if(0===s)break e;s--,l+=a[i++]<<u,u+=8}if(l!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=Hd;break}l=0,u=0}r.mode=29;case 29:x=1;break e;case Hd:x=-3;break e;case 31:return-4;case 32:default:return Vd}return e.next_out=o,e.avail_out=c,e.next_in=i,e.avail_in=s,r.hold=l,r.bits=u,(r.wsize||m!==e.avail_out&&r.mode<Hd&&(r.mode<27||4!==t))&&function updatewindow(e,t,r,a){var n,i=e.state;return null===i.window&&(i.wsize=1<<i.wbits,i.wnext=0,i.whave=0,i.window=new ud(i.wsize)),a>=i.wsize?(arraySet(i.window,t,r-i.wsize,i.wsize,0),i.wnext=0,i.whave=i.wsize):((n=i.wsize-i.wnext)>a&&(n=a),
|
442
442
|
arraySet(i.window,t,r-a,n,i.wnext),(a-=n)?(arraySet(i.window,t,r-a,a,0),i.wnext=a,i.whave=i.wsize):(i.wnext+=n,i.wnext===i.wsize&&(i.wnext=0),i.whave<i.wsize&&(i.whave+=n))),0}(e,e.output,e.next_out,m-e.avail_out),d-=e.avail_in,m-=e.avail_out,e.total_in+=d,e.total_out+=m,r.total+=m,r.wrap&&m&&(e.adler=r.check=r.flags?crc32(r.check,n,m,e.next_out-m):adler32(r.check,n,m,e.next_out-m)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Wd?128:0)+(20===r.mode||15===r.mode?256:0),(0===d&&0===m||4===t)&&0===x&&(x=-5),x}var Jd;function Zlib$1(e){if(e<1||e>7)throw new TypeError("Bad argument");this.mode=e,this.init_done=!1,this.write_in_progress=!1,this.pending_close=!1,this.windowBits=0,this.level=0,this.memLevel=0,this.strategy=0,this.dictionary=null}function bufferSet(e,t){for(var r=0;r<e.length;r++)this[t+r]=e[r]}Zlib$1.prototype.init=function(e,t,r,a,n){var i;switch(this.windowBits=e,this.level=t,this.memLevel=r,this.strategy=a,3!==this.mode&&4!==this.mode||(this.windowBits+=16),
|
443
443
|
7===this.mode&&(this.windowBits+=32),5!==this.mode&&6!==this.mode||(this.windowBits=-this.windowBits),this.strm=new ZStream,this.mode){case 1:case 3:case 5:i=function deflateInit2(e,t,r,a,n,i){if(!e)return Ld;var o=1;if(-1===t&&(t=6),a<0?(o=0,a=-a):a>15&&(o=2,a-=16),n<1||n>9||8!==r||a<8||a>15||t<0||t>9||i<0||i>4)return err(e,Ld);8===a&&(a=9);var s=new DeflateState;return e.state=s,s.strm=e,s.wrap=o,s.gzhead=null,s.w_bits=a,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=n+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+3-1)/3),s.window=new ud(2*s.w_size),s.head=new dd(s.hash_size),s.prev=new dd(s.w_size),s.lit_bufsize=1<<n+6,s.pending_buf_size=4*s.lit_bufsize,s.pending_buf=new ud(s.pending_buf_size),s.d_buf=1*s.lit_bufsize,s.l_buf=3*s.lit_bufsize,s.level=t,s.strategy=i,s.method=r,deflateReset(e)}(this.strm,this.level,8,this.windowBits,this.memLevel,this.strategy);break;case 2:case 4:case 6:case 7:i=inflateInit2(this.strm,this.windowBits);break
|
444
444
|
;default:throw new Error("Unknown mode "+this.mode)}0===i?(this.write_in_progress=!1,this.init_done=!0):this._error(i)},Zlib$1.prototype.params=function(){throw new Error("deflateParams Not supported")},Zlib$1.prototype._writeCheck=function(){if(!this.init_done)throw new Error("write before init");if(0===this.mode)throw new Error("already finalized");if(this.write_in_progress)throw new Error("write already in progress");if(this.pending_close)throw new Error("close is pending")},Zlib$1.prototype.write=function(e,t,r,a,n,i,o){this._writeCheck(),this.write_in_progress=!0;var s=this;return La.nextTick((function(){s.write_in_progress=!1;var c=s._write(e,t,r,a,n,i,o);s.callback(c[0],c[1]),s.pending_close&&s.close()})),this},Zlib$1.prototype.writeSync=function(e,t,r,a,n,i,o){return this._writeCheck(),this._write(e,t,r,a,n,i,o)},Zlib$1.prototype._write=function(e,t,r,a,n,i,o){if(this.write_in_progress=!0,0!==e&&1!==e&&2!==e&&3!==e&&4!==e&&5!==e)throw new Error("Invalid flush value")
|
@@ -477,10 +477,10 @@ imageRendering:e.getPropertyValue("image-rendering")},isCss:!0,isPicture:!1,isIn
|
|
477
477
|
;r.cssEffectiveRules={width:i,height:o,aspectRatio:s}}catch(e){if(/No node.*found/.test(e.message))return;throw e}}async collectExtraDetails(e,t){let r=!1;setTimeout((e=>r=!0),5e3);let a=0;for(const n of t)r?a++:(n.isInShadowDOM||n.isCss||await this.fetchSourceRules(e.defaultSession,n.node.devtoolsNodePath,n),(n.isPicture||n.isCss||n.srcset)&&await this.fetchElementWithSizeInformation(e,n));r&&Lm.warn("ImageElements",`Reached gathering budget of 5s. Skipped extra details for ${a}/${t.length}`)}async getArtifact(e){const t=e.driver.defaultSession,r=e.driver.executionContext,a=await r.evaluate(collectImageElementInfo,{args:[],deps:[Pm.getElementsInDocumentString,Pm.getBoundingClientRectString,Pm.getNodeDetailsString,getClientRect,getPosition,getHTMLImages,getCSSImages]});return await Promise.all([t.sendCommand("DOM.enable"),t.sendCommand("CSS.enable"),t.sendCommand("DOM.getDocument",{depth:-1,pierce:!0})]),a.sort(((e,t)=>getPixelArea(t)-getPixelArea(e))),
|
478
478
|
await this.collectExtraDetails(e.driver,a),await Promise.all([t.sendCommand("DOM.disable"),t.sendCommand("CSS.disable")]),a}};const Um=eo,jm=hn;function collectElements(){const e=[],t=new Map,r=new Map,a=getElementsInDocument("form");for(const e of a)t.set(e,{id:e.id,name:e.name,autocomplete:e.autocomplete,node:getNodeDetails(e)});const n=getElementsInDocument("label");for(const e of n)r.set(e,{for:e.htmlFor,node:getNodeDetails(e)});const i=getElementsInDocument("textarea, input, select");for(const a of i){const n=a.form,i=n?[...t.keys()].indexOf(n):void 0,o=[...a.labels||[]].map((e=>[...r.keys()].indexOf(e)));e.push({parentFormIndex:i,labelIndices:o,id:a.id,name:a.name,type:a.type,placeholder:a instanceof HTMLSelectElement?void 0:a.placeholder,autocomplete:{property:a.autocomplete,attribute:a.getAttribute("autocomplete"),prediction:a.getAttribute("autofill-prediction")},node:getNodeDetails(a)})}return{inputs:e,forms:[...t.values()],labels:[...r.values()]}}
|
479
479
|
var Bm=class Inputs extends Um{meta={supportedModes:["snapshot","navigation"]};async getArtifact(e){return e.driver.executionContext.evaluate(collectElements,{args:[],useIsolation:!0,deps:[jm.getElementsInDocumentString,jm.getNodeDetailsString]})}};const $m=eo,qm=Lo,zm=Ws;var Vm=class InspectorIssues extends $m{meta={supportedModes:["timespan","navigation"],dependencies:{DevtoolsLog:zm.symbol}};constructor(){super(),this._issues=[],this._onIssueAdded=this.onIssueAdded.bind(this)}onIssueAdded(e){this._issues.push(e.issue)}async startInstrumentation(e){const t=e.driver.defaultSession;t.on("Audits.issueAdded",this._onIssueAdded),await t.sendCommand("Audits.enable")}async stopInstrumentation(e){const t=e.driver.defaultSession;t.off("Audits.issueAdded",this._onIssueAdded),await t.sendCommand("Audits.disable")}async _getArtifact(e){const t={attributionReportingIssue:[],blockedByResponseIssue:[],clientHintIssue:[],contentSecurityPolicyIssue:[],corsIssue:[],deprecationIssue:[],
|
480
|
-
federatedAuthRequestIssue:[],genericIssue:[],heavyAdIssue:[],lowTextContrastIssue:[],mixedContentIssue:[],navigatorUserAgentIssue:[],quirksModeIssue:[],cookieIssue:[],sharedArrayBufferIssue:[],twaQualityEnforcement:[]},r=Object.keys(t);for(const a of r){const r=`${a}Details`,n=this._issues.map((e=>e.details[r]));for(const r of n){if(!r)continue;const n="request"in r&&r.request&&r.request.requestId;n?e.find((e=>e.requestId===n))&&t[a].push(r):t[a].push(r)}}return t}async getArtifact(e){const t=e.dependencies.DevtoolsLog,r=await qm.request(t,e);return this._getArtifact(r)}async afterPass(e,t){return await this.stopInstrumentation({...e,dependencies:{}}),this._getArtifact(t.networkRecords)}};const Wm=eo;var
|
480
|
+
federatedAuthRequestIssue:[],genericIssue:[],heavyAdIssue:[],lowTextContrastIssue:[],mixedContentIssue:[],navigatorUserAgentIssue:[],quirksModeIssue:[],cookieIssue:[],sharedArrayBufferIssue:[],twaQualityEnforcement:[]},r=Object.keys(t);for(const a of r){const r=`${a}Details`,n=this._issues.map((e=>e.details[r]));for(const r of n){if(!r)continue;const n="request"in r&&r.request&&r.request.requestId;n?e.find((e=>e.requestId===n))&&t[a].push(r):t[a].push(r)}}return t}async getArtifact(e){const t=e.dependencies.DevtoolsLog,r=await qm.request(t,e);return this._getArtifact(r)}async afterPass(e,t){return await this.stopInstrumentation({...e,dependencies:{}}),this._getArtifact(t.networkRecords)}};const Wm=eo;var Hm=class JsUsage extends Wm{meta={supportedModes:["snapshot","timespan","navigation"]};constructor(){super(),this._scriptParsedEvents=[],this._scriptUsages=[],this.onScriptParsed=this.onScriptParsed.bind(this)}onScriptParsed(e){e.embedderName&&this._scriptParsedEvents.push(e)}
|
481
481
|
async startInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Profiler.enable"),await t.sendCommand("Profiler.startPreciseCoverage",{detailed:!1})}async stopInstrumentation(e){const t=e.driver.defaultSession,r=await t.sendCommand("Profiler.takePreciseCoverage");this._scriptUsages=r.result,await t.sendCommand("Profiler.stopPreciseCoverage"),await t.sendCommand("Profiler.disable")}async startSensitiveInstrumentation(e){const t=e.driver.defaultSession;t.on("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable")}async stopSensitiveInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Debugger.disable"),t.off("Debugger.scriptParsed",this.onScriptParsed)}_addMissingScriptIds(e){for(const t of this._scriptParsedEvents){const r=t.embedderName;if(!r)continue;const a=e[r]||[];a.find((e=>e.scriptId===t.scriptId))||a.push({url:r,scriptId:t.scriptId,functions:[]}),e[r]=a}}async getArtifact(e){const t={}
|
482
|
-
;"snapshot"===e.gatherMode&&(await this.startSensitiveInstrumentation(e),await this.stopSensitiveInstrumentation(e));for(const e of this._scriptUsages){let r=e.url;const a=this._scriptParsedEvents.find((t=>t.scriptId===e.scriptId));if(a?.embedderName&&(r=a.embedderName),""===e.url||a&&""===a.embedderName)continue;const n=t[r]||[];n.push(e),t[r]=n}return"navigation"!==e.gatherMode&&this._addMissingScriptIds(t),t}};function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var
|
483
|
-
return n+encodeURIComponent(stringifyPrimitive(e))})).join(t):n+encodeURIComponent(stringifyPrimitive(e[a]))})).join(t):a?encodeURIComponent(stringifyPrimitive(a))+r+encodeURIComponent(stringifyPrimitive(e)):""}function map(e,t){if(e.map)return e.map(t);for(var r=[],a=0;a<e.length;a++)r.push(t(e[a],a));return r}var Ym=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t};function parse$1(e,t,r,a){t=t||"&",r=r||"=";var n={};if("string"!=typeof e||0===e.length)return n;var i=/\+/g;e=e.split(t);var o=1e3;a&&"number"==typeof a.maxKeys&&(o=a.maxKeys);var s=e.length;o>0&&s>o&&(s=o);for(var c=0;c<s;++c){var l,u,d,m,p=e[c].replace(i,"%20"),h=p.indexOf(r);h>=0?(l=p.substr(0,h),u=p.substr(h+1)):(l=p,u=""),d=decodeURIComponent(l),m=decodeURIComponent(u),hasOwnProperty(n,d)?
|
482
|
+
;"snapshot"===e.gatherMode&&(await this.startSensitiveInstrumentation(e),await this.stopSensitiveInstrumentation(e));for(const e of this._scriptUsages){let r=e.url;const a=this._scriptParsedEvents.find((t=>t.scriptId===e.scriptId));if(a?.embedderName&&(r=a.embedderName),""===e.url||a&&""===a.embedderName)continue;const n=t[r]||[];n.push(e),t[r]=n}return"navigation"!==e.gatherMode&&this._addMissingScriptIds(t),t}};function hasOwnProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var Gm=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function stringifyPrimitive(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}}function stringify(e,t,r,a){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?map(Ym(e),(function(a){var n=encodeURIComponent(stringifyPrimitive(a))+r;return Gm(e[a])?map(e[a],(function(e){
|
483
|
+
return n+encodeURIComponent(stringifyPrimitive(e))})).join(t):n+encodeURIComponent(stringifyPrimitive(e[a]))})).join(t):a?encodeURIComponent(stringifyPrimitive(a))+r+encodeURIComponent(stringifyPrimitive(e)):""}function map(e,t){if(e.map)return e.map(t);for(var r=[],a=0;a<e.length;a++)r.push(t(e[a],a));return r}var Ym=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t};function parse$1(e,t,r,a){t=t||"&",r=r||"=";var n={};if("string"!=typeof e||0===e.length)return n;var i=/\+/g;e=e.split(t);var o=1e3;a&&"number"==typeof a.maxKeys&&(o=a.maxKeys);var s=e.length;o>0&&s>o&&(s=o);for(var c=0;c<s;++c){var l,u,d,m,p=e[c].replace(i,"%20"),h=p.indexOf(r);h>=0?(l=p.substr(0,h),u=p.substr(h+1)):(l=p,u=""),d=decodeURIComponent(l),m=decodeURIComponent(u),hasOwnProperty(n,d)?Gm(n[d])?n[d].push(m):n[d]=[n[d],m]:n[d]=m}return n}var Km={encode:stringify,stringify,decode:parse$1,parse:parse$1},Jm=getAugmentedNamespace(Object.freeze({
|
484
484
|
__proto__:null,stringify,parse:parse$1,default:Km,encode:stringify,decode:parse$1})),Xm=function trim(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};function Link(e){if(!(this instanceof Link))return new Link(e);this.refs=[]}Link.pattern=/(?:\<([^\>]+)\>)((\s*;\s*([a-z\*]+)=(("[^"]+")|('[^']+')|([^\,\;]+)))*)(\s*,\s*|$)/gi,Link.attrPattern=/([a-z\*]+)=(?:(?:"([^"]+)")|(?:'([^']+)')|([^\,\;]+))/gi,Link.isCompatibleEncoding=function(e){return/^utf-?8|ascii|utf-?16-?le|ucs-?2|base-?64|latin-?1$/i.test(e)},Link.formatExtendedAttribute=function(e,t){var r=(t.encoding||"utf-8").toUpperCase();return e+"="+r+"'"+(t.language||"en")+"'"+(Buffer$2.isBuffer(t.value)&&Link.isCompatibleEncoding(r)?t.value.toString(r):Buffer$2.isBuffer(t.value)?t.value.toString("hex").replace(/[0-9a-f]{2}/gi,"%$1"):Jm.escape(t.value))},Link.formatAttribute=function(e,t){
|
485
485
|
return/\*$/.test(e)||"string"!=typeof t?Link.formatExtendedAttribute(e,t):(/[^a-z]/i.test(t)&&(t='"'+(t=Jm.escape(t).replace(/%20/g," ").replace(/%2C/g,",").replace(/%3B/g,";"))+'"'),e+"="+t)},Link.parseExtendedValue=function(e){var t=/([^']+)?(?:'([^']+)')?(.+)/.exec(e);return{language:t[2].toLowerCase(),encoding:Link.isCompatibleEncoding(t[1])?null:t[1].toLowerCase(),value:Link.isCompatibleEncoding(t[1])?Jm.unescape(t[3]):t[3]}},Link.setAttr=function(e,t,r){return"rel"===t&&null!=e[t]||(Array.isArray(e[t])?e[t].push(r):null!=e[t]?e[t]=[e[t],r]:e[t]=r),e},Link.parseParams=function(e,t){var r={},a=/(.+)\?(.+)/gi.exec(t);if(!a)return e;a=a[2].split("&");for(var n=0;n<a.length;n++){var i=a[n].split("=");r[i[0]]=i[1]}return Link.setAttr(e,"params",r),e},Link.parseAttrs=function(e,t){var r=null,a="",n="",i="",o=/<(.*)>;\s*(.*)/gi.exec(t);for(o&&(i=o[2],e=Link.parseParams(e,o[1]));r=Link.attrPattern.exec(i);)a=r[1].toLowerCase(),n=r[4]||r[3]||r[2],
|
486
486
|
/\*$/.test(a)?Link.setAttr(e,a,Link.parseExtendedValue(n)):/%/.test(n)?Link.setAttr(e,a,Jm.unescape(n)):Link.setAttr(e,a,n);return e},Link.parse=function(e){return(new Link).parse(e)},Link.prototype={constructor:Link,rel:function(e){for(var t=[],r=0;r<this.refs.length;r++)this.refs[r].rel===e&&t.push(this.refs[r]);return t},get:function(e,t){e=e.toLowerCase();for(var r=[],a=0;a<this.refs.length;a++)this.refs[a][e]===t&&r.push(this.refs[a]);return r},set:function(e){return this.refs.push(e),this},has:function(e,t){return null!=this.get(e,t)},parse:function(e){e=Xm(e).replace(/\r?\n[\x20\x09]+/g,"");for(var t=null;t=Link.pattern.exec(e);){var r=Link.parseAttrs({uri:t[1]},t[0]);this.refs.push(r)}return this},toString:function(){for(var e=[],t="",r=null,a=0;a<this.refs.length;a++)r=this.refs[a],t=Object.keys(this.refs[a]).reduce((function(e,t){return"uri"===t?e:e+"; "+Link.formatAttribute(t,r[t])}),"<"+r.uri+">"),e.push(t);return e.join(", ")}}
|
@@ -498,21 +498,21 @@ const r=getComputedStyle(t).position;"fixed"!==r&&"sticky"!==r||t.classList.add(
|
|
498
498
|
async addStyleRule(e,t){const r=await e.sendCommand("Page.getFrameTree"),{styleSheetId:a}=await e.sendCommand("CSS.createStyleSheet",{frameId:r.frameTree.frame.id}),n=`.${t} { pointer-events: none !important }`;return await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:a,text:n}),a}async removeStyleRule(e,t){await e.sendCommand("CSS.setStyleSheetText",{styleSheetId:t,text:""})}async getArtifact(e){const t=e.driver.defaultSession;await t.sendCommand("DOM.enable"),await t.sendCommand("CSS.enable");const r="lighthouse-disable-pointer-events",a=await this.addStyleRule(t,r),n=await e.driver.executionContext.evaluate(gatherTapTargets,{args:[Np,r],useIsolation:!0,deps:[Cp.getNodeDetailsString,Cp.getElementsInDocument,disableFixedAndStickyElementPointerEvents,elementIsVisible,elementHasAncestorTapTarget,elementCenterIsAtZAxisTop,getClientRects,hasTextNodeSiblingsFormingTextBlock,elementIsInTextBlock,Ip.getRectCenterPoint,Cp.getNodePath,Cp.getNodeSelector,Cp.getNodeLabel]})
|
499
499
|
;return await this.removeStyleRule(t,a),await t.sendCommand("CSS.disable"),await t.sendCommand("DOM.disable"),n}};const Mp=eo,Pp=As;var Op=class ServiceWorker$1 extends Mp{meta={supportedModes:["navigation"]};async beforePass(e){return this.getArtifact({...e,dependencies:{}})}async afterPass(){}async getArtifact(e){const t=e.driver.defaultSession,{versions:r}=await Pp.getServiceWorkerVersions(t),{registrations:a}=await Pp.getServiceWorkerRegistrations(t);return{versions:r,registrations:a}}};const Fp=eo,Up=ji;var jp=class SourceMaps extends Fp{meta={supportedModes:["timespan","navigation"]};constructor(){super(),this._scriptParsedEvents=[],this.onScriptParsed=this.onScriptParsed.bind(this)}async fetchSourceMap(e,t){const r=await e.fetcher.fetchResource(t,{timeout:1500});if(null===r.content)throw new Error(`Failed fetching source map (${r.status})`);return JSON.parse(r.content)}parseSourceMapFromDataUrl(e){const t=Buffer.from(e.split(",")[1],"base64");return JSON.parse(t.toString())}
|
500
500
|
onScriptParsed(e){e.sourceMapURL&&this._scriptParsedEvents.push(e)}_resolveUrl(e,t){try{return new Up(e,t).href}catch(e){return}}async _retrieveMapFromScriptParsedEvent(e,t){if(!t.sourceMapURL)throw new Error("precondition failed: event.sourceMapURL should exist");const r=t.sourceMapURL.startsWith("data:"),a=t.url,n=r?t.sourceMapURL:this._resolveUrl(t.sourceMapURL,t.url);if(!n)return{scriptUrl:a,errorMessage:`Could not resolve map url: ${t.sourceMapURL}`};const i=r?void 0:n;try{const t=r?this.parseSourceMapFromDataUrl(n):await this.fetchSourceMap(e,n);return t.sections&&(t.sections=t.sections.filter((e=>e.map))),{scriptUrl:a,sourceMapUrl:i,map:t}}catch(e){return{scriptUrl:a,sourceMapUrl:i,errorMessage:e.toString()}}}async startSensitiveInstrumentation(e){const t=e.driver.defaultSession;t.on("Debugger.scriptParsed",this.onScriptParsed),await t.sendCommand("Debugger.enable")}async stopSensitiveInstrumentation(e){const t=e.driver.defaultSession;await t.sendCommand("Debugger.disable"),
|
501
|
-
t.off("Debugger.scriptParsed",this.onScriptParsed)}async getArtifact(e){await e.driver.fetcher.enable();const t=this._scriptParsedEvents.map((t=>this._retrieveMapFromScriptParsedEvent(e.driver,t)));return Promise.all(t)}};const Bp=oo,$p=eo;var qp=class TraceCompat extends $p{meta={supportedModes:["timespan","navigation"],dependencies:{Trace:Bp.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.Trace}}};const zp=vi.exports,Vp=ao;var Wp=class LHTraceProcessor$2 extends Vp{static createNoNavstartError(){return new zp(zp.errors.NO_NAVSTART)}static createNoResourceSendRequestError(){return new zp(zp.errors.NO_RESOURCE_REQUEST)}static createNoTracingStartedError(){return new zp(zp.errors.NO_TRACING_STARTED)}static createNoFirstContentfulPaintError(){return new zp(zp.errors.NO_FCP)}};const
|
501
|
+
t.off("Debugger.scriptParsed",this.onScriptParsed)}async getArtifact(e){await e.driver.fetcher.enable();const t=this._scriptParsedEvents.map((t=>this._retrieveMapFromScriptParsedEvent(e.driver,t)));return Promise.all(t)}};const Bp=oo,$p=eo;var qp=class TraceCompat extends $p{meta={supportedModes:["timespan","navigation"],dependencies:{Trace:Bp.symbol}};async getArtifact(e){return{defaultPass:e.dependencies.Trace}}};const zp=vi.exports,Vp=ao;var Wp=class LHTraceProcessor$2 extends Vp{static createNoNavstartError(){return new zp(zp.errors.NO_NAVSTART)}static createNoResourceSendRequestError(){return new zp(zp.errors.NO_RESOURCE_REQUEST)}static createNoTracingStartedError(){return new zp(zp.errors.NO_TRACING_STARTED)}static createNoFirstContentfulPaintError(){return new zp(zp.errors.NO_FCP)}};const Hp=Ao,Gp=Wp;var Yp=Hp(class ProcessedTrace$h{static async compute_(e){return Gp.processTrace(e)}},null);const Kp=Ao,Jp=Wp;var Xp=Kp(class ProcessedNavigation$7{static async compute_(e){
|
502
502
|
return Jp.processNavigation(e)}},null);const Zp=Ao,Qp=Yp,eh=new Set(["keydown","keypress","keyup"]),th=new Set(["mousedown","mouseup","pointerdown","pointerup","click"]),rh={keyboard:eh,tapOrClick:th,drag:th};class Responsiveness{static getHighPercentileResponsiveness(e){const t=e.frameTreeEvents.filter((e=>"Responsiveness.Renderer.UserInteraction"===e.name)).sort(((e,t)=>t.args.data.maxDuration-e.args.data.maxDuration));if(0===t.length)return null;return t[Math.min(9,Math.floor(t.length/50))]}static findInteractionEvent(e,{traceEvents:t}){const r=t.filter((e=>"EventTiming"===e.name&&"e"!==e.ph));if(r.length&&!r.some((e=>e.args.data?.frame)))return{name:"FallbackTiming",duration:e.args.data.maxDuration};const{maxDuration:a,interactionType:n}=e.args.data;let i,o=Number.POSITIVE_INFINITY;for(const t of r){if(t.args.data.frame!==e.args.frame)continue;const{type:r,duration:s}=t.args.data,c=rh[n];if(!c)throw new Error(`unexpected responsiveness interactionType '${n}'`);if(!c.has(r))continue
|
503
503
|
;const l=Math.abs(s-a);l<o&&(i=t,o=l)}if(!i)throw new Error(`no interaction event found for responsiveness type '${n}'`);if(o>5)throw new Error(`no interaction event found within 5ms of responsiveness maxDuration (max: ${a}, closest ${i.args.data.duration})`);return i}static async compute_(e,t){const{settings:r,trace:a}=e;if("simulate"===r.throttlingMethod)throw new Error("Responsiveness currently unsupported by simulated throttling");const n=await Qp.request(a,t),i=Responsiveness.getHighPercentileResponsiveness(n);if(!i)return null;const o=Responsiveness.findInteractionEvent(i,a);return JSON.parse(JSON.stringify(o))}}var ah=Zp(Responsiveness,["trace","settings"]);const nh=eo,{resolveNodeIdToObjectId:ih}=Du,oh=hn,sh=kp,ch=Jl,lh=oo,uh=Yp,dh=Xp,mh=vi.exports,ph=ah;function getNodeDetailsData(){const e=this.nodeType===document.ELEMENT_NODE?this:this.parentElement;let t;return e&&(t={node:getNodeDetails(e)}),t}class TraceElements extends nh{meta={supportedModes:["timespan","navigation"],
|
504
504
|
dependencies:{Trace:lh.symbol}};animationIdToName=new Map;constructor(){super(),this._onAnimationStarted=this._onAnimationStarted.bind(this)}_onAnimationStarted({animation:{id:e,name:t}}){t&&this.animationIdToName.set(e,t)}static traceRectToLHRect(e){const t={x:e[0],y:e[1],width:e[2],height:e[3]};return sh.addRectTopAndBottom(t)}static getTopLayoutShiftElements(e){const t=new Map,r=e.filter((e=>"LayoutShift"===e.name)).map((e=>e.args?.data)),a=r.findIndex((e=>e&&!e.had_recent_input));r.forEach(((e,r)=>{if(!e||!e.impacted_nodes||!e.score)return;if(-1!==a&&r>=a&&e.had_recent_input)return;let n=0;const i=new Map;e.impacted_nodes.forEach((e=>{if(!e.node_id||!e.old_rect||!e.new_rect)return;const t=TraceElements.traceRectToLHRect(e.old_rect),r=TraceElements.traceRectToLHRect(e.new_rect),a=sh.getRectArea(t)+sh.getRectArea(r)-sh.getRectOverlapArea(t,r);i.set(e.node_id,a),n+=a}));for(const[r,a]of i.entries()){let i=t.get(r)||0;i+=a/n*e.score,t.set(r,i)}}))
|
505
505
|
;return[...t.entries()].sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>({nodeId:e,score:t})))}static async getResponsivenessElement(e,t){const{settings:r}=t;try{const a=await ph.request({trace:e,settings:r},t);if(!a||"FallbackTiming"===a.name)return;return{nodeId:a.args.data.nodeId}}catch{return}}async getAnimatedElements(e){const t=new Map;for(const r of e){if("Animation"!==r.name)continue;if(!r.id2||!r.id2.local)continue;const e=r.id2.local,a=t.get(e)||{begin:void 0,status:void 0};"b"===r.ph?a.begin=r:"n"===r.ph&&r.args.data&&void 0!==r.args.data.compositeFailed&&(a.status=r),t.set(e,a)}const r=new Map;for(const{begin:e,status:a}of t.values()){const t=e?.args?.data?.nodeId,n=e?.args?.data?.id,i=a?.args?.data?.compositeFailed,o=a?.args?.data?.unsupportedProperties;if(!t||!n)continue;const s=r.get(t)||new Set;s.add({animationId:n,failureReasonsMask:i,unsupportedProperties:o}),r.set(t,s)}const a=[];for(const[e,t]of r){const r=[]
|
506
|
-
;for(const{animationId:e,failureReasonsMask:a,unsupportedProperties:n}of t){const t=this.animationIdToName.get(e);r.push({name:t,failureReasonsMask:a,unsupportedProperties:n})}a.push({nodeId:e,animations:r})}return a}async startInstrumentation(e){await e.driver.defaultSession.sendCommand("Animation.enable"),e.driver.defaultSession.on("Animation.animationStarted",this._onAnimationStarted)}async stopInstrumentation(e){e.driver.defaultSession.off("Animation.animationStarted",this._onAnimationStarted),await e.driver.defaultSession.sendCommand("Animation.disable")}async _getArtifact(e,t){const r=e.driver.defaultSession;if(!t)throw new Error("Trace is missing!")
|
507
|
-
|
508
|
-
async afterPass(e,t){const r={...e,dependencies:{}};return await this.stopInstrumentation(r),this._getArtifact(r,t.trace)}}var hh=TraceElements;const gh=eo;function getViewportDimensions(){return{innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio}}var fh=class ViewportDimensions extends gh{meta={supportedModes:["snapshot","timespan","navigation"]};async getArtifact(e){const t=e.driver,r=await t.executionContext.evaluate(getViewportDimensions,{args:[],useIsolation:!0});if(!Object.values(r).every(Number.isFinite)){const e=JSON.stringify(r);throw new Error(`ViewportDimensions results were not numeric: ${e}`)}return r}},yh={exports:{}},vh={exports:{}};const bh=kc,wh={failingElementsHeader:"Failing Elements"},Sh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/axe-audit.js",wh);vh.exports=class AxeAudit$I extends bh{
|
509
|
-
if((e.Accessibility.notApplicable||[]).find((e=>e.id===this.meta.id)))return{score:null,notApplicable:!0};const t=e.Accessibility.incomplete||[],r=t.find((e=>e.id===this.meta.id));if(r?.error)return{score:null,errorMessage:`axe-core Error: ${r.error.message||"Unknown error"}`};const a=this.meta.scoreDisplayMode===bh.SCORING_MODES.INFORMATIVE,n=e.Accessibility.violations||[],i=(a?n.concat(t):n).find((e=>e.id===this.meta.id)),o=i?.impact,s=i?.tags;if(a&&!i)return{score:null,notApplicable:!0};let c=[];i?.nodes&&(c=i.nodes.map((e=>({node:{...bh.makeNodeItem(e.node),explanation:e.failureSummary},subItems:e.relatedNodes.length?{type:"subitems",items:e.relatedNodes.map((e=>({relatedNode:bh.makeNodeItem(e)})))}:void 0}))));const l=[{key:"node",itemType:"node",subItemsHeading:{key:"relatedNode",itemType:"node"},text:Sh(wh.failingElementsHeader)}];let u;return(o||s)&&(u={type:"debugdata",impact:o,tags:s}),{score:Number(void 0===i),details:{...bh.makeTableDetails(l,c),debugData:u}
|
510
|
-
vh.exports.UIStrings=wh;const Th=vh.exports,Eh={title:"`[accesskey]` values are unique",failureTitle:"`[accesskey]` values are not unique",description:"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://web.dev/accesskeys/)."},xh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/accesskeys.js",Eh);yh.exports=class Accesskeys extends Th{static get meta(){return{id:"accesskeys",title:xh(Eh.title),failureTitle:xh(Eh.failureTitle),description:xh(Eh.description),requiredArtifacts:["Accessibility"]}}},yh.exports.UIStrings=Eh;var _h={exports:{}};const Ah=vh.exports,Rh={title:"`[aria-*]` attributes match their roles",failureTitle:"`[aria-*]` attributes do not match their roles",description:"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://web.dev/aria-allowed-attr/)."
|
506
|
+
;for(const{animationId:e,failureReasonsMask:a,unsupportedProperties:n}of t){const t=this.animationIdToName.get(e);r.push({name:t,failureReasonsMask:a,unsupportedProperties:n})}a.push({nodeId:e,animations:r})}return a}static async getLcpElement(e,t){let r;try{r=await dh.request(e,t)}catch(e){if("timespan"===t.gatherMode&&e.code===mh.errors.NO_FCP.code)return;throw e}const a=r.largestContentfulPaintEvt?.args?.data;if(void 0!==a?.nodeId&&a.type)return{nodeId:a.nodeId,type:a.type}}async startInstrumentation(e){await e.driver.defaultSession.sendCommand("Animation.enable"),e.driver.defaultSession.on("Animation.animationStarted",this._onAnimationStarted)}async stopInstrumentation(e){e.driver.defaultSession.off("Animation.animationStarted",this._onAnimationStarted),await e.driver.defaultSession.sendCommand("Animation.disable")}async _getArtifact(e,t){const r=e.driver.defaultSession;if(!t)throw new Error("Trace is missing!")
|
507
|
+
;const a=await uh.request(t,e),{mainThreadEvents:n}=a,i=await TraceElements.getLcpElement(a,e),o=TraceElements.getTopLayoutShiftElements(n),s=await this.getAnimatedElements(n),c=await TraceElements.getResponsivenessElement(t,e),l=new Map([["largest-contentful-paint",i?[i]:[]],["layout-shift",o],["animation",s],["responsiveness",c?[c]:[]]]),u=[];for(const[e,t]of l)for(let a=0;a<t.length;a++){const n=t[a].nodeId;let i;try{const e=await ih(r,n);if(!e)continue;i=await r.sendCommand("Runtime.callFunctionOn",{objectId:e,functionDeclaration:`function () {\n ${getNodeDetailsData.toString()};\n ${oh.getNodeDetailsString};\n return getNodeDetailsData.call(this);\n }`,returnByValue:!0,awaitPromise:!0})}catch(e){ch.captureException(e,{tags:{gatherer:this.name},level:"error"});continue}i?.result?.value&&u.push({traceEventType:e,...i.result.value,score:t[a].score,animations:t[a].animations,nodeId:n,type:t[a].type})}return u}async getArtifact(e){
|
508
|
+
return this._getArtifact(e,e.dependencies.Trace)}async afterPass(e,t){const r={...e,dependencies:{}};return await this.stopInstrumentation(r),this._getArtifact(r,t.trace)}}var hh=TraceElements;const gh=eo;function getViewportDimensions(){return{innerWidth:window.innerWidth,innerHeight:window.innerHeight,outerWidth:window.outerWidth,outerHeight:window.outerHeight,devicePixelRatio:window.devicePixelRatio}}var fh=class ViewportDimensions extends gh{meta={supportedModes:["snapshot","timespan","navigation"]};async getArtifact(e){const t=e.driver,r=await t.executionContext.evaluate(getViewportDimensions,{args:[],useIsolation:!0});if(!Object.values(r).every(Number.isFinite)){const e=JSON.stringify(r);throw new Error(`ViewportDimensions results were not numeric: ${e}`)}return r}},yh={exports:{}},vh={exports:{}};const bh=kc,wh={failingElementsHeader:"Failing Elements"},Sh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/axe-audit.js",wh);vh.exports=class AxeAudit$I extends bh{
|
509
|
+
static audit(e){if((e.Accessibility.notApplicable||[]).find((e=>e.id===this.meta.id)))return{score:null,notApplicable:!0};const t=e.Accessibility.incomplete||[],r=t.find((e=>e.id===this.meta.id));if(r?.error)return{score:null,errorMessage:`axe-core Error: ${r.error.message||"Unknown error"}`};const a=this.meta.scoreDisplayMode===bh.SCORING_MODES.INFORMATIVE,n=e.Accessibility.violations||[],i=(a?n.concat(t):n).find((e=>e.id===this.meta.id)),o=i?.impact,s=i?.tags;if(a&&!i)return{score:null,notApplicable:!0};let c=[];i?.nodes&&(c=i.nodes.map((e=>({node:{...bh.makeNodeItem(e.node),explanation:e.failureSummary},subItems:e.relatedNodes.length?{type:"subitems",items:e.relatedNodes.map((e=>({relatedNode:bh.makeNodeItem(e)})))}:void 0}))));const l=[{key:"node",itemType:"node",subItemsHeading:{key:"relatedNode",itemType:"node"},text:Sh(wh.failingElementsHeader)}];let u;return(o||s)&&(u={type:"debugdata",impact:o,tags:s}),{score:Number(void 0===i),details:{...bh.makeTableDetails(l,c),debugData:u}
|
510
|
+
}}},vh.exports.UIStrings=wh;const Th=vh.exports,Eh={title:"`[accesskey]` values are unique",failureTitle:"`[accesskey]` values are not unique",description:"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://web.dev/accesskeys/)."},xh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/accesskeys.js",Eh);yh.exports=class Accesskeys extends Th{static get meta(){return{id:"accesskeys",title:xh(Eh.title),failureTitle:xh(Eh.failureTitle),description:xh(Eh.description),requiredArtifacts:["Accessibility"]}}},yh.exports.UIStrings=Eh;var _h={exports:{}};const Ah=vh.exports,Rh={title:"`[aria-*]` attributes match their roles",failureTitle:"`[aria-*]` attributes do not match their roles",description:"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://web.dev/aria-allowed-attr/)."
|
511
511
|
},kh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-allowed-attr.js",Rh);_h.exports=class ARIAAllowedAttr extends Ah{static get meta(){return{id:"aria-allowed-attr",title:kh(Rh.title),failureTitle:kh(Rh.failureTitle),description:kh(Rh.description),requiredArtifacts:["Accessibility"]}}},_h.exports.UIStrings=Rh;var Dh={exports:{}};const Ch=vh.exports,Ih={title:"`button`, `link`, and `menuitem` elements have accessible names",failureTitle:"`button`, `link`, and `menuitem` elements do not have accessible names.",description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Nh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-command-name.js",Ih);Dh.exports=class AriaCommandName extends Ch{static get meta(){return{id:"aria-command-name",title:Nh(Ih.title),failureTitle:Nh(Ih.failureTitle),
|
512
512
|
description:Nh(Ih.description),requiredArtifacts:["Accessibility"]}}},Dh.exports.UIStrings=Ih;var Lh={exports:{}};const Mh=vh.exports,Ph={title:'`[aria-hidden="true"]` is not present on the document `<body>`',failureTitle:'`[aria-hidden="true"]` is present on the document `<body>`',description:'Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `<body>`. [Learn more](https://web.dev/aria-hidden-body/).'},Oh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-hidden-body.js",Ph);Lh.exports=class AriaHiddenBody extends Mh{static get meta(){return{id:"aria-hidden-body",title:Oh(Ph.title),failureTitle:Oh(Ph.failureTitle),description:Oh(Ph.description),requiredArtifacts:["Accessibility"]}}},Lh.exports.UIStrings=Ph;var Fh={exports:{}};const Uh=vh.exports,jh={title:'`[aria-hidden="true"]` elements do not contain focusable descendents',failureTitle:'`[aria-hidden="true"]` elements contain focusable descendents',
|
513
513
|
description:'Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn more](https://web.dev/aria-hidden-focus/).'},Bh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-hidden-focus.js",jh);Fh.exports=class AriaHiddenFocus extends Uh{static get meta(){return{id:"aria-hidden-focus",title:Bh(jh.title),failureTitle:Bh(jh.failureTitle),description:Bh(jh.description),requiredArtifacts:["Accessibility"]}}},Fh.exports.UIStrings=jh;var $h={exports:{}};const qh=vh.exports,zh={title:"ARIA input fields have accessible names",failureTitle:"ARIA input fields do not have accessible names",description:"When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."
|
514
|
-
},Vh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-input-field-name.js",zh);$h.exports=class AriaInputFieldName extends qh{static get meta(){return{id:"aria-input-field-name",title:Vh(zh.title),failureTitle:Vh(zh.failureTitle),description:Vh(zh.description),requiredArtifacts:["Accessibility"]}}},$h.exports.UIStrings=zh;var Wh={exports:{}};const
|
515
|
-
requiredArtifacts:["Accessibility"]}}},Wh.exports.UIStrings=
|
514
|
+
},Vh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-input-field-name.js",zh);$h.exports=class AriaInputFieldName extends qh{static get meta(){return{id:"aria-input-field-name",title:Vh(zh.title),failureTitle:Vh(zh.failureTitle),description:Vh(zh.description),requiredArtifacts:["Accessibility"]}}},$h.exports.UIStrings=zh;var Wh={exports:{}};const Hh=vh.exports,Gh={title:"ARIA `meter` elements have accessible names",failureTitle:"ARIA `meter` elements do not have accessible names.",description:"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Yh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-meter-name.js",Gh);Wh.exports=class AriaMeterName extends Hh{static get meta(){return{id:"aria-meter-name",title:Yh(Gh.title),failureTitle:Yh(Gh.failureTitle),description:Yh(Gh.description),
|
515
|
+
requiredArtifacts:["Accessibility"]}}},Wh.exports.UIStrings=Gh;var Kh={exports:{}};const Jh=vh.exports,Xh={title:"ARIA `progressbar` elements have accessible names",failureTitle:"ARIA `progressbar` elements do not have accessible names.",description:"When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/)."},Zh=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-progressbar-name.js",Xh);Kh.exports=class AriaProgressbarName extends Jh{static get meta(){return{id:"aria-progressbar-name",title:Zh(Xh.title),failureTitle:Zh(Xh.failureTitle),description:Zh(Xh.description),requiredArtifacts:["Accessibility"]}}},Kh.exports.UIStrings=Xh;var Qh={exports:{}};const eg=vh.exports,tg={title:"`[role]`s have all required `[aria-*]` attributes",failureTitle:"`[role]`s do not have all required `[aria-*]` attributes",
|
516
516
|
description:"Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more](https://web.dev/aria-required-attr/)."},rg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-required-attr.js",tg);Qh.exports=class ARIARequiredAttr extends eg{static get meta(){return{id:"aria-required-attr",title:rg(tg.title),failureTitle:rg(tg.failureTitle),description:rg(tg.description),requiredArtifacts:["Accessibility"]}}},Qh.exports.UIStrings=tg;var ag={exports:{}};const ng=vh.exports,ig={title:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",failureTitle:"Elements with an ARIA `[role]` that require children to contain a specific `[role]` are missing some or all of those required children.",description:"Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-children/)."
|
517
517
|
},og=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-required-children.js",ig);ag.exports=class AriaRequiredChildren extends ng{static get meta(){return{id:"aria-required-children",title:og(ig.title),failureTitle:og(ig.failureTitle),description:og(ig.description),requiredArtifacts:["Accessibility"]}}},ag.exports.UIStrings=ig;var sg={exports:{}};const cg=vh.exports,lg={title:"`[role]`s are contained by their required parent element",failureTitle:"`[role]`s are not contained by their required parent element",description:"Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-parent/)."},ug=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-required-parent.js",lg);sg.exports=class AriaRequiredParent extends cg{static get meta(){return{id:"aria-required-parent",title:ug(lg.title),failureTitle:ug(lg.failureTitle),
|
518
518
|
description:ug(lg.description),requiredArtifacts:["Accessibility"]}}},sg.exports.UIStrings=lg;var dg={exports:{}};const mg=vh.exports,pg={title:"`[role]` values are valid",failureTitle:"`[role]` values are not valid",description:"ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more](https://web.dev/aria-roles/)."},hg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-roles.js",pg);dg.exports=class AriaRoles extends mg{static get meta(){return{id:"aria-roles",title:hg(pg.title),failureTitle:hg(pg.failureTitle),description:hg(pg.description),requiredArtifacts:["Accessibility"]}}},dg.exports.UIStrings=pg;var gg={exports:{}};const fg=vh.exports,yg={title:"ARIA toggle fields have accessible names",failureTitle:"ARIA toggle fields do not have accessible names",
|
@@ -521,8 +521,8 @@ description:"When a toggle field doesn't have an accessible name, screen readers
|
|
521
521
|
requiredArtifacts:["Accessibility"]}}},Eg.exports.UIStrings=_g;var Rg={exports:{}};const kg=vh.exports,Dg={title:"`[aria-*]` attributes have valid values",failureTitle:"`[aria-*]` attributes do not have valid values",description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more](https://web.dev/aria-valid-attr-value/)."},Cg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-valid-attr-value.js",Dg);Rg.exports=class ARIAValidAttr$1 extends kg{static get meta(){return{id:"aria-valid-attr-value",title:Cg(Dg.title),failureTitle:Cg(Dg.failureTitle),description:Cg(Dg.description),requiredArtifacts:["Accessibility"]}}},Rg.exports.UIStrings=Dg;var Ig={exports:{}};const Ng=vh.exports,Lg={title:"`[aria-*]` attributes are valid and not misspelled",failureTitle:"`[aria-*]` attributes are not valid or misspelled",
|
522
522
|
description:"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more](https://web.dev/aria-valid-attr/)."},Mg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/aria-valid-attr.js",Lg);Ig.exports=class ARIAValidAttr extends Ng{static get meta(){return{id:"aria-valid-attr",title:Mg(Lg.title),failureTitle:Mg(Lg.failureTitle),description:Mg(Lg.description),requiredArtifacts:["Accessibility"]}}},Ig.exports.UIStrings=Lg;var Pg={exports:{}};const Og=vh.exports,Fg={title:"Buttons have an accessible name",failureTitle:"Buttons do not have an accessible name",description:'When a button doesn\'t have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. [Learn more](https://web.dev/button-name/).'},Ug=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/button-name.js",Fg);Pg.exports=class ButtonName extends Og{static get meta(){return{
|
523
523
|
id:"button-name",title:Ug(Fg.title),failureTitle:Ug(Fg.failureTitle),description:Ug(Fg.description),requiredArtifacts:["Accessibility"]}}},Pg.exports.UIStrings=Fg;var jg={exports:{}};const Bg=vh.exports,$g={title:"The page contains a heading, skip link, or landmark region",failureTitle:"The page does not contain a heading, skip link, or landmark region",description:"Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more](https://web.dev/bypass/)."},qg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/bypass.js",$g);jg.exports=class Bypass extends Bg{static get meta(){return{id:"bypass",title:qg($g.title),failureTitle:qg($g.failureTitle),description:qg($g.description),requiredArtifacts:["Accessibility"]}}},jg.exports.UIStrings=$g;var zg={exports:{}};const Vg=vh.exports,Wg={title:"Background and foreground colors have a sufficient contrast ratio",
|
524
|
-
failureTitle:"Background and foreground colors do not have a sufficient contrast ratio.",description:"Low-contrast text is difficult or impossible for many users to read. [Learn more](https://web.dev/color-contrast/)."},
|
525
|
-
description:"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://web.dev/definition-list/)."},Jg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/definition-list.js",Kg);
|
524
|
+
failureTitle:"Background and foreground colors do not have a sufficient contrast ratio.",description:"Low-contrast text is difficult or impossible for many users to read. [Learn more](https://web.dev/color-contrast/)."},Hg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/color-contrast.js",Wg);zg.exports=class ColorContrast extends Vg{static get meta(){return{id:"color-contrast",title:Hg(Wg.title),failureTitle:Hg(Wg.failureTitle),description:Hg(Wg.description),requiredArtifacts:["Accessibility"]}}},zg.exports.UIStrings=Wg;var Gg={exports:{}};const Yg=vh.exports,Kg={title:"`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",failureTitle:"`<dl>`'s do not contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",
|
525
|
+
description:"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://web.dev/definition-list/)."},Jg=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/definition-list.js",Kg);Gg.exports=class DefinitionList extends Yg{static get meta(){return{id:"definition-list",title:Jg(Kg.title),failureTitle:Jg(Kg.failureTitle),description:Jg(Kg.description),requiredArtifacts:["Accessibility"]}}},Gg.exports.UIStrings=Kg;var Xg={exports:{}};const Zg=vh.exports,Qg={title:"Definition list items are wrapped in `<dl>` elements",failureTitle:"Definition list items are not wrapped in `<dl>` elements",description:"Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn more](https://web.dev/dlitem/)."},ef=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/dlitem.js",Qg);Xg.exports=class DLItem extends Zg{
|
526
526
|
static get meta(){return{id:"dlitem",title:ef(Qg.title),failureTitle:ef(Qg.failureTitle),description:ef(Qg.description),requiredArtifacts:["Accessibility"]}}},Xg.exports.UIStrings=Qg;var tf={exports:{}};const rf=vh.exports,af={title:"Document has a `<title>` element",failureTitle:"Document doesn't have a `<title>` element",description:"The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more](https://web.dev/document-title/)."},nf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/document-title.js",af);tf.exports=class DocumentTitle extends rf{static get meta(){return{id:"document-title",title:nf(af.title),failureTitle:nf(af.failureTitle),description:nf(af.description),requiredArtifacts:["Accessibility"]}}},tf.exports.UIStrings=af;var of={exports:{}};const sf=vh.exports,cf={title:"`[id]` attributes on active, focusable elements are unique",
|
527
527
|
failureTitle:"`[id]` attributes on active, focusable elements are not unique",description:"All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. [Learn more](https://web.dev/duplicate-id-active/)."},lf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/duplicate-id-active.js",cf);of.exports=class DuplicateIdActive extends sf{static get meta(){return{id:"duplicate-id-active",title:lf(cf.title),failureTitle:lf(cf.failureTitle),description:lf(cf.description),requiredArtifacts:["Accessibility"]}}},of.exports.UIStrings=cf;var uf={exports:{}};const df=vh.exports,mf={title:"ARIA IDs are unique",failureTitle:"ARIA IDs are not unique",description:"The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn more](https://web.dev/duplicate-id-aria/)."},pf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/duplicate-id-aria.js",mf)
|
528
528
|
;uf.exports=class DuplicateIdAria extends df{static get meta(){return{id:"duplicate-id-aria",title:pf(mf.title),failureTitle:pf(mf.failureTitle),description:pf(mf.description),requiredArtifacts:["Accessibility"]}}},uf.exports.UIStrings=mf;var hf={exports:{}};const gf=vh.exports,ff={title:"No form fields have multiple labels",failureTitle:"Form fields have multiple labels",description:"Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn more](https://web.dev/form-field-multiple-labels/)."},yf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/form-field-multiple-labels.js",ff);hf.exports=class FormFieldMultipleLabels extends gf{static get meta(){return{id:"form-field-multiple-labels",title:yf(ff.title),failureTitle:yf(ff.failureTitle),description:yf(ff.description),scoreDisplayMode:gf.SCORING_MODES.INFORMATIVE,requiredArtifacts:["Accessibility"]}}},
|
@@ -531,8 +531,8 @@ description:"Properly ordered headings that do not skip levels convey the semant
|
|
531
531
|
description:"If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more](https://web.dev/html-has-lang/)."},Df=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/html-has-lang.js",kf);Af.exports=class HTMLHasLang extends Rf{static get meta(){return{id:"html-has-lang",title:Df(kf.title),failureTitle:Df(kf.failureTitle),description:Df(kf.description),requiredArtifacts:["Accessibility"]}}},Af.exports.UIStrings=kf;var Cf={exports:{}};const If=vh.exports,Nf={title:"`<html>` element has a valid value for its `[lang]` attribute",failureTitle:"`<html>` element does not have a valid value for its `[lang]` attribute.",
|
532
532
|
description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn more](https://web.dev/html-lang-valid/)."},Lf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/html-lang-valid.js",Nf);Cf.exports=class HTMLLangValid extends If{static get meta(){return{id:"html-lang-valid",title:Lf(Nf.title),failureTitle:Lf(Nf.failureTitle),description:Lf(Nf.description),requiredArtifacts:["Accessibility"]}}},Cf.exports.UIStrings=Nf;var Mf={exports:{}};const Pf=vh.exports,Of={title:"Image elements have `[alt]` attributes",failureTitle:"Image elements do not have `[alt]` attributes",description:"Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more](https://web.dev/image-alt/)."},Ff=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/image-alt.js",Of)
|
533
533
|
;Mf.exports=class ImageAlt extends Pf{static get meta(){return{id:"image-alt",title:Ff(Of.title),failureTitle:Ff(Of.failureTitle),description:Ff(Of.description),requiredArtifacts:["Accessibility"]}}},Mf.exports.UIStrings=Of;var Uf={exports:{}};const jf=vh.exports,Bf={title:'`<input type="image">` elements have `[alt]` text',failureTitle:'`<input type="image">` elements do not have `[alt]` text',description:"When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn more](https://web.dev/input-image-alt/)."},$f=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/input-image-alt.js",Bf);Uf.exports=class InputImageAlt extends jf{static get meta(){return{id:"input-image-alt",title:$f(Bf.title),failureTitle:$f(Bf.failureTitle),description:$f(Bf.description),requiredArtifacts:["Accessibility"]}}},Uf.exports.UIStrings=Bf;var qf={exports:{}};const zf=vh.exports,Vf={
|
534
|
-
title:"Form elements have associated labels",failureTitle:"Form elements do not have associated labels",description:"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://web.dev/label/)."},Wf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/label.js",Vf);qf.exports=class Label extends zf{static get meta(){return{id:"label",title:Wf(Vf.title),failureTitle:Wf(Vf.failureTitle),description:Wf(Vf.description),requiredArtifacts:["Accessibility"]}}},qf.exports.UIStrings=Vf;var
|
535
|
-
},Kf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/link-name.js",Yf);
|
534
|
+
title:"Form elements have associated labels",failureTitle:"Form elements do not have associated labels",description:"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://web.dev/label/)."},Wf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/label.js",Vf);qf.exports=class Label extends zf{static get meta(){return{id:"label",title:Wf(Vf.title),failureTitle:Wf(Vf.failureTitle),description:Wf(Vf.description),requiredArtifacts:["Accessibility"]}}},qf.exports.UIStrings=Vf;var Hf={exports:{}};const Gf=vh.exports,Yf={title:"Links have a discernible name",failureTitle:"Links do not have a discernible name",description:"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn more](https://web.dev/link-name/)."
|
535
|
+
},Kf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/link-name.js",Yf);Hf.exports=class LinkName extends Gf{static get meta(){return{id:"link-name",title:Kf(Yf.title),failureTitle:Kf(Yf.failureTitle),description:Kf(Yf.description),requiredArtifacts:["Accessibility"]}}},Hf.exports.UIStrings=Yf;var Jf={exports:{}};const Xf=vh.exports,Zf={title:"Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",failureTitle:"Lists do not contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",description:"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more](https://web.dev/list/)."},Qf=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/list.js",Zf);Jf.exports=class List extends Xf{static get meta(){return{id:"list",title:Qf(Zf.title),failureTitle:Qf(Zf.failureTitle),description:Qf(Zf.description),
|
536
536
|
requiredArtifacts:["Accessibility"]}}},Jf.exports.UIStrings=Zf;var ey={exports:{}};const ty=vh.exports,ry={title:"List items (`<li>`) are contained within `<ul>` or `<ol>` parent elements",failureTitle:"List items (`<li>`) are not contained within `<ul>` or `<ol>` parent elements.",description:"Screen readers require list items (`<li>`) to be contained within a parent `<ul>` or `<ol>` to be announced properly. [Learn more](https://web.dev/listitem/)."},ay=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/listitem.js",ry);ey.exports=class ListItem extends ty{static get meta(){return{id:"listitem",title:ay(ry.title),failureTitle:ay(ry.failureTitle),description:ay(ry.description),requiredArtifacts:["Accessibility"]}}},ey.exports.UIStrings=ry;const ny=kc;var iy=class ManualAudit$e extends ny{static get partialMeta(){return{scoreDisplayMode:ny.SCORING_MODES.MANUAL,requiredArtifacts:[]}}static audit(){return{score:0}}};const oy=iy
|
537
537
|
;var sy=class CustomControlsLabels extends oy{static get meta(){return Object.assign({id:"custom-controls-labels",description:"Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more](https://web.dev/custom-controls-labels/).",title:"Custom controls have associated labels"},super.partialMeta)}};const cy=iy;var ly=class CustomControlsRoles extends cy{static get meta(){return Object.assign({id:"custom-controls-roles",description:"Custom interactive controls have appropriate ARIA roles. [Learn more](https://web.dev/custom-control-roles/).",title:"Custom controls have ARIA roles"},super.partialMeta)}};const uy=iy;var dy=class FocusTraps extends uy{static get meta(){return Object.assign({id:"focus-traps",description:"A user can tab into and out of any control or region without accidentally trapping their focus. [Learn more](https://web.dev/focus-traps/).",title:"User focus is not accidentally trapped in a region"},super.partialMeta)}}
|
538
538
|
;const my=iy;var py=class FocusableControls extends my{static get meta(){return Object.assign({id:"focusable-controls",description:"Custom interactive controls are keyboard focusable and display a focus indicator. [Learn more](https://web.dev/focusable-controls/).",title:"Interactive controls are keyboard focusable"},super.partialMeta)}};const hy=iy;var gy=class InteractiveElementAffordance extends hy{static get meta(){return Object.assign({id:"interactive-element-affordance",description:"Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn more](https://web.dev/interactive-element-affordance/).",title:"Interactive elements indicate their purpose and state"},super.partialMeta)}};const fy=iy;var yy=class LogicalTabOrder extends fy{static get meta(){return Object.assign({id:"logical-tab-order",
|
@@ -541,8 +541,8 @@ return Object.assign({id:"use-landmarks",description:"Landmark elements (<main>,
|
|
541
541
|
description:"Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more](https://web.dev/meta-refresh/)."},Dy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/meta-refresh.js",ky);Ay.exports=class MetaRefresh extends Ry{static get meta(){return{id:"meta-refresh",title:Dy(ky.title),failureTitle:Dy(ky.failureTitle),description:Dy(ky.description),requiredArtifacts:["Accessibility"]}}},Ay.exports.UIStrings=ky;var Cy={exports:{}};const Iy=vh.exports,Ny={title:'`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.',failureTitle:'`[user-scalable="no"]` is used in the `<meta name="viewport">` element or the `[maximum-scale]` attribute is less than 5.',
|
542
542
|
description:"Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more](https://web.dev/meta-viewport/)."},Ly=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/meta-viewport.js",Ny);Cy.exports=class MetaViewport extends Iy{static get meta(){return{id:"meta-viewport",title:Ly(Ny.title),failureTitle:Ly(Ny.failureTitle),description:Ly(Ny.description),requiredArtifacts:["Accessibility"]}}},Cy.exports.UIStrings=Ny;var My={exports:{}};const Py=vh.exports,Oy={title:"`<object>` elements have alternate text",failureTitle:"`<object>` elements do not have alternate text",description:"Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more](https://web.dev/object-alt/)."},Fy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/object-alt.js",Oy);My.exports=class ObjectAlt extends Py{
|
543
543
|
static get meta(){return{id:"object-alt",title:Fy(Oy.title),failureTitle:Fy(Oy.failureTitle),description:Fy(Oy.description),requiredArtifacts:["Accessibility"]}}},My.exports.UIStrings=Oy;var Uy={exports:{}};const jy=vh.exports,By={title:"No element has a `[tabindex]` value greater than 0",failureTitle:"Some elements have a `[tabindex]` value greater than 0",description:"A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more](https://web.dev/tabindex/)."},$y=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/tabindex.js",By);Uy.exports=class TabIndex extends jy{static get meta(){return{id:"tabindex",title:$y(By.title),failureTitle:$y(By.failureTitle),description:$y(By.description),requiredArtifacts:["Accessibility"]}}},Uy.exports.UIStrings=By;var qy={exports:{}};const zy=vh.exports,Vy={
|
544
|
-
title:"Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",failureTitle:"Cells in a `<table>` element that use the `[headers]` attribute refer to an element `id` not found within the same table.",description:"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://web.dev/td-headers-attr/)."},Wy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/td-headers-attr.js",Vy);qy.exports=class TDHeadersAttr extends zy{static get meta(){return{id:"td-headers-attr",title:Wy(Vy.title),failureTitle:Wy(Vy.failureTitle),description:Wy(Vy.description),requiredArtifacts:["Accessibility"]}}},qy.exports.UIStrings=Vy;var
|
545
|
-
title:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.',failureTitle:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` do not have data cells they describe.',description:"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://web.dev/th-has-data-cells/)."},Ky=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/th-has-data-cells.js",Yy);
|
544
|
+
title:"Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",failureTitle:"Cells in a `<table>` element that use the `[headers]` attribute refer to an element `id` not found within the same table.",description:"Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://web.dev/td-headers-attr/)."},Wy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/td-headers-attr.js",Vy);qy.exports=class TDHeadersAttr extends zy{static get meta(){return{id:"td-headers-attr",title:Wy(Vy.title),failureTitle:Wy(Vy.failureTitle),description:Wy(Vy.description),requiredArtifacts:["Accessibility"]}}},qy.exports.UIStrings=Vy;var Hy={exports:{}};const Gy=vh.exports,Yy={
|
545
|
+
title:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.',failureTitle:'`<th>` elements and elements with `[role="columnheader"/"rowheader"]` do not have data cells they describe.',description:"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://web.dev/th-has-data-cells/)."},Ky=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/th-has-data-cells.js",Yy);Hy.exports=class THHasDataCells extends Gy{static get meta(){return{id:"th-has-data-cells",title:Ky(Yy.title),failureTitle:Ky(Yy.failureTitle),description:Ky(Yy.description),requiredArtifacts:["Accessibility"]}}},Hy.exports.UIStrings=Yy;var Jy={exports:{}};const Xy=vh.exports,Zy={title:"`[lang]` attributes have a valid value",failureTitle:"`[lang]` attributes do not have a valid value",
|
546
546
|
description:"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn more](https://web.dev/valid-lang/)."},Qy=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/valid-lang.js",Zy);Jy.exports=class ValidLang extends Xy{static get meta(){return{id:"valid-lang",title:Qy(Zy.title),failureTitle:Qy(Zy.failureTitle),description:Qy(Zy.description),requiredArtifacts:["Accessibility"]}}},Jy.exports.UIStrings=Zy;var ev={exports:{}};const tv=vh.exports,rv={title:'`<video>` elements contain a `<track>` element with `[kind="captions"]`',failureTitle:'`<video>` elements do not contain a `<track>` element with `[kind="captions"]`.',description:"When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more](https://web.dev/video-caption/)."
|
547
547
|
},av=oi.createMessageInstanceIdFn("lighthouse-core/audits/accessibility/video-caption.js",rv);ev.exports=class VideoCaption extends tv{static get meta(){return{id:"video-caption",title:av(rv.title),failureTitle:av(rv.failureTitle),description:av(rv.description),requiredArtifacts:["Accessibility"]}}},ev.exports.UIStrings=rv;var nv={exports:{}};const iv=kc,ov={title:"Provides a valid `apple-touch-icon`",failureTitle:"Does not provide a valid `apple-touch-icon`",description:"For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. [Learn More](https://web.dev/apple-touch-icon/).",precomposedWarning:"`apple-touch-icon-precomposed` is out of date; `apple-touch-icon` is preferred."},sv=oi.createMessageInstanceIdFn("lighthouse-core/audits/apple-touch-icon.js",ov);nv.exports=class AppleTouchIcon extends iv{static get meta(){return{id:"apple-touch-icon",title:sv(ov.title),
|
548
548
|
failureTitle:sv(ov.failureTitle),description:sv(ov.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements"]}}static audit(e){const t=e.LinkElements.filter((e=>"apple-touch-icon"===e.rel||"apple-touch-icon-precomposed"===e.rel)).filter((e=>!!e.href)),r=0!==t.length,a=[];return 0!==t.filter((e=>"apple-touch-icon-precomposed"===e.rel)).length&&0===t.filter((e=>"apple-touch-icon"===e.rel)).length&&a.push(sv(ov.precomposedWarning)),{score:r?1:0,warnings:a}}},nv.exports.UIStrings=ov;var cv={exports:{}};const lv=kc,uv=oi,dv=on.default,mv={title:"`<input>` elements correctly use `autocomplete`",failureTitle:"`<input>` elements do not have correct `autocomplete` attributes",description:"`autocomplete` helps users submit forms quicker. To reduce user effort, consider enabling by setting the `autocomplete` attribute to a valid value. [Learn more](https://developers.google.com/web/fundamentals/design-and-ux/input/forms#use_metadata_to_enable_auto-complete)",
|
@@ -567,12 +567,12 @@ getAttributableURLForTask:getAttributableURLForTask$2,getExecutionTimingsByURL:f
|
|
567
567
|
},jv=Mv.createMessageInstanceIdFn("lighthouse-core/audits/bootup-time.js",Uv);class BootupTime extends Nv{static get meta(){return{id:"bootup-time",title:jv(Uv.title),failureTitle:jv(Uv.failureTitle),description:jv(Uv.description),scoreDisplayMode:Nv.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{p10:1282,median:3500,thresholdInMs:50}}static async audit(e,t){const r=t.settings||{},a=e.traces[BootupTime.DEFAULT_PASS],n=e.devtoolsLogs[BootupTime.DEFAULT_PASS],i=await Pv.request(n,t),o=await Ov.request(a,t),s="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,c=Fv(o,i);let l=!1,u=0;const d=Array.from(c).map((([e,r])=>{let a=0;for(const[e,t]of Object.entries(r))r[e]=t*s,a+=t*s;const n=r[Lv.scriptEvaluation.id]||0,i=r[Lv.scriptParseCompile.id]||0;return a>=t.options.thresholdInMs&&(u+=n+i),l=l||e.startsWith("chrome-extension:")&&n>100,{url:e,total:a,scripting:n,scriptParseCompile:i}
|
568
568
|
})).filter((e=>e.total>=t.options.thresholdInMs)).sort(((e,t)=>t.total-e.total));let m;l&&(m=[jv(Uv.chromeExtensionsWarning)]);const p={wastedMs:u},h=[{key:"url",itemType:"url",text:jv(Mv.UIStrings.columnURL)},{key:"total",granularity:1,itemType:"ms",text:jv(Uv.columnTotal)},{key:"scripting",granularity:1,itemType:"ms",text:jv(Uv.columnScriptEval)},{key:"scriptParseCompile",granularity:1,itemType:"ms",text:jv(Uv.columnScriptParse)}],f=BootupTime.makeTableDetails(h,d,p);return{score:Nv.computeLogNormalScore({p10:t.options.p10,median:t.options.median},u),numericValue:u,numericUnit:"millisecond",displayValue:u>0?jv(Mv.UIStrings.seconds,{timeInMs:u}):"",details:f,runWarnings:m}}}yv.exports=BootupTime,yv.exports.UIStrings=Uv;var Bv={exports:{}};const $v=Zc,qv=Ki;class NetworkNode$1 extends $v{constructor(e){super(e.requestId),this._record=e}get type(){return $v.TYPES.NETWORK}get startTime(){return 1e3*this._record.startTime*1e3}get endTime(){return 1e3*this._record.endTime*1e3}get record(){
|
569
569
|
return this._record}get initiatorType(){return this._record.initiator&&this._record.initiator.type}get fromDiskCache(){return!!this._record.fromDiskCache}get isNonNetworkProtocol(){return qv.isNonNetworkRequest(this._record)}get isConnectionless(){return this.fromDiskCache||this.isNonNetworkProtocol}hasRenderBlockingPriority(){const e=this._record.priority,t=this._record.resourceType===qv.TYPES.Script,r=this._record.resourceType===qv.TYPES.Document;return"VeryHigh"===e||"High"===e&&t||"High"===e&&r}cloneWithoutRelationships(){const e=new NetworkNode$1(this._record);return e.setIsMainDocument(this._isMainDocument),e}}var zv=NetworkNode$1;const Vv=Zc;class CPUNode$1 extends Vv{constructor(e,t=[]){super(`${e.tid}.${e.ts}`),this._event=e,this._childEvents=t}get type(){return Vv.TYPES.CPU}get startTime(){return this._event.ts}get endTime(){return this._event.ts+this._event.dur}get event(){return this._event}get childEvents(){return this._childEvents}didPerformLayout(){
|
570
|
-
return this._childEvents.some((e=>"Layout"===e.name))}getEvaluateScriptURLs(){const e=new Set;for(const t of this._childEvents)"EvaluateScript"===t.name&&t.args.data&&t.args.data.url&&e.add(t.args.data.url);return e}cloneWithoutRelationships(){return new CPUNode$1(this._event,this._childEvents)}}const Wv=Ao,
|
571
|
-
e.frameId&&e.resourceType===Jv.TYPES.Document&&e.documentURL===e.url){const t=n.has(e.frameId)?null:i;n.set(e.frameId,t)}})),{nodes:t,idToNodeMap:r,urlToNodeMap:a,frameIdToNodeMap:n}}static getCPUNodes({mainThreadEvents:e}){const t=[];let r=0;for(Kv.assertHasToplevelEvents(e);r<e.length;){const a=e[r];if(r++,!Kv.isScheduleableTask(a)||!a.dur)continue;const n=[];for(const t=a.ts+a.dur;r<e.length&&e[r].ts<t;r++)n.push(e[r]);t.push(new
|
570
|
+
return this._childEvents.some((e=>"Layout"===e.name))}getEvaluateScriptURLs(){const e=new Set;for(const t of this._childEvents)"EvaluateScript"===t.name&&t.args.data&&t.args.data.url&&e.add(t.args.data.url);return e}cloneWithoutRelationships(){return new CPUNode$1(this._event,this._childEvents)}}const Wv=Ao,Hv=zv,Gv=CPUNode$1,Yv=Fo,Kv=ao,Jv=Ki,Xv=Yp,Zv=Lo,Qv=/^video/;class PageDependencyGraph$a{static getNetworkInitiators(e){if(!e.initiator)return[];if(e.initiator.url)return[e.initiator.url];if("script"===e.initiator.type){const t=new Set;let r=e.initiator.stack;for(;r;){const e=r.callFrames||[];for(const r of e)r.url&&t.add(r.url);r=r.parent}return Array.from(t)}return[]}static getNetworkNodeOutput(e){const t=[],r=new Map,a=new Map,n=new Map;return e.forEach((e=>{if(Qv.test(e.mimeType))return;for(;r.has(e.requestId);)e.requestId+=":duplicate";const i=new Hv(e);t.push(i);const o=a.get(e.url)||[];if(o.push(i),r.set(e.requestId,i),a.set(e.url,o),
|
571
|
+
e.frameId&&e.resourceType===Jv.TYPES.Document&&e.documentURL===e.url){const t=n.has(e.frameId)?null:i;n.set(e.frameId,t)}})),{nodes:t,idToNodeMap:r,urlToNodeMap:a,frameIdToNodeMap:n}}static getCPUNodes({mainThreadEvents:e}){const t=[];let r=0;for(Kv.assertHasToplevelEvents(e);r<e.length;){const a=e[r];if(r++,!Kv.isScheduleableTask(a)||!a.dur)continue;const n=[];for(const t=a.ts+a.dur;r<e.length&&e[r].ts<t;r++)n.push(e[r]);t.push(new Gv(a,n))}return t}static linkNetworkNodes(e,t){t.nodes.forEach((r=>{const a=r.record.initiatorRequest||e.record,n=t.idToNodeMap.get(a.requestId)||e,i=!n.isDependentOn(r)&&r.canDependOn(n),o=PageDependencyGraph$a.getNetworkInitiators(r.record);if(o.length?o.forEach((e=>{const a=t.urlToNodeMap.get(e)||[];1===a.length&&a[0].startTime<=r.startTime&&!a[0].isDependentOn(r)?r.addDependency(a[0]):i&&n.addDependent(r)})):i&&n.addDependent(r),r!==e&&0===r.getDependencies().length&&r.canDependOn(e)&&r.addDependency(e),!r.record.redirects)return
|
572
572
|
;const s=[...r.record.redirects,r.record];for(let e=1;e<s.length;e++){const r=t.idToNodeMap.get(s[e-1].requestId),a=t.idToNodeMap.get(s[e].requestId);a&&r&&a.addDependency(r)}}))}static linkCPUNodes(e,t,r){const a=new Set([Jv.TYPES.XHR,Jv.TYPES.Fetch,Jv.TYPES.Script]);function addDependentNetworkRequest(e,r){const n=t.idToNodeMap.get(r);if(!n||n.startTime<=e.startTime)return;const{record:i}=n,o=i.resourceType||i.redirectDestination?.resourceType;a.has(o)&&e.addDependent(n)}function addDependencyOnFrame(e,r){if(!r)return;const a=t.frameIdToNodeMap.get(r);a&&(a.startTime>=e.startTime||e.addDependency(a))}function addDependencyOnUrl(e,r){if(!r)return;const a=t.urlToNodeMap.get(r)||[];let n=null,i=1/0;for(const t of a){if(e.startTime<=t.startTime)return;const r=e.startTime-t.endTime;r>=-1e5&&r<i&&(n=t,i=r)}n&&e.addDependency(n)}const n=new Map;for(const t of r){for(const e of t.childEvents){if(!e.args.data)continue
|
573
573
|
;const r=e.args.data.url,a=(e.args.data.stackTrace||[]).map((e=>e.url)).filter(Boolean);switch(e.name){case"TimerInstall":n.set(e.args.data.timerId,t),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"TimerFire":{const r=n.get(e.args.data.timerId);if(!r||r.endTime>t.startTime)break;r.addDependent(t);break}case"InvalidateLayout":case"ScheduleStyleRecalculation":addDependencyOnFrame(t,e.args.data.frame),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"EvaluateScript":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,r),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"XHRReadyStateChange":if(4!==e.args.data.readyState)break;addDependencyOnUrl(t,r),a.forEach((e=>addDependencyOnUrl(t,e)));break;case"FunctionCall":case"v8.compile":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,r);break;case"ParseAuthorStyleSheet":addDependencyOnFrame(t,e.args.data.frame),addDependencyOnUrl(t,e.args.data.styleSheetUrl);break;case"ResourceSendRequest":
|
574
574
|
addDependencyOnFrame(t,e.args.data.frame),addDependentNetworkRequest(t,e.args.data.requestId),a.forEach((e=>addDependencyOnUrl(t,e)))}}0===t.getNumberOfDependencies()&&t.canDependOn(e)&&t.addDependency(e)}let i=!1,o=!1,s=!1;for(const e of r){let t=!1;!i&&e.childEvents.some((e=>"Layout"===e.name))&&(t=i=!0),!o&&e.childEvents.some((e=>"Paint"===e.name))&&(t=o=!0),!s&&e.childEvents.some((e=>"ParseHTML"===e.name))&&(t=s=!0),t||e.event.dur>=1e4||(1===e.getNumberOfDependencies()||e.getNumberOfDependents()<=1)&&PageDependencyGraph$a._pruneNode(e)}}static _pruneNode(e){const t=e.getDependencies(),r=e.getDependents();for(const a of t){e.removeDependency(a);for(const e of r)a.addDependent(e)}for(const t of r)e.removeDependent(t)}static createGraph(e,t){const r=PageDependencyGraph$a.getNetworkNodeOutput(t),a=PageDependencyGraph$a.getCPUNodes(e),n=Yv.findMainDocument(t),i=r.idToNodeMap.get(n.requestId);if(!i)throw new Error("mainDocumentNode not found.");const o=i.record.redirects?.[0];let s
|
575
|
-
;if(o){if(s=o&&r.idToNodeMap.get(o.requestId),!s)throw new Error("rootNode not found")}else s=i;if(PageDependencyGraph$a.linkNetworkNodes(s,r),PageDependencyGraph$a.linkCPUNodes(s,r,a),i.setIsMainDocument(!0),
|
575
|
+
;if(o){if(s=o&&r.idToNodeMap.get(o.requestId),!s)throw new Error("rootNode not found")}else s=i;if(PageDependencyGraph$a.linkNetworkNodes(s,r),PageDependencyGraph$a.linkCPUNodes(s,r,a),i.setIsMainDocument(!0),Hv.hasCycle(s))throw new Error("Invalid dependency graph created, cycle detected");return s}static printGraph(e,t=100){function padRight(e,t,r=" "){return e+r.repeat(Math.max(t-e.length,0))}const r=[];e.traverse((e=>r.push(e))),r.sort(((e,t)=>e.startTime-t.startTime));const a=r[0].startTime,n=(r.reduce(((e,t)=>Math.max(e,t.endTime)),0)-a)/t;r.forEach((e=>{const r=Math.round((e.startTime-a)/n),i=Math.ceil((e.endTime-e.startTime)/n),o=padRight("",r)+padRight("",i,"="),s=e.record?e.record.url:e.type;console.log(padRight(o,t),`| ${s.slice(0,30)}`)}))}static async compute_(e,t){const r=e.trace,a=e.devtoolsLog,[n,i]=await Promise.all([Xv.request(r,t),Zv.request(a,t)]);return PageDependencyGraph$a.createGraph(n,i)}}var eb=Wv(PageDependencyGraph$a,["devtoolsLog","trace"])
|
576
576
|
;const tb=Zc,rb=Ki,ab=Yp,nb=Xp,ib=eb,ob=Dl;var sb=class LanternMetricArtifact$1{static getScriptUrls(e,t){const r=new Set;return e.traverse((e=>{e.type!==tb.TYPES.CPU&&e.record.resourceType===rb.TYPES.Script&&(t&&!t(e)||r.add(e.record.url))})),r}static get COEFFICIENTS(){throw new Error("COEFFICIENTS unimplemented!")}static getScaledCoefficients(e){return this.COEFFICIENTS}static getOptimisticGraph(e,t){throw new Error("Optimistic graph unimplemented!")}static getPessimisticGraph(e,t){throw new Error("Pessmistic graph unimplemented!")}static getEstimateFromSimulation(e,t){return e}static async computeMetricWithGraphs(e,t,r){const a=e.gatherContext||{gatherMode:"navigation"},{trace:n,devtoolsLog:i,settings:o}=e;if("navigation"!==a.gatherMode)throw new Error("Lantern metrics can only be computed on navigations");const s=this.name.replace("Lantern",""),c=await ib.request({trace:n,devtoolsLog:i},t),l=await ab.request(n,t),u=await nb.request(l,t),d=e.simulator||await ob.request({
|
577
577
|
devtoolsLog:i,settings:o},t),m=this.getOptimisticGraph(c,u),p=this.getPessimisticGraph(c,u);let h={label:`optimistic${s}`};const f=d.simulate(m,h);h={label:`optimisticFlex${s}`,flexibleOrdering:!0};const y=d.simulate(m,h);h={label:`pessimistic${s}`};const v=d.simulate(p,h),b=this.getEstimateFromSimulation(f.timeInMs<y.timeInMs?f:y,{...r,optimistic:!0}),w=this.getEstimateFromSimulation(v,{...r,optimistic:!1}),S=this.getScaledCoefficients(d.rtt),T=S.intercept>0?Math.min(1,b.timeInMs/1e3):1;return{timing:S.intercept*T+S.optimistic*b.timeInMs+S.pessimistic*w.timeInMs,optimisticEstimate:b,pessimisticEstimate:w,optimisticGraph:m,pessimisticGraph:p}}static async compute_(e,t){return this.computeMetricWithGraphs(e,t)}};const cb=Ao,lb=sb,ub=Zc;var db=cb(class LanternFirstContentfulPaint$6 extends lb{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getBlockingNodeData(e,t,r,a){const n=new Map,i=[];e.traverse((e=>{if(e.type===ub.TYPES.CPU){
|
578
578
|
e.startTime<=t&&i.push(e);const r=e.getEvaluateScriptURLs();for(const t of r){const r=n.get(t)||e;n.set(t,e.startTime<r.startTime?e:r)}}})),i.sort(((e,t)=>e.startTime-t.startTime));const o=lb.getScriptUrls(e,(e=>e.endTime<=t&&r(e))),s=new Set,c=new Set;for(const e of o){const t=n.get(e);t&&(i.includes(t)?c.add(t.id):s.add(e))}const l=i.find((e=>e.didPerformLayout()));l&&c.add(l.id);const u=i.find((e=>e.childEvents.some((e=>"Paint"===e.name))));u&&c.add(u.id);const d=i.find((e=>e.childEvents.some((e=>"ParseHTML"===e.name))));return d&&c.add(d.id),a&&i.filter(a).forEach((e=>c.add(e.id))),{definitelyNotRenderBlockingScriptUrls:s,blockingCpuNodeIds:c}}static getFirstPaintBasedGraph(e,t,r,a){const{definitelyNotRenderBlockingScriptUrls:n,blockingCpuNodeIds:i}=this.getBlockingNodeData(e,t,r,a);return e.cloneWithRelationships((e=>{if(e.type===ub.TYPES.NETWORK){if((e.endTime>t||e.startTime>t)&&!e.isMainDocument())return!1;const a=e.record.url;return!n.has(a)&&r(e)}return i.has(e.id)}))}
|
@@ -590,10 +590,10 @@ return e.lineNumber!==t.sourceLineNumber?e.lineNumber-t.sourceLineNumber:e.colum
|
|
590
590
|
constructor(e,t){this.content=e,this.reverseMappings=t}}}(TextSourceMap=t.TextSourceMap||(t.TextSourceMap={})),e.exports=TextSourceMap}(Nb,Nb.exports);const Mb={TextSourceMap:Nb.exports};Mb.TextSourceMap.prototype.computeLastGeneratedColumns=function(){const e=this.mappings();if(!e.length||void 0===e[0].lastColumnNumber)for(let t=0;t<e.length-1;t++){const r=e[t],a=e[t+1];r.lineNumber===a.lineNumber&&(r.lastColumnNumber=a.columnNumber)}};var Pb=Mb;const Ob=on.default,Fb=Ao,Ub=Pb;function computeGeneratedFileSizes(e,t){const r=t.split("\n"),a={},n=t.length;let i=n;e.computeLastGeneratedColumns();for(const t of e.mappings()){const n=t.sourceURL,o=t.lineNumber,s=t.columnNumber,c=t.lastColumnNumber;if(!n)continue;const l=r[o];if(null==l){const t=`${e.url()} mapping for line out of bounds: ${o+1}`;return Ob.error("JSBundles",t),{errorMessage:t}}if(s>l.length){const t=`${e.url()} mapping for column out of bounds: ${o+1}:${s}`;return Ob.error("JSBundles",t),{errorMessage:t}}let u=0
|
591
591
|
;if(void 0!==c){if(c>l.length){const t=`${e.url()} mapping for last column out of bounds: ${o+1}:${c}`;return Ob.error("JSBundles",t),{errorMessage:t}}u=c-s}else u=l.length-s+1;a[n]=(a[n]||0)+u,i-=u}return{files:a,unmappedBytes:i,totalBytes:n}}var jb=Fb(class JSBundles{static async compute_(e){const{SourceMaps:t,ScriptElements:r}=e,a=[];for(const e of t){if(!e.map)continue;const{scriptUrl:t,map:n}=e;if(!n.mappings)continue;const i=r.find((e=>e.src===t));if(!i)continue;const o=e.scriptUrl||"compiled.js",s=e.sourceMapUrl||"compiled.js.map",c=new Ub.TextSourceMap(o,s,n),l={rawMap:n,script:i,map:c,sizes:computeGeneratedFileSizes(c,i?.content?i.content:"")};a.push(l)}return a}},["ScriptElements","SourceMaps"]);const Bb=Ao,$b=jb;class ModuleDuplication$2{static normalizeSource(e){const t=(e=e.replace(/\?$/,"")).lastIndexOf("node_modules");return-1!==t&&(e=e.substring(t)),e}static _shouldIgnoreSource(e){
|
592
592
|
return!!e.includes("webpack/bootstrap")||(!!e.includes("(webpack)/buildin")||!!e.includes("external "))}static _normalizeAggregatedData(e){for(const[t,r]of e.entries()){let a=r;if(a.sort(((e,t)=>t.resourceSize-e.resourceSize)),a.length>1){const e=a[0].resourceSize;a=a.filter((t=>t.resourceSize/e>=.1))}a=a.filter((e=>e.resourceSize>=512)),a.length>1?e.set(t,a):e.delete(t)}}static async compute_(e,t){const r=await $b.request(e,t),a=new Map;for(const{rawMap:e,sizes:t}of r){if("errorMessage"in t)continue;const r=[];a.set(e,r);for(let a=0;a<e.sources.length;a++){if(this._shouldIgnoreSource(e.sources[a]))continue;const n=(e.sourceRoot||"")+e.sources[a],i=t.files[n];r.push({source:ModuleDuplication$2.normalizeSource(e.sources[a]),resourceSize:i})}}const n=new Map;for(const{rawMap:e,script:t}of r){const r=a.get(e);if(r)for(const e of r){let r=n.get(e.source);r||(r=[],n.set(e.source,r)),r.push({scriptUrl:t.src||"",resourceSize:e.resourceSize})}}return this._normalizeAggregatedData(n),n}}
|
593
|
-
var qb=Bb(ModuleDuplication$2,["ScriptElements","SourceMaps"]);var zb={getRequestForScript:function getRequestForScript$3(e,t){if(!t)return;let r=t.requestId&&e.find((e=>e.requestId===t.requestId));for(r||(r=e.find((e=>e.url===t.src)));r?.redirectDestination;)r=r.redirectDestination;return r}};const Vb=Ib,Wb=qb,
|
593
|
+
var qb=Bb(ModuleDuplication$2,["ScriptElements","SourceMaps"]);var zb={getRequestForScript:function getRequestForScript$3(e,t){if(!t)return;let r=t.requestId&&e.find((e=>e.requestId===t.requestId));for(r||(r=e.find((e=>e.url===t.src)));r?.redirectDestination;)r=r.redirectDestination;return r}};const Vb=Ib,Wb=qb,Hb=oi,{getRequestForScript:Gb}=zb,Yb={title:"Remove duplicate modules in JavaScript bundles",description:"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. "},Kb=Hb.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/duplicated-javascript.js",Yb);function indexOfOrEnd(e,t,r=0){const a=e.indexOf(t,r);return-1===a?e.length:a}class DuplicatedJavascript extends Vb{static get meta(){return{id:"duplicated-javascript",title:Kb(Yb.title),description:Kb(Yb.description),scoreDisplayMode:Vb.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","SourceMaps","ScriptElements","GatherContext","URL"]}}
|
594
594
|
static _getNodeModuleName(e){const t=e.split("node_modules/"),r=indexOfOrEnd(e=t[t.length-1],"/");return"@"===e[0]?e.slice(0,indexOfOrEnd(e,"/",r+1)):e.slice(0,r)}static async _getDuplicationGroupedByNodeModules(e,t){const r=await Wb.request(e,t),a=new Map;for(const[e,t]of r.entries()){if(!e.includes("node_modules")){a.set(e,t);continue}const r="node_modules/"+DuplicatedJavascript._getNodeModuleName(e),n=a.get(r)||[];for(const{scriptUrl:e,resourceSize:r}of t){let t=n.find((t=>t.scriptUrl===e));t||(t={scriptUrl:e,resourceSize:0},n.push(t)),t.resourceSize+=r}a.set(r,n)}for(const e of r.values())e.sort(((e,t)=>t.resourceSize-e.resourceSize));return a}static _estimateTransferRatio(e,t){return Vb.estimateTransferSize(e,t,"Script")/t}static async audit_(e,t,r){const a=r.options?.ignoreThresholdInBytes||1024,n=await DuplicatedJavascript._getDuplicationGroupedByNodeModules(e,r),i=new Map,o=[];let s=0;const c=new Set,l=new Map;for(const[r,u]of n.entries()){const n=[];let d=0
|
595
|
-
;for(let r=0;r<u.length;r++){const a=u[r],o=a.scriptUrl;let s=i.get(o);if(void 0===s){const r=
|
596
|
-
label:Kb(
|
595
|
+
;for(let r=0;r<u.length;r++){const a=u[r],o=a.scriptUrl;let s=i.get(o);if(void 0===s){const r=Gb(t,{src:o}),a=e.ScriptElements.find((e=>e.src===o));if(!a||null===a.content)continue;const n=a.content.length;s=DuplicatedJavascript._estimateTransferRatio(r,n),i.set(o,s)}if(void 0===s)continue;const c=Math.round(a.resourceSize*s);n.push({url:o,sourceTransferBytes:c}),0!==r&&(d+=c,l.set(o,(l.get(o)||0)+c))}if(d<=a){s+=d;for(const e of n)c.add(e.url)}else o.push({source:r,wastedBytes:d,url:"",totalBytes:0,subItems:{type:"subitems",items:n}})}s>a&&o.push({source:"Other",wastedBytes:s,url:"",totalBytes:0,subItems:{type:"subitems",items:Array.from(c).map((e=>({url:e})))}});return{items:o,headings:[{key:"source",valueType:"code",subItemsHeading:{key:"url",valueType:"url"},label:Kb(Hb.UIStrings.columnSource)},{key:null,valueType:"bytes",subItemsHeading:{key:"sourceTransferBytes"},granularity:.05,label:Kb(Hb.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",granularity:.05,
|
596
|
+
label:Kb(Hb.UIStrings.columnWastedBytes)}],wastedBytesByUrl:l}}}Bv.exports=DuplicatedJavascript,Bv.exports.UIStrings=Yb;var Jb={exports:{}};const Xb=Ki,Zb=Ib,Qb=oi,ew={title:"Use video formats for animated content",description:"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://web.dev/efficient-animated-content/)"},tw=Qb.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/efficient-animated-content.js",ew);class EfficientAnimatedContent extends Zb{static get meta(){return{id:"efficient-animated-content",title:tw(ew.title),description:tw(ew.description),scoreDisplayMode:Zb.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces","GatherContext"]}}static getPercentSavings(e){return Math.round(29.1*Math.log10(e)-100.7)/100}static audit_(e,t){return{
|
597
597
|
items:t.filter((e=>"image/gif"===e.mimeType&&e.resourceType===Xb.TYPES.Image&&(e.resourceSize||0)>102400)).map((e=>{const t=e.resourceSize||0;return{url:e.url,totalBytes:t,wastedBytes:Math.round(t*EfficientAnimatedContent.getPercentSavings(t))}})),headings:[{key:"url",valueType:"url",label:tw(Qb.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:tw(Qb.UIStrings.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:tw(Qb.UIStrings.columnWastedBytes)}]}}}Jb.exports=EfficientAnimatedContent,Jb.exports.UIStrings=ew;var rw={exports:{}};const aw=/:\/\/(\S*?)(:\d+)?(\/|$)/,nw=/([a-z0-9.-]+\.[a-z0-9]+|localhost)/i,iw=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,ow=/[^.]+\.([^.]+|(gov|com|co|ne)\.\w{2})$/i;function getDomainFromOriginOrURL(e){return"string"!=typeof e||e.length>1e4||e.startsWith("data:")?null:aw.test(e)?e.match(aw)[1]:nw.test(e)?e.match(nw)[0]:null}function getRootDomain(e){const t=getDomainFromOriginOrURL(e);if(!t)return null;if(iw.test(t))return t
|
598
598
|
;const r=t.match(ow);return r&&r[0]||t}function sliceSubdomainFromDomain(e,t){return e.length<=t.length?e:e.split(".").slice(1).join(".")}function getEntityInDataset(e,t,r,a){const n=getDomainFromOriginOrURL(a),i=getRootDomain(n);if(n&&i){if(e.has(n))return e.get(n);for(let e=n;e.length>i.length;e=sliceSubdomainFromDomain(e,i))if(t.has(e))return t.get(e);return r.has(i)?r.get(i):void 0}}function getProductInDataset(e,t,r,a){const n=getEntityInDataset(e,t,r,a),i=n&&n.products;if(i&&"string"==typeof a)for(const e of i)for(const t of e.urlPatterns){if(t instanceof RegExp&&t.test(a))return e;if("string"==typeof t&&a.includes(t))return e}}var sw={createAPIFromDataset:function createAPIFromDataset$1(e){const t=function cloneEntities(e){return e.map((e=>{const t={company:e.name,...e},r=(e.products||[]).map((e=>({company:t.company,categories:t.categories,facades:[],...e,urlPatterns:(e.urlPatterns||[]).map((e=>e.startsWith("REGEXP:")?new RegExp(e.slice("REGEXP:".length)):e))})))
|
599
599
|
;return t.products=r,t}))}(e),r=new Map,a=new Map,n=new Map;for(const e of t){e.totalExecutionTime=Number(e.totalExecutionTime)||0,e.totalOccurrences=Number(e.totalOccurrences)||0,e.averageExecutionTime=e.totalExecutionTime/e.totalOccurrences;for(const t of e.domains){if(r.has(t)){const a=r.get(t);throw new Error(`Duplicate domain ${t} (${e.name} and ${a.name})`)}r.set(t,e);const i=getRootDomain(t);if(t.startsWith("*.")){const r=t.slice(2);r===i?a.set(i,e):n.set(r,e)}}}for(const[e,t]of a.entries())t||a.delete(e);return{getEntity:getEntityInDataset.bind(null,r,n,a),getProduct:getProductInDataset.bind(null,r,n,a),getRootDomain,entities:t}}};const{createAPIFromDataset:cw}=sw;const lw=cw([{name:"Google Analytics",company:"Google",homepage:"https://marketingplatform.google.com/about/analytics/",categories:["analytics"],domains:["*.google-analytics.com","*.urchin.com","analytics.google.com"]},{name:"Google Tag Manager",company:"Google",
|
@@ -722,9 +722,9 @@ const a=r.timestamps.firstContentfulPaint/1e3,isLongEnoughQuietPeriod=e=>e.end>a
|
|
722
722
|
;const n=Cw.getMainThreadTopLevelEvents(t).filter((e=>e.duration>=50)),i=Interactive$4.findOverlappingQuietPeriods(n,a,r).cpuQuietPeriod,o=1e3*Math.max(i.start,r.timestamps.firstContentfulPaint/1e3,r.timestamps.domContentLoaded/1e3),s=(o-r.timestamps.timeOrigin)/1e3;return Promise.resolve({timing:s,timestamp:o})}}var Lw=Aw(Interactive$4,["devtoolsLog","gatherContext","settings","simulator","trace"]);const Mw=Ib,Pw=Ki,Ow=Jl,Fw=ji,Uw=oi,jw=Lw,Bw=Yp,$w={title:"Defer offscreen images",description:"Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://web.dev/offscreen-images/)."},qw=Uw.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/offscreen-images.js",$w);class OffscreenImages extends Mw{static get meta(){return{id:"offscreen-images",title:qw($w.title),description:qw($w.description),scoreDisplayMode:Mw.SCORING_MODES.NUMERIC,supportedModes:["navigation"],
|
723
723
|
requiredArtifacts:["ImageElements","ViewportDimensions","GatherContext","devtoolsLogs","traces"]}}static computeVisiblePixels(e,t){const r=t.innerWidth,a=t.innerHeight,n=3*t.innerHeight,i=Math.max(e.top,-100),o=Math.min(e.right,r+100),s=Math.min(e.bottom,a+n),c=Math.max(e.left,-100);return Math.max(o-c,0)*Math.max(s-i,0)}static computeWaste(e,t,r){const a=r.find((t=>t.url===e.src));if(!a)return null;if("lazy"===e.loading||"eager"===e.loading)return null;const n=Fw.elideDataURI(e.src),i=e.displayedWidth*e.displayedHeight,o=this.computeVisiblePixels(e.clientRect,t),s=0===i?1:1-o/i,c=Pw.getResourceSizeOnNetwork(a),l=Math.round(c*s);return Number.isFinite(s)?{node:Mw.makeNodeItem(e.node),url:n,requestStartTime:a.startTime,totalBytes:c,wastedBytes:l,wastedPercent:100*s}:new Error(`Invalid image sizing information ${n}`)}static filterLanternResults(e,t){const r=t.pessimisticEstimate.nodeTimings;let a=0;const n=new Map
|
724
724
|
;for(const[e,t]of r)"cpu"===e.type&&t.duration>=50?a=Math.max(a,t.startTime):"network"===e.type&&n.set(e.record.url,t.startTime);return e.filter((e=>{if(e.wastedBytes<2048)return!1;if(e.wastedPercent<75)return!1;return(n.get(e.url)||0)<a-50}))}static filterObservedResults(e,t){return e.filter((e=>!(e.wastedBytes<2048)&&(!(e.wastedPercent<75)&&e.requestStartTime<t/1e6-.05)))}static computeWasteWithTTIGraph(e,t,r){return super.computeWasteWithTTIGraph(e,t,r,{includeLoad:!1})}static async audit_(e,t,r){const a=e.ImageElements,n=e.ViewportDimensions,i=e.GatherContext,o=e.traces[Mw.DEFAULT_PASS],s=e.devtoolsLogs[Mw.DEFAULT_PASS],c=[],l=new Map;for(const e of a){const r=OffscreenImages.computeWaste(e,n,t);if(null===r)continue;if(r instanceof Error){c.push(r.message),Ow.captureException(r,{tags:{audit:this.meta.id},level:"warning"});continue}const a=l.get(r.url);(!a||a.wastedBytes>r.wastedBytes)&&l.set(r.url,r)}const u=r.settings;let d;const m=Array.from(l.values());try{const e={trace:o,
|
725
|
-
devtoolsLog:s,gatherContext:i,settings:u},t=await jw.request(e,r),a=t;d="simulate"===r.settings.throttlingMethod?OffscreenImages.filterLanternResults(m,a):OffscreenImages.filterObservedResults(m,t.timestamp)}catch(e){if("simulate"===r.settings.throttlingMethod)throw e;d=OffscreenImages.filterObservedResults(m,await Bw.request(o,r).then((e=>e.timestamps.traceEnd)))}return{warnings:c,items:d,headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:qw(Uw.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnWastedBytes)}]}}}vw.exports=OffscreenImages,vw.exports.UIStrings=$w;var zw={exports:{}};const Vw=Ao,Ww=Ib,
|
726
|
-
networkRecord:r[t.header.sourceURL]},t),e)),{})}static indexUsedRules(e,t){e.forEach((e=>{const r=t[e.styleSheetId];r&&e.used&&r.usedRules.push(e)}))}static computeUsage(e){let t=0;const r=e.content.length;for(const r of e.usedRules)t+=r.endOffset-r.startOffset;const a=Ww.estimateTransferSize(e.networkRecord,r,"Stylesheet"),n=(r-t)/r;return{wastedBytes:Math.round(n*a),wastedPercent:100*n,totalBytes:a}}static determineContentPreview(e){let t=(e||"").slice(0,500).replace(/( {2,}|\t)+/g," ").replace(/\n\s+}/g,"\n}").trim();if(t.length>
|
727
|
-
const{CSSUsage:r,URL:a,devtoolsLog:n}=e,i=await
|
725
|
+
devtoolsLog:s,gatherContext:i,settings:u},t=await jw.request(e,r),a=t;d="simulate"===r.settings.throttlingMethod?OffscreenImages.filterLanternResults(m,a):OffscreenImages.filterObservedResults(m,t.timestamp)}catch(e){if("simulate"===r.settings.throttlingMethod)throw e;d=OffscreenImages.filterObservedResults(m,await Bw.request(o,r).then((e=>e.timestamps.traceEnd)))}return{warnings:c,items:d,headings:[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:qw(Uw.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnResourceSize)},{key:"wastedBytes",valueType:"bytes",label:qw(Uw.UIStrings.columnWastedBytes)}]}}}vw.exports=OffscreenImages,vw.exports.UIStrings=$w;var zw={exports:{}};const Vw=Ao,Ww=Ib,Hw=Lo,Gw=100;class UnusedCSS$3{static indexStylesheetsById(e,t){const r=t.filter((e=>e.resourceSize>0)).reduce(((e,t)=>(e[t.url]=t,e)),{});return e.reduce(((e,t)=>(e[t.header.styleSheetId]=Object.assign({usedRules:[],
|
726
|
+
networkRecord:r[t.header.sourceURL]},t),e)),{})}static indexUsedRules(e,t){e.forEach((e=>{const r=t[e.styleSheetId];r&&e.used&&r.usedRules.push(e)}))}static computeUsage(e){let t=0;const r=e.content.length;for(const r of e.usedRules)t+=r.endOffset-r.startOffset;const a=Ww.estimateTransferSize(e.networkRecord,r,"Stylesheet"),n=(r-t)/r;return{wastedBytes:Math.round(n*a),wastedPercent:100*n,totalBytes:a}}static determineContentPreview(e){let t=(e||"").slice(0,500).replace(/( {2,}|\t)+/g," ").replace(/\n\s+}/g,"\n}").trim();if(t.length>Gw){const e=t.indexOf("{"),r=t.indexOf("}");if(-1===e||-1===r||e>r||e>Gw)t=t.slice(0,Gw)+"...";else if(r<Gw)t=t.slice(0,r+1)+" ...";else{const r=t.slice(0,Gw).lastIndexOf(";");t=r<e?t.slice(0,Gw)+"... } ...":t.slice(0,r+1)+" ... } ..."}}return t}static mapSheetToResult(e,t){let r=e.header.sourceURL;if(!r||r===t){r=UnusedCSS$3.determineContentPreview(e.content)}return{url:r,...UnusedCSS$3.computeUsage(e)}}static async compute_(e,t){
|
727
|
+
const{CSSUsage:r,URL:a,devtoolsLog:n}=e,i=await Hw.request(n,t),o=UnusedCSS$3.indexStylesheetsById(r.stylesheets,i);UnusedCSS$3.indexUsedRules(r.rules,o);return Object.keys(o).map((e=>UnusedCSS$3.mapSheetToResult(o[e],a.finalUrl)))}}var Yw=Vw(UnusedCSS$3,["CSSUsage","URL","devtoolsLog"]);const Kw=Ao,Jw=_w,Xw=db;var Zw=Kw(class FirstContentfulPaint$3 extends Jw{static computeSimulatedMetric(e,t){const r=Jw.getMetricComputationInput(e);return Xw.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaint,timestamp:t.timestamps.firstContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Qw=kc,eS=oi,tS=Zc,rS=Ib,aS=Yw,nS=Ki,iS=Yp,oS=Xp,sS=Dl,cS=Zw,lS={title:"Eliminate render-blocking resources",
|
728
728
|
description:"Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://web.dev/render-blocking-resources/)."},uS=eS.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/render-blocking-resources.js",lS);function computeStackSpecificTiming(e,t,r){const a={...t};return r.some((e=>"amp"===e.id))&&e.type===tS.TYPES.NETWORK&&e.record.resourceType===nS.TYPES.Stylesheet&&t.endTime>2100&&(a.endTime=Math.max(t.startTime,2100),a.duration=a.endTime-a.startTime),a}class RenderBlockingResources extends Qw{static get meta(){return{id:"render-blocking-resources",title:uS(lS.title),supportedModes:["navigation"],scoreDisplayMode:Qw.SCORING_MODES.NUMERIC,description:uS(lS.description),requiredArtifacts:["URL","TagsBlockingFirstPaint","traces","devtoolsLogs","CSSUsage","GatherContext","Stacks"]}}static async computeResults(e,t){
|
729
729
|
const r=e.GatherContext,a=e.traces[Qw.DEFAULT_PASS],n=e.devtoolsLogs[Qw.DEFAULT_PASS],i={devtoolsLog:n,settings:t.settings},o=await iS.request(a,t),s=await oS.request(o,t),c=await sS.request(i,t),l=await RenderBlockingResources.computeWastedCSSBytes(e,t),u={trace:a,devtoolsLog:n,gatherContext:r,simulator:c,settings:{...t.settings,throttlingMethod:"simulate"}},d=await cS.request(u,t),m=s.timestamps.firstContentfulPaint/1e3,p=function getNodesAndTimingByUrl(e){const t={};return Array.from(e.keys()).forEach((r=>{if("network"!==r.type)return;const a=e.get(r);a&&(t[r.record.url]={node:r,nodeTiming:a})})),t}(d.optimisticEstimate.nodeTimings),h=[],f=new Set;for(const t of e.TagsBlockingFirstPaint){if(1e3*t.endTime>m)continue;if(!p[t.tag.url])continue;const{node:r,nodeTiming:a}=p[t.tag.url],n=computeStackSpecificTiming(r,a,e.Stacks);r.traverse((e=>f.add(e.id)));const i=Math.round(n.duration);i<50||h.push({url:t.tag.url,totalBytes:t.transferSize,wastedMs:i})}if(!h.length)return{results:h,
|
730
730
|
wastedMs:0};return{results:h,wastedMs:RenderBlockingResources.estimateSavingsWithGraphs(c,d.optimisticGraph,f,l,e.Stacks)}}static estimateSavingsWithGraphs(e,t,r,a,n){const{nodeTimings:i}=e.simulate(t),o=new Map(i);let s=0;const c=t.cloneWithRelationships((e=>{!function adjustNodeTimings(e,t,r){const a=e.get(t);if(!a)return;const n=computeStackSpecificTiming(t,a,r);a.duration-n.duration&&(t.traverse((t=>{e.delete(t)})),e.set(t,n))}(o,e,n);const t=r.has(e.id);if(e.type!==tS.TYPES.NETWORK)return!t;const i=e.record.resourceType===nS.TYPES.Stylesheet;if(t&&i){const t=a.get(e.record.url)||0;s+=(e.record.transferSize||0)-t}return!t}));if("network"!==c.type)throw new Error("minimalFCPGraph not a NetworkNode");const l=Math.max(...Array.from(Array.from(o).map((e=>e[1].endTime)))),u=c.record.transferSize,d=u||0;c.record.transferSize=d+s;const m=e.simulate(c).timeInMs;return c.record.transferSize=u,Math.round(Math.max(l-m,0))}static async computeWastedCSSBytes(e,t){const r=new Map;try{
|
@@ -741,10 +741,10 @@ label:RS(xS.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",
|
|
741
741
|
* 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
|
742
742
|
* 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.
|
743
743
|
*/const qS=Ao;class UnusedJavascriptSummary{static computeWaste(e){let t=0;for(const r of e.functions)t=Math.max(t,...r.ranges.map((e=>e.endOffset)));const r=new Uint8Array(t);for(const t of e.functions)for(const e of t.ranges)if(0===e.count)for(let t=e.startOffset;t<e.endOffset;t++)r[t]=1;let a=0;for(const e of r)a+=e;return{unusedByIndex:r,unusedLength:a,contentLength:t}}static createItem(e,t){const r=t.unused/t.content||0,a=Math.round(t.content*r);return{url:e,totalBytes:t.content,wastedBytes:a,wastedPercent:100*r}}static determineLengths(e){let t=0,r=0;for(const a of e)t+=a.unusedLength,r+=a.contentLength;return{content:r,unused:t}}static createSourceWastedBytes(e,t){if(!t.script.content)return;const r={},a=t.script.content.split("\n").map((e=>e.length));let n=0;const i=a.map((e=>{const t=n;return n+=e+1,t}));t.map.computeLastGeneratedColumns();for(const n of t.map.mappings()){let t=i[n.lineNumber];t+=n.columnNumber
|
744
|
-
;const o=void 0!==n.lastColumnNumber?n.lastColumnNumber-1:a[n.lineNumber];for(let a=n.columnNumber;a<=o;a++){if(e.every((e=>1===e.unusedByIndex[t]))){const e=n.sourceURL||"(unmapped)";r[e]=(r[e]||0)+1}t+=1}}const o=Object.entries(r).sort((([e,t],[r,a])=>a-t)),s={};for(const[e,t]of o)s[e]=t;return s}static async compute_(e){const{url:t,scriptCoverages:r,bundle:a}=e,n=r.map(UnusedJavascriptSummary.computeWaste),i=UnusedJavascriptSummary.determineLengths(n),o=UnusedJavascriptSummary.createItem(t,i);return a?{...o,sourcesWastedBytes:UnusedJavascriptSummary.createSourceWastedBytes(n,a)}:o}}var zS=qS(UnusedJavascriptSummary,["bundle","scriptCoverages","url"]);const VS=Ib,WS=zS,
|
745
|
-
},JS=
|
746
|
-
;if(0===u.wastedBytes||0===u.totalBytes)continue;const d=VS.estimateTransferSize(e,u.totalBytes,"Script")/u.totalBytes,m={url:u.url,totalBytes:Math.round(d*u.totalBytes),wastedBytes:Math.round(d*u.wastedBytes),wastedPercent:u.wastedPercent};if(m.wastedBytes<=n)continue;if(o.push(m),!l||"errorMessage"in l.sizes)continue;const p=l.sizes;if(u.sourcesWastedBytes){const e=Object.entries(u.sourcesWastedBytes).sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>{const r="(unmapped)"===e?p.unmappedBytes:p.files[e];return{source:e,unused:Math.round(t*d),total:Math.round(r*d)}})).filter((e=>e.unused>=i)),t=commonPrefix([...l.map.sourceInfos.keys()]);m.subItems={type:"subitems",items:e.map((({source:e,unused:r,total:a})=>({source:trimCommonPrefix(e,t),sourceBytes:a,sourceWastedBytes:r})))}}}return{items:o,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"source",valueType:"code"},label:JS(
|
747
|
-
label:JS(
|
744
|
+
;const o=void 0!==n.lastColumnNumber?n.lastColumnNumber-1:a[n.lineNumber];for(let a=n.columnNumber;a<=o;a++){if(e.every((e=>1===e.unusedByIndex[t]))){const e=n.sourceURL||"(unmapped)";r[e]=(r[e]||0)+1}t+=1}}const o=Object.entries(r).sort((([e,t],[r,a])=>a-t)),s={};for(const[e,t]of o)s[e]=t;return s}static async compute_(e){const{url:t,scriptCoverages:r,bundle:a}=e,n=r.map(UnusedJavascriptSummary.computeWaste),i=UnusedJavascriptSummary.determineLengths(n),o=UnusedJavascriptSummary.createItem(t,i);return a?{...o,sourcesWastedBytes:UnusedJavascriptSummary.createSourceWastedBytes(n,a)}:o}}var zS=qS(UnusedJavascriptSummary,["bundle","scriptCoverages","url"]);const VS=Ib,WS=zS,HS=jb,GS=oi,{getRequestForScript:YS}=zb,KS={title:"Reduce unused JavaScript",description:"Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn more](https://web.dev/unused-javascript/)."
|
745
|
+
},JS=GS.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/unused-javascript.js",KS),XS=20480,ZS=512;function commonPrefix(e){if(!e.length)return"";const t=e.reduce(((e,t)=>e>t?e:t));let r=e.reduce(((e,t)=>e>t?t:e));for(;!t.startsWith(r);)r=r.slice(0,-1);return r}function trimCommonPrefix(e,t){return t&&e.startsWith(t)?"…"+e.slice(t.length):e}$S.exports=class UnusedJavaScript extends VS{static get meta(){return{id:"unused-javascript",title:JS(KS.title),description:JS(KS.description),scoreDisplayMode:VS.SCORING_MODES.NUMERIC,requiredArtifacts:["JsUsage","ScriptElements","SourceMaps","GatherContext","devtoolsLogs","traces"]}}static async audit_(e,t,r){const a=await HS.request(e,r),{unusedThreshold:n=XS,bundleSourceUnusedThreshold:i=ZS}=r.options||{},o=[];for(const[s,c]of Object.entries(e.JsUsage)){const e=YS(t,{src:s});if(!e)continue;const l=a.find((e=>e.script.src===s)),u=await WS.request({url:s,scriptCoverages:c,bundle:l},r)
|
746
|
+
;if(0===u.wastedBytes||0===u.totalBytes)continue;const d=VS.estimateTransferSize(e,u.totalBytes,"Script")/u.totalBytes,m={url:u.url,totalBytes:Math.round(d*u.totalBytes),wastedBytes:Math.round(d*u.wastedBytes),wastedPercent:u.wastedPercent};if(m.wastedBytes<=n)continue;if(o.push(m),!l||"errorMessage"in l.sizes)continue;const p=l.sizes;if(u.sourcesWastedBytes){const e=Object.entries(u.sourcesWastedBytes).sort(((e,t)=>t[1]-e[1])).slice(0,5).map((([e,t])=>{const r="(unmapped)"===e?p.unmappedBytes:p.files[e];return{source:e,unused:Math.round(t*d),total:Math.round(r*d)}})).filter((e=>e.unused>=i)),t=commonPrefix([...l.map.sourceInfos.keys()]);m.subItems={type:"subitems",items:e.map((({source:e,unused:r,total:a})=>({source:trimCommonPrefix(e,t),sourceBytes:a,sourceWastedBytes:r})))}}}return{items:o,headings:[{key:"url",valueType:"url",subItemsHeading:{key:"source",valueType:"code"},label:JS(GS.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",subItemsHeading:{key:"sourceBytes"},
|
747
|
+
label:JS(GS.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",subItemsHeading:{key:"sourceWastedBytes"},label:JS(GS.UIStrings.columnWastedBytes)}]}}},$S.exports.UIStrings=KS;var QS={exports:{}};const eT=function parseCacheControl(e){if("string"!=typeof e)return null;var t={},r=e.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,(function(e,r,a,n){var i=a||n;return t[r]=!i||i.toLowerCase(),""}));if(t["max-age"])try{var a=parseInt(t["max-age"],10);if(isNaN(a))return null;t["max-age"]=a}catch(r){}return r?null:t},tT=kc,rT=Ki,aT=ji,nT=xc.linearInterpolation,iT=oi,oT=Lo,sT={title:"Uses efficient cache policy on static assets",failureTitle:"Serve static assets with an efficient cache policy",description:"A long cache lifetime can speed up repeat visits to your page. [Learn more](https://web.dev/uses-long-cache-ttl/).",
|
748
748
|
displayValue:"{itemCount, plural,\n =1 {1 resource found}\n other {# resources found}\n }"},cT=iT.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/uses-long-cache-ttl.js",sT);class CacheHeaders$1 extends tT{static get meta(){return{id:"uses-long-cache-ttl",title:cT(sT.title),failureTitle:cT(sT.failureTitle),description:cT(sT.description),scoreDisplayMode:tT.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs"]}}static get defaultOptions(){return{p10:28672,median:131072}}static getCacheHitProbability(e){const t=[0,.2,1,3,8,12,24,48,72,168,8760,1/0];if(12!==t.length)throw new Error("deciles 0-10 and 1 for overflow");const r=e/3600,a=t.findIndex((e=>e>=r));if(a===t.length-1)return 1;if(0===a)return 0;const n=t[a],i=t[a-1];return nT(i,(a-1)/10,n,a/10,r)}static computeCacheLifetimeInSeconds(e,t){if(t&&void 0!==t["max-age"])return t["max-age"];const r=e.get("expires");if(r){const e=new Date(r).getTime();return e?Math.ceil((e-Date.now())/1e3):0}return null}
|
749
749
|
static isCacheableAsset(e){const t=new Set([200,203,206]),r=new Set([rT.TYPES.Font,rT.TYPES.Image,rT.TYPES.Media,rT.TYPES.Script,rT.TYPES.Stylesheet]);return!rT.isNonNetworkRequest(e)&&(t.has(e.statusCode)&&r.has(e.resourceType||"Other"))}static shouldSkipRecord(e,t){return!(t||!(e.get("pragma")||"").includes("no-cache"))||!(!t||!(t["must-revalidate"]||t["no-cache"]||t["no-store"]||t["stale-while-revalidate"]||t.private))}static audit(e,t){const r=e.devtoolsLogs[tT.DEFAULT_PASS];return oT.request(r,t).then((e=>{const r=[];let a=0;for(const t of e){if(!CacheHeaders$1.isCacheableAsset(t))continue;const e=new Map;for(const r of t.responseHeaders||[])if(e.has(r.name.toLowerCase())){const t=e.get(r.name.toLowerCase());e.set(r.name.toLowerCase(),`${t}, ${r.value}`)}else e.set(r.name.toLowerCase(),r.value);const n=eT(e.get("cache-control"));if(this.shouldSkipRecord(e,n))continue;let i=CacheHeaders$1.computeCacheLifetimeInSeconds(e,n);if(null!==i&&(!Number.isFinite(i)||i<=0))continue;i=i||0
|
750
750
|
;const o=CacheHeaders$1.getCacheHitProbability(i);if(o>.925)continue;const s=aT.elideDataURI(t.url),c=t.transferSize||0,l=(1-o)*c;let u;a+=l,n&&(u={type:"debugdata",...n}),r.push({url:s,debugData:u,cacheLifetimeMs:1e3*i,cacheHitProbability:o,totalBytes:c,wastedBytes:l})}r.sort(((e,t)=>e.cacheLifetimeMs-t.cacheLifetimeMs||t.totalBytes-e.totalBytes||e.url.localeCompare(t.url)));const n=tT.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a),i=[{key:"url",itemType:"url",text:cT(iT.UIStrings.columnURL)},{key:"cacheLifetimeMs",itemType:"ms",text:cT(iT.UIStrings.columnCacheTTL),displayUnit:"duration"},{key:"totalBytes",itemType:"bytes",text:cT(iT.UIStrings.columnTransferSize),displayUnit:"kb",granularity:1}],o={wastedBytes:a},s=tT.makeTableDetails(i,r,o);return{score:n,numericValue:a,numericUnit:"byte",displayValue:cT(sT.displayValue,{itemCount:r.length}),details:s}}))}}QS.exports=CacheHeaders$1,QS.exports.UIStrings=sT;var lT={exports:{}};const uT=Ib,dT=ji,mT=oi,pT={
|
@@ -756,8 +756,8 @@ node:wT.makeNodeItem(e.node),url:o,totalBytes:c,wastedBytes:l,wastedPercent:100*
|
|
756
756
|
;const RT=kc,kT=fT.exports,DT=ji,CT=oi,IT={title:"Images were appropriate for their displayed size",failureTitle:"Images were larger than their displayed size",columnDisplayedDimensions:"Displayed dimensions",columnActualDimensions:"Actual dimensions"},NT=CT.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js",IT);gT.exports=class UsesResponsiveImagesSnapshot extends RT{static get meta(){return{id:"uses-responsive-images-snapshot",title:NT(IT.title),failureTitle:NT(IT.failureTitle),description:kT.str_(kT.UIStrings.description),supportedModes:["snapshot"],requiredArtifacts:["ImageElements","ViewportDimensions"]}}static async audit(e){let t=1;const r=[];for(const a of e.ImageElements){if(!a.naturalDimensions)continue;const n=a.naturalDimensions,i=kT.getDisplayedDimensions({...a,naturalWidth:n.width,naturalHeight:n.height},e.ViewportDimensions),o=n.width*n.height,s=i.width*i.height;o<=s||(o-s>1365&&(t=0),r.push({
|
757
757
|
node:RT.makeNodeItem(a.node),url:DT.elideDataURI(a.src),displayedDimensions:`${i.width}x${i.height}`,actualDimensions:`${n.width}x${n.height}`}))}const a=[{key:"node",itemType:"node",text:""},{key:"url",itemType:"url",text:NT(CT.UIStrings.columnURL)},{key:"displayedDimensions",itemType:"text",text:NT(IT.columnDisplayedDimensions)},{key:"actualDimensions",itemType:"text",text:NT(IT.columnActualDimensions)}];return{score:t,details:RT.makeTableDetails(a,r)}}},gT.exports.UIStrings=IT;var LT={exports:{}};const MT=Ib,PT=ji,OT=oi,FT={title:"Enable text compression",description:"Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more](https://web.dev/uses-text-compression/)."},UT=OT.createMessageInstanceIdFn("lighthouse-core/audits/byte-efficiency/uses-text-compression.js",FT);LT.exports=class ResponsesAreCompressed extends MT{static get meta(){return{id:"uses-text-compression",title:UT(FT.title),
|
758
758
|
description:UT(FT.description),scoreDisplayMode:MT.SCORING_MODES.NUMERIC,requiredArtifacts:["ResponseCompression","GatherContext","devtoolsLogs","traces"]}}static audit_(e){const t=e.ResponseCompression,r=[];t.forEach((e=>{if(!e.gzipSize||e.gzipSize<0)return;const t=e.resourceSize,a=e.gzipSize,n=t-a;if(1-a/t<.1||n<1400||e.transferSize<a)return;const i=PT.elideDataURI(e.url);r.find((t=>t.url===i&&t.totalBytes===e.resourceSize))||r.push({url:i,totalBytes:t,wastedBytes:n})}));const a=[{key:"url",valueType:"url",label:UT(OT.UIStrings.columnURL)},{key:"totalBytes",valueType:"bytes",label:UT(OT.UIStrings.columnTransferSize)},{key:"wastedBytes",valueType:"bytes",label:UT(OT.UIStrings.columnWastedBytes)}];return{items:r,headings:a}}},LT.exports.UIStrings=FT;var jT={exports:{}};const BT=kc,$T={title:"Content is sized correctly for the viewport",failureTitle:"Content is not sized correctly for the viewport",
|
759
|
-
description:"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://web.dev/content-width/).",explanation:"The viewport size of {innerWidth}px does not match the window size of {outerWidth}px."},qT=oi.createMessageInstanceIdFn("lighthouse-core/audits/content-width.js",$T);jT.exports=class ContentWidth extends BT{static get meta(){return{id:"content-width",title:qT($T.title),failureTitle:qT($T.failureTitle),description:qT($T.description),requiredArtifacts:["ViewportDimensions"]}}static audit(e,t){const r=e.ViewportDimensions.innerWidth===e.ViewportDimensions.outerWidth;if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};let a;return r||(a=qT($T.explanation,{innerWidth:e.ViewportDimensions.innerWidth,outerWidth:e.ViewportDimensions.outerWidth})),{score:Number(r),explanation:a}}},jT.exports.UIStrings=$T;var zT={exports:{}};const VT=Ao,WT=Fo,
|
760
|
-
static async compute_(e,t){const r=e.URL.finalUrl,a=await
|
759
|
+
description:"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://web.dev/content-width/).",explanation:"The viewport size of {innerWidth}px does not match the window size of {outerWidth}px."},qT=oi.createMessageInstanceIdFn("lighthouse-core/audits/content-width.js",$T);jT.exports=class ContentWidth extends BT{static get meta(){return{id:"content-width",title:qT($T.title),failureTitle:qT($T.failureTitle),description:qT($T.description),requiredArtifacts:["ViewportDimensions"]}}static audit(e,t){const r=e.ViewportDimensions.innerWidth===e.ViewportDimensions.outerWidth;if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};let a;return r||(a=qT($T.explanation,{innerWidth:e.ViewportDimensions.innerWidth,outerWidth:e.ViewportDimensions.outerWidth})),{score:Number(r),explanation:a}}},jT.exports.UIStrings=$T;var zT={exports:{}};const VT=Ao,WT=Fo,HT=Lo;var GT=VT(class MainResource$h{
|
760
|
+
static async compute_(e,t){const r=e.URL.finalUrl,a=await HT.request(e.devtoolsLog,t),n=WT.findMainDocument(a,r);if(!n)throw new Error("Unable to identify the main resource");return n}},["URL","devtoolsLog"]);const YT=Ao,KT=Ki,JT=GT,XT=eb;class CriticalRequestChains$2{static isCritical(e,t){if(!t)throw new Error("mainResource not provided");if(e.requestId===t.requestId)return!0;if(e.isLinkPreload)return!1;for(;e.redirectDestination;)e=e.redirectDestination;const r=e.resourceType===KT.TYPES.Document&&e.frameId!==t.frameId;return!([KT.TYPES.Image,KT.TYPES.XHR,KT.TYPES.Fetch,KT.TYPES.EventSource].includes(e.resourceType||"Other")||r||e.mimeType&&e.mimeType.startsWith("image/"))&&(!!e.initiatorRequest&&["VeryHigh","High","Medium"].includes(e.priority))}static extractChainsFromGraph(e,t){const r={};const a=new Set;return t.traverse(((t,n)=>{if(a.add(t),"network"!==t.type)return;if(!CriticalRequestChains$2.isCritical(t.record,e))return
|
761
761
|
;const i=n.filter((e=>"network"===e.type)).reverse().map((e=>e.record));i.some((t=>!CriticalRequestChains$2.isCritical(t,e)))||function addChain(e){let t=r;for(const r of e)t[r.requestId]||(t[r.requestId]={request:r,children:{}}),t=t[r.requestId].children}(i)}),(function getNextNodes(e){return e.getDependents().filter((e=>e.getDependencies().every((e=>a.has(e)))))})),r}static async compute_(e,t){const r=await JT.request({URL:e.URL,devtoolsLog:e.devtoolsLog},t),a=await XT.request({trace:e.trace,devtoolsLog:e.devtoolsLog},t);return CriticalRequestChains$2.extractChainsFromGraph(r,a)}}var ZT=YT(CriticalRequestChains$2,["URL","devtoolsLog","trace"]);const QT=kc,eE=ZT,tE={title:"Avoid chaining critical requests",
|
762
762
|
description:"The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn more](https://web.dev/critical-request-chains/).",displayValue:"{itemCount, plural,\n =1 {1 chain found}\n other {# chains found}\n }"},rE=oi.createMessageInstanceIdFn("lighthouse-core/audits/critical-request-chains.js",tE);class CriticalRequestChains$1 extends QT{static get meta(){return{id:"critical-request-chains",title:rE(tE.title),description:rE(tE.description),scoreDisplayMode:QT.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static _traverse(e,t){!function walk(e,r,a,n=0){const i=Object.keys(e);0!==i.length&&i.forEach((i=>{const o=e[i];a||(a=o.request.startTime),t({depth:r,id:i,node:o,chainDuration:1e3*(o.request.endTime-a),
|
763
763
|
chainTransferSize:n+o.request.transferSize}),o.children&&walk(o.children,r+1,a)}),"")}(e,0)}static _getLongestChain(e){const t={duration:0,length:0,transferSize:0};return CriticalRequestChains$1._traverse(e,(e=>{const r=e.chainDuration;r>t.duration&&(t.duration=r,t.transferSize=e.chainTransferSize,t.length=e.depth)})),t.length++,t}static flattenRequests(e){const t={},r=new Map;return CriticalRequestChains$1._traverse(e,(function flatten(e){const a=e.node.request,n={url:a.url,startTime:a.startTime,endTime:a.endTime,responseReceivedTime:a.responseReceivedTime,transferSize:a.transferSize};let i=r.get(e.id);if(i?i.request=n:(i={request:n},t[e.id]=i),e.node.children)for(const t of Object.keys(e.node.children)){const e={request:{}};r.set(t,e),i.children||(i.children={}),i.children[t]=e}r.set(e.id,i)})),t}static audit(e,t){const r=e.traces[QT.DEFAULT_PASS],a=e.devtoolsLogs[QT.DEFAULT_PASS],n=e.URL;return eE.request({devtoolsLog:a,trace:r,URL:n},t).then((e=>{let t=0
|
@@ -795,132 +795,129 @@ nE.evaluateForFailure=function evaluateForFailure$1(e){const t=[...atLeastOnePas
|
|
795
795
|
const r=t[e].trim().match(/\S+/g);if(Array.isArray(r)){const e=r[0].toLowerCase();if(e in this.csp.directives)continue;ME.isDirective(e);const t=[];for(let e,a=1;e=r[a];a++)e=normalizeDirectiveValue(e),t.includes(e)||t.push(e);this.csp.directives[e]=t}}return this.csp}},CE.TEST_ONLY={normalizeDirectiveValue};const{evaluateForFailure:PE,evaluateForSyntaxErrors:OE,evaluateForWarnings:FE}=nE,{Type:UE}=sE,{CspParser:jE}=CE,{Directive:BE}=oE,$E=on.default,qE=oi,{isIcuMessage:zE}=Vn,VE={missingBaseUri:"Missing base-uri allows injected <base> tags to set the base URL for all relative URLs (e.g. scripts) to an attacker controlled domain. Consider setting base-uri to 'none' or 'self'.",missingScriptSrc:"script-src directive is missing. This can allow the execution of unsafe scripts.",missingObjectSrc:"Missing object-src allows the injection of plugins that execute unsafe scripts. Consider setting object-src to 'none' if you can.",
|
796
796
|
strictDynamic:"Host allowlists can frequently be bypassed. Consider using CSP nonces or hashes instead, along with 'strict-dynamic' if necessary.",unsafeInline:"'unsafe-inline' allows the execution of unsafe in-page scripts and event handlers. Consider using CSP nonces or hashes to allow scripts individually.",unsafeInlineFallback:"Consider adding 'unsafe-inline' (ignored by browsers supporting nonces/hashes) to be backward compatible with older browsers.",allowlistFallback:"Consider adding https: and http: URL schemes (ignored by browsers supporting 'strict-dynamic') to be backward compatible with older browsers.",reportToOnly:"The reporting destination is only configured via the report-to directive. This directive is only supported in Chromium-based browsers so it is recommended to also use a report-uri directive.",reportingDestinationMissing:"No CSP configures a reporting destination. This makes it difficult to maintain the CSP over time and monitor for any breakages.",
|
797
797
|
nonceLength:"Nonces should be at least 8 characters long.",nonceCharset:"Nonces should use the base64 charset.",missingSemicolon:"Did you forget the semicolon? {keyword} seems to be a directive, not a keyword.",unknownDirective:"Unknown CSP directive.",unknownKeyword:"{keyword} seems to be an invalid keyword.",deprecatedReflectedXSS:"reflected-xss is deprecated since CSP2. Please, use the X-XSS-Protection header instead.",deprecatedReferrer:"referrer is deprecated since CSP2. Please, use the Referrer-Policy header instead.",deprecatedDisownOpener:"disown-opener is deprecated since CSP3. Please, use the Cross-Origin-Opener-Policy header instead.",plainWildcards:"Avoid using plain wildcards ({keyword}) in this directive. Plain wildcards allow scripts to be sourced from an unsafe domain.",plainUrlScheme:"Avoid using plain URL schemes ({keyword}) in this directive. Plain URL schemes allow scripts to be sourced from an unsafe domain."
|
798
|
-
},WE=qE.createMessageInstanceIdFn("lighthouse-core/lib/csp-evaluator.js",VE),
|
799
|
-
return new jE(e).csp}var
|
798
|
+
},WE=qE.createMessageInstanceIdFn("lighthouse-core/lib/csp-evaluator.js",VE),HE={[UE.MISSING_SEMICOLON]:VE.missingSemicolon,[UE.UNKNOWN_DIRECTIVE]:WE(VE.unknownDirective),[UE.INVALID_KEYWORD]:VE.unknownKeyword,[UE.MISSING_DIRECTIVES]:{[BE.BASE_URI]:WE(VE.missingBaseUri),[BE.SCRIPT_SRC]:WE(VE.missingScriptSrc),[BE.OBJECT_SRC]:WE(VE.missingObjectSrc)},[UE.SCRIPT_UNSAFE_INLINE]:WE(VE.unsafeInline),[UE.PLAIN_WILDCARD]:VE.plainWildcards,[UE.PLAIN_URL_SCHEMES]:VE.plainUrlScheme,[UE.NONCE_LENGTH]:WE(VE.nonceLength),[UE.NONCE_CHARSET]:WE(VE.nonceCharset),[UE.DEPRECATED_DIRECTIVE]:{[BE.REFLECTED_XSS]:WE(VE.deprecatedReflectedXSS),[BE.REFERRER]:WE(VE.deprecatedReferrer),[BE.DISOWN_OPENER]:WE(VE.deprecatedDisownOpener)},[UE.STRICT_DYNAMIC]:WE(VE.strictDynamic),[UE.UNSAFE_INLINE_FALLBACK]:WE(VE.unsafeInlineFallback),[UE.ALLOWLIST_FALLBACK]:WE(VE.allowlistFallback),[UE.REPORTING_DESTINATION_MISSING]:WE(VE.reportingDestinationMissing),[UE.REPORT_TO_ONLY]:WE(VE.reportToOnly)};function parseCsp(e){
|
799
|
+
return new jE(e).csp}var GE={getTranslatedDescription:function getTranslatedDescription$1(e){let t=HE[e.type];return t?zE(t)?t:"string"==typeof t?WE(t,{keyword:e.value||""}):(t=t[e.directive],t||($E.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)):($E.warn("CSP Evaluator",`No translation found for description: ${e.description}`),e.description)},evaluateRawCspsForXss:function evaluateRawCspsForXss$1(e){const t=e.map(parseCsp);return{bypasses:PE(t),warnings:FE(t),syntax:OE(t)}},parseCsp,UIStrings:VE};const YE=kc,KE=GT,JE=oi,{evaluateRawCspsForXss:XE,getTranslatedDescription:ZE}=GE,QE={title:"Ensure CSP is effective against XSS attacks",description:"A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn more](https://web.dev/csp-xss/)",noCsp:"No CSP found in enforcement mode",
|
800
800
|
metaTagMessage:"The page contains a CSP defined in a <meta> tag. Consider defining the CSP in an HTTP header if you can.",columnDirective:"Directive",columnSeverity:"Severity",itemSeveritySyntax:"Syntax"},ex=JE.createMessageInstanceIdFn("lighthouse-core/audits/csp-xss.js",QE);aE.exports=class CspXss extends YE{static get meta(){return{id:"csp-xss",scoreDisplayMode:YE.SCORING_MODES.INFORMATIVE,title:ex(QE.title),description:ex(QE.description),requiredArtifacts:["devtoolsLogs","MetaElements","URL"]}}static async getRawCsps(e,t){const r=e.devtoolsLogs[YE.DEFAULT_PASS],a=await KE.request({devtoolsLog:r,URL:e.URL},t),n=e.MetaElements.filter((e=>e.httpEquiv&&"content-security-policy"===e.httpEquiv.toLowerCase())).flatMap((e=>(e.content||"").split(","))).filter((e=>e.replace(/\s/g,"")));return{cspHeaders:a.responseHeaders.filter((e=>"content-security-policy"===e.name.toLowerCase())).flatMap((e=>e.value.split(","))).filter((e=>e.replace(/\s/g,""))),cspMetaTags:n}}
|
801
801
|
static findingToTableItem(e,t){return{directive:e.directive,description:ZE(e),severity:t}}static constructSyntaxResults(e,t){const r=[];for(let a=0;a<e.length;++a){const n=e[a].map((e=>this.findingToTableItem(e)));n.length&&r.push({severity:ex(QE.itemSeveritySyntax),description:{type:"code",value:t[a]},subItems:{type:"subitems",items:n}})}return r}static constructResults(e,t){const r=[...e,...t];if(!r.length)return{score:0,results:[{severity:ex(JE.UIStrings.itemSeverityHigh),description:ex(QE.noCsp),directive:void 0}]};const{bypasses:a,warnings:n,syntax:i}=XE(r),o=[...this.constructSyntaxResults(i,r),...a.map((e=>this.findingToTableItem(e,ex(JE.UIStrings.itemSeverityHigh)))),...n.map((e=>this.findingToTableItem(e,ex(JE.UIStrings.itemSeverityMedium))))];return t.length&&o.push({severity:ex(JE.UIStrings.itemSeverityMedium),description:ex(QE.metaTagMessage),directive:void 0}),{score:a.length?0:1,results:o}}static async audit(e,t){
|
802
|
-
const{cspHeaders:r,cspMetaTags:a}=await this.getRawCsps(e,t),{score:n,results:i}=this.constructResults(r,a),o=[{key:"description",itemType:"text",subItemsHeading:{key:"description"},text:ex(JE.UIStrings.columnDescription)},{key:"directive",itemType:"code",subItemsHeading:{key:"directive"},text:ex(QE.columnDirective)},{key:"severity",itemType:"text",subItemsHeading:{key:"severity"},text:ex(QE.columnSeverity)}],s=YE.makeTableDetails(o,i);return{score:n,notApplicable:!i.length,details:s}}},aE.exports.UIStrings=QE;var tx={exports:{}};const rx=
|
803
|
-
|
804
|
-
|
805
|
-
documentDomainSettingWithoutOriginAgentClusterHeader:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.",eventPath:"`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.",geolocationInsecureOrigin:"`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",
|
806
|
-
geolocationInsecureOriginDeprecatedNotRemoved:"`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",getUserMediaInsecureOrigin:"`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",hostCandidateAttributeGetter:"`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.",
|
807
|
-
insecurePrivateNetworkSubresourceRequest:"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them.",
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
;case"
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
;
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
r.
|
834
|
-
|
835
|
-
|
836
|
-
;
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
return
|
843
|
-
|
844
|
-
;if(e
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
vulnerable:[">=1.
|
854
|
-
|
855
|
-
vulnerable:["
|
856
|
-
|
857
|
-
severity:"
|
858
|
-
vulnerable:["
|
859
|
-
severity:"medium",semver:{vulnerable:[">=
|
860
|
-
|
861
|
-
vulnerable:["<
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
const
|
875
|
-
static async
|
876
|
-
title:"All text remains visible during webfont loads",failureTitle:"Ensure text remains visible during webfont load",description:"Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://web.dev/font-display/).",undeclaredFontOriginWarning:"{fontCountForOrigin, plural, =1 {Lighthouse was unable to automatically check the `font-display` value for the origin {fontOrigin}.} other {Lighthouse was unable to automatically check the `font-display` values for the origin {fontOrigin}.}}"},lA=iA.createMessageInstanceIdFn("lighthouse-core/audits/font-display.js",cA);class FontDisplay$1 extends eA{static get meta(){return{id:"font-display",title:lA(cA.title),failureTitle:lA(cA.failureTitle),description:lA(cA.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","CSSUsage","URL"]}}static findFontDisplayDeclarations(e,t){const r=new Set,a=new Set;for(const n of e.CSSUsage.stylesheets){
|
877
|
-
const i=n.content.replace(/(\r|\n)+/g," ").match(/@font-face\s*{(.*?)}/g)||[];for(const o of i){const i=o.match(nA);if(!i)continue;const s=o.match(/font-display\s*:\s*(\w+)\s*(;|\})/)?.[1]||"",c=t.test(s)?r:a,l=i.map((e=>e.match(aA)[1].trim())).map((e=>/^('|").*\1$/.test(e)?e.substr(1,e.length-2):e));for(const t of l)try{const r=tA.isValid(n.header.sourceURL)?n.header.sourceURL:e.URL.finalUrl,a=new tA(t,r);c.add(a.href)}catch(e){oA.captureException(e,{tags:{audit:this.meta.id}})}}}return{passingURLs:r,failingURLs:a}}static getWarningsForFontUrls(e){const t=new Map;for(const r of e){const e=tA.getOrigin(r);if(!e)continue;const a=t.get(e)||0;t.set(e,a+1)}return[...t].map((([e,t])=>lA(cA.undeclaredFontOriginWarning,{fontCountForOrigin:t,fontOrigin:e})))}static async audit(e,t){
|
878
|
-
const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await sA.request(r,t),{passingURLs:n,failingURLs:i}=FontDisplay$1.findFontDisplayDeclarations(e,rA),o=[],s=a.filter((e=>"Font"===e.resourceType)).filter((e=>!/^data:/.test(e.url))).filter((e=>!/^blob:/.test(e.url))).filter((e=>!!i.has(e.url)||(n.has(e.url)||o.push(e.url),!1))).map((e=>{const t=Math.min(1e3*(e.endTime-e.startTime),3e3);return{url:e.url,wastedMs:t}})),c=[{key:"url",itemType:"url",text:lA(iA.UIStrings.columnURL)},{key:"wastedMs",itemType:"ms",text:lA(iA.UIStrings.columnWastedMs)}],l=eA.makeTableDetails(c,s);return{score:Number(0===s.length),details:l,warnings:FontDisplay$1.getWarningsForFontUrls(o)}}}Q_.exports=FontDisplay$1,Q_.exports.UIStrings=cA;
|
802
|
+
const{cspHeaders:r,cspMetaTags:a}=await this.getRawCsps(e,t),{score:n,results:i}=this.constructResults(r,a),o=[{key:"description",itemType:"text",subItemsHeading:{key:"description"},text:ex(JE.UIStrings.columnDescription)},{key:"directive",itemType:"code",subItemsHeading:{key:"directive"},text:ex(QE.columnDirective)},{key:"severity",itemType:"text",subItemsHeading:{key:"severity"},text:ex(QE.columnSeverity)}],s=YE.makeTableDetails(o,i);return{score:n,notApplicable:!i.length,details:s}}},aE.exports.UIStrings=QE;var tx={exports:{}};const rx={feature:"Check the feature status page for more details.",milestone:"This change will go into effect with milestone {milestone}.",title:"Deprecated Feature Used",authorizationCoveredByWildcard:"Authorization will not be covered by the wildcard symbol (*) in CORS `Access-Control-Allow-Headers` handling.",
|
803
|
+
canRequestURLHTTPContainingNewline:"Resource requests whose URLs contained both removed whitespace `(n|r|t)` characters and less-than characters (`<`) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources.",chromeLoadTimesConnectionInfo:"`chrome.loadTimes()` is deprecated, instead use standardized API: Navigation Timing 2.",chromeLoadTimesFirstPaintAfterLoadTime:"`chrome.loadTimes()` is deprecated, instead use standardized API: Paint Timing.",chromeLoadTimesWasAlternateProtocolAvailable:"`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",cookieWithTruncatingChar:"Cookies containing a `(0|r|n)` character will be rejected instead of truncated.",
|
804
|
+
crossOriginAccessBasedOnDocumentDomain:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting `document.domain`.",crossOriginWindowApi:"Triggering {PH1} from cross origin iframes has been deprecated and will be removed in the future.",cssSelectorInternalMediaControlsOverlayCastButton:"The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",deprecationExample:"This is an example of a translated deprecation issue message.",
|
805
|
+
documentDomainSettingWithoutOriginAgentClusterHeader:"Relaxing the same-origin policy by setting `document.domain` is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an `Origin-Agent-Cluster: ?0` header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details.",eventPath:"`Event.path` is deprecated and will be removed. Please use `Event.composedPath()` instead.",expectCTHeader:"The `Expect-CT` header is deprecated and will be removed. Chrome requires Certificate Transparency for all publicly trusted certificates issued after April 30, 2018.",geolocationInsecureOrigin:"`getCurrentPosition()` and `watchPosition()` no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",
|
806
|
+
geolocationInsecureOriginDeprecatedNotRemoved:"`getCurrentPosition()` and `watchPosition()` are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",getUserMediaInsecureOrigin:"`getUserMedia()` no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",hostCandidateAttributeGetter:"`RTCPeerConnectionIceErrorEvent.hostCandidate` is deprecated. Please use `RTCPeerConnectionIceErrorEvent.address` or `RTCPeerConnectionIceErrorEvent.port` instead.",identityInCanMakePaymentEvent:"The merchant origin and arbitrary data from the `canmakepayment` service worker event are deprecated and will be removed: `topOrigin`, `paymentRequestOrigin`, `methodData`, `modifiers`.",
|
807
|
+
insecurePrivateNetworkSubresourceRequest:"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them.",legacyConstraintGoogIPv6:"IPv6 is enabled-by-default and the ability to disable it using `googIPv6` is targeted to be removed in M108, after which it will be ignored. Please stop using this legacy constraint.",localCSSFileExtensionRejected:"CSS cannot be loaded from `file:` URLs unless they end in a `.css` file extension.",
|
808
|
+
mediaSourceAbortRemove:"Using `SourceBuffer.abort()` to abort `remove()`'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the `updateend` event instead. `abort()` is intended to only abort an asynchronous media append or reset parser state.",mediaSourceDurationTruncatingBuffered:"Setting `MediaSource.duration` below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit `remove(newDuration, oldDuration)` on all `sourceBuffers`, where `newDuration < oldDuration`.",noSysexWebMIDIWithoutPermission:"Web MIDI will ask a permission to use even if the sysex is not specified in the `MIDIOptions`.",
|
809
|
+
notificationInsecureOrigin:"The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details.",notificationPermissionRequestedIframe:"Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead.",obsoleteWebRtcCipherSuite:"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed.",openWebDatabaseInsecureContext:"WebSQL in non-secure contexts is deprecated and will be removed soon. Please use Web Storage or Indexed Database.",persistentQuotaType:"`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead.",pictureSourceSrc:"`<source src>` with a `<picture>` parent is invalid and therefore ignored. Please use `<source srcset>` instead.",
|
810
|
+
vendorSpecificApi:"{PH1} is vendor-specific. Please use the standard {PH2} instead.",prefixedStorageInfo:"`window.webkitStorageInfo` is deprecated. Please use standardized `navigator.storage` instead.",deprecatedWithReplacement:"{PH1} is deprecated. Please use {PH2} instead.",requestedSubresourceWithEmbeddedCredentials:"Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked.",rtcConstraintEnableDtlsSrtpFalse:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `false` value for this constraint, which is interpreted as an attempt to use the removed `SDES key negotiation` method. This functionality is removed; use a service that supports `DTLS key negotiation` instead.",rtcConstraintEnableDtlsSrtpTrue:"The constraint `DtlsSrtpKeyAgreement` is removed. You have specified a `true` value for this constraint, which had no effect, but you can remove this constraint for tidiness.",
|
811
|
+
rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics:"`Complex Plan B SDP` detected. This dialect of the `Session Description Protocol` is no longer supported. Please use `Unified Plan SDP` instead.",rtcPeerConnectionSdpSemanticsPlanB:"`Plan B SDP semantics`, which is used when constructing an `RTCPeerConnection` with `{sdpSemantics:plan-b}`, is a legacy non-standard version of the `Session Description Protocol` that has been permanently deleted from the Web Platform. It is still available when building with `IS_FUCHSIA`, but we intend to delete it as soon as possible. Stop depending on it. See https://crbug.com/1302249 for status.",rtcpMuxPolicyNegotiate:"The `rtcpMuxPolicy` option is deprecated and will be removed.",sharedArrayBufferConstructedWithoutIsolation:"`SharedArrayBuffer` will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details.",
|
812
|
+
textToSpeech_DisallowedByAutoplay:"`speechSynthesis.speak()` without user activation is deprecated and will be removed.",v8SharedArrayBufferConstructedInExtensionWithoutIsolation:"Extensions should opt into cross-origin isolation to continue using `SharedArrayBuffer`. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/.",xhrJSONEncodingDetection:"UTF-16 is not supported by response json in `XMLHttpRequest`",xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload:"Synchronous `XMLHttpRequest` on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help, check https://xhr.spec.whatwg.org/.",xrSupportsSession:"`supportsSession()` is deprecated. Please use `isSessionSupported()` and check the resolved boolean value instead."},ax=oi.createMessageInstanceIdFn("lighthouse-core/lib/deprecations-strings.js",rx);var nx={getIssueDetailDescription:function getDescription(e){let t,r=0,a=0;switch(e.type){
|
813
|
+
case"AuthorizationCoveredByWildcard":t=ax(rx.authorizationCoveredByWildcard),a=97;break;case"CanRequestURLHTTPContainingNewline":t=ax(rx.canRequestURLHTTPContainingNewline),r=5735596811091968;break;case"ChromeLoadTimesConnectionInfo":t=ax(rx.chromeLoadTimesConnectionInfo),r=5637885046816768;break;case"ChromeLoadTimesFirstPaintAfterLoadTime":t=ax(rx.chromeLoadTimesFirstPaintAfterLoadTime),r=5637885046816768;break;case"ChromeLoadTimesWasAlternateProtocolAvailable":t=ax(rx.chromeLoadTimesWasAlternateProtocolAvailable),r=5637885046816768;break;case"CookieWithTruncatingChar":t=ax(rx.cookieWithTruncatingChar),a=103;break;case"CrossOriginAccessBasedOnDocumentDomain":t=ax(rx.crossOriginAccessBasedOnDocumentDomain),a=109;break;case"CrossOriginWindowAlert":t=ax(rx.crossOriginWindowApi,{PH1:"window.alert"});break;case"CrossOriginWindowConfirm":t=ax(rx.crossOriginWindowApi,{PH1:"window.confirm"});break;case"CSSSelectorInternalMediaControlsOverlayCastButton":
|
814
|
+
t=ax(rx.cssSelectorInternalMediaControlsOverlayCastButton),r=5714245488476160;break;case"DeprecationExample":t=ax(rx.deprecationExample),r=5684289032159232,a=100;break;case"DocumentDomainSettingWithoutOriginAgentClusterHeader":t=ax(rx.documentDomainSettingWithoutOriginAgentClusterHeader),a=109;break;case"EventPath":t=ax(rx.eventPath),r=5726124632965120,a=109;break;case"ExpectCTHeader":t=ax(rx.expectCTHeader),r=6244547273687040,a=107;break;case"GeolocationInsecureOrigin":t=ax(rx.geolocationInsecureOrigin);break;case"GeolocationInsecureOriginDeprecatedNotRemoved":t=ax(rx.geolocationInsecureOriginDeprecatedNotRemoved);break;case"GetUserMediaInsecureOrigin":t=ax(rx.getUserMediaInsecureOrigin);break;case"HostCandidateAttributeGetter":t=ax(rx.hostCandidateAttributeGetter);break;case"IdentityInCanMakePaymentEvent":t=ax(rx.identityInCanMakePaymentEvent),r=5190978431352832;break;case"InsecurePrivateNetworkSubresourceRequest":t=ax(rx.insecurePrivateNetworkSubresourceRequest),r=5436853517811712,
|
815
|
+
a=92;break;case"LegacyConstraintGoogIPv6":t=ax(rx.legacyConstraintGoogIPv6),a=103;break;case"LocalCSSFileExtensionRejected":t=ax(rx.localCSSFileExtensionRejected),a=64;break;case"MediaSourceAbortRemove":t=ax(rx.mediaSourceAbortRemove),r=6107495151960064;break;case"MediaSourceDurationTruncatingBuffered":t=ax(rx.mediaSourceDurationTruncatingBuffered),r=6107495151960064;break;case"NavigateEventRestoreScroll":t=ax(rx.deprecatedWithReplacement,{PH1:"navigateEvent.restoreScroll()",PH2:"navigateEvent.scroll()"});break;case"NavigateEventTransitionWhile":t=ax(rx.deprecatedWithReplacement,{PH1:"navigateEvent.transitionWhile()",PH2:"navigateEvent.intercept()"});break;case"NoSysexWebMIDIWithoutPermission":t=ax(rx.noSysexWebMIDIWithoutPermission),r=5138066234671104,a=82;break;case"NotificationInsecureOrigin":t=ax(rx.notificationInsecureOrigin);break;case"NotificationPermissionRequestedIframe":t=ax(rx.notificationPermissionRequestedIframe),r=6451284559265792;break;case"ObsoleteWebRtcCipherSuite":
|
816
|
+
t=ax(rx.obsoleteWebRtcCipherSuite),a=81;break;case"OpenWebDatabaseInsecureContext":t=ax(rx.openWebDatabaseInsecureContext),r=5175124599767040,a=105;break;case"PersistentQuotaType":t=ax(rx.persistentQuotaType),r=5176235376246784,a=106;break;case"PictureSourceSrc":t=ax(rx.pictureSourceSrc);break;case"PrefixedCancelAnimationFrame":t=ax(rx.vendorSpecificApi,{PH1:"webkitCancelAnimationFrame",PH2:"cancelAnimationFrame"});break;case"PrefixedRequestAnimationFrame":t=ax(rx.vendorSpecificApi,{PH1:"webkitRequestAnimationFrame",PH2:"requestAnimationFrame"});break;case"PrefixedStorageInfo":t=ax(rx.prefixedStorageInfo);break;case"PrefixedVideoDisplayingFullscreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitDisplayingFullscreen",PH2:"Document.fullscreenElement"});break;case"PrefixedVideoEnterFullScreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitEnterFullScreen()",PH2:"Element.requestFullscreen()"});break;case"PrefixedVideoEnterFullscreen":
|
817
|
+
t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitEnterFullscreen()",PH2:"Element.requestFullscreen()"});break;case"PrefixedVideoExitFullScreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitExitFullScreen()",PH2:"Document.exitFullscreen()"});break;case"PrefixedVideoExitFullscreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitExitFullscreen()",PH2:"Document.exitFullscreen()"});break;case"PrefixedVideoSupportsFullscreen":t=ax(rx.deprecatedWithReplacement,{PH1:"HTMLVideoElement.webkitSupportsFullscreen",PH2:"Document.fullscreenEnabled"});break;case"RangeExpand":t=ax(rx.deprecatedWithReplacement,{PH1:"Range.expand()",PH2:"Selection.modify()"});break;case"RequestedSubresourceWithEmbeddedCredentials":t=ax(rx.requestedSubresourceWithEmbeddedCredentials),r=5669008342777856;break;case"RTCConstraintEnableDtlsSrtpFalse":t=ax(rx.rtcConstraintEnableDtlsSrtpFalse),a=97;break;case"RTCConstraintEnableDtlsSrtpTrue":
|
818
|
+
t=ax(rx.rtcConstraintEnableDtlsSrtpTrue),a=97;break;case"RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics":t=ax(rx.rtcPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics),a=72;break;case"RTCPeerConnectionSdpSemanticsPlanB":t=ax(rx.rtcPeerConnectionSdpSemanticsPlanB),r=5823036655665152,a=93;break;case"RtcpMuxPolicyNegotiate":t=ax(rx.rtcpMuxPolicyNegotiate),r=5654810086866944,a=62;break;case"SharedArrayBufferConstructedWithoutIsolation":t=ax(rx.sharedArrayBufferConstructedWithoutIsolation),a=106;break;case"TextToSpeech_DisallowedByAutoplay":t=ax(rx.textToSpeech_DisallowedByAutoplay),r=5687444770914304,a=71;break;case"V8SharedArrayBufferConstructedInExtensionWithoutIsolation":t=ax(rx.v8SharedArrayBufferConstructedInExtensionWithoutIsolation),a=96;break;case"XHRJSONEncodingDetection":t=ax(rx.xhrJSONEncodingDetection),a=93;break;case"XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload":t=ax(rx.xmlHttpRequestSynchronousInNonWorkerOutsideBeforeUnload);break
|
819
|
+
;case"XRSupportsSession":t=ax(rx.xrSupportsSession),a=80}const n=[];return 0!==r&&n.push({link:`https://chromestatus.com/feature/${r}`,linkTitle:ax(rx.feature)}),0!==a&&n.push({link:"https://chromiumdash.appspot.com/schedule",linkTitle:ax(rx.milestone,{milestone:a})}),{file:"deprecation.md",substitutions:new Map([["PLACEHOLDER_title",ax(rx.title)],["PLACEHOLDER_message",t]]),links:n,message:t}},UIStrings:rx};const ix=kc,ox=jb,sx=oi,{getIssueDetailDescription:cx}=nx,lx={title:"Avoids deprecated APIs",failureTitle:"Uses deprecated APIs",description:"Deprecated APIs will eventually be removed from the browser. [Learn more](https://web.dev/deprecations/).",displayValue:"{itemCount, plural,\n =1 {1 warning found}\n other {# warnings found}\n }",columnDeprecate:"Deprecation / Warning",columnLine:"Line"},ux=sx.createMessageInstanceIdFn("lighthouse-core/audits/deprecations.js",lx);tx.exports=class Deprecations extends ix{static get meta(){return{id:"deprecations",title:ux(lx.title),
|
820
|
+
failureTitle:ux(lx.failureTitle),description:ux(lx.description),requiredArtifacts:["InspectorIssues","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await ox.request(e,t),a=e.InspectorIssues.deprecationIssue.map((e=>{const{url:t,lineNumber:a,columnNumber:n}=e.sourceCodeLocation,i=r.find((e=>e.script.src===t)),o=cx(e);let s;o.links.length&&(s={type:"subitems",items:o.links.map((e=>({type:"link",url:e.link,text:e.linkTitle})))});const c=e.message;return{value:o.message||c||e.type,source:ix.makeSourceLocation(t,a,n-1,i),subItems:s}})),n=[{key:"value",itemType:"text",text:ux(lx.columnDeprecate)},{key:"source",itemType:"source-location",text:ux(sx.UIStrings.columnSource)}],i=ix.makeTableDetails(n,a);let o;return a.length>0&&(o=ux(lx.displayValue,{itemCount:a.length})),{score:Number(0===a.length),displayValue:o,details:i}}},tx.exports.UIStrings=lx;const dx=kc,mx=Rv,px=Lo,hx=xl,gx=Fo;var fx=class Diagnostics extends dx{static get meta(){return{id:"diagnostics",
|
821
|
+
scoreDisplayMode:dx.SCORING_MODES.INFORMATIVE,title:"Diagnostics",description:"Collection of useful page vitals.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r=e.traces[dx.DEFAULT_PASS],a=e.devtoolsLogs[dx.DEFAULT_PASS],n=await mx.request(r,t),i=await px.request(a,t),o=await hx.request(a,t),s=n.filter((e=>!e.parent)),c=gx.findMainDocument(i).transferSize,l=i.reduce(((e,t)=>e+(t.transferSize||0)),0),u=s.reduce(((e,t)=>e+(t.duration||0)),0),d=Math.max(...o.additionalRttByOrigin.values())+o.rtt,m=Math.max(...o.serverResponseTimeByOrigin.values());return{score:1,details:{type:"debugdata",items:[{numRequests:i.length,numScripts:i.filter((e=>"Script"===e.resourceType)).length,numStylesheets:i.filter((e=>"Stylesheet"===e.resourceType)).length,numFonts:i.filter((e=>"Font"===e.resourceType)).length,numTasks:s.length,numTasksOver10ms:s.filter((e=>e.duration>10)).length,numTasksOver25ms:s.filter((e=>e.duration>25)).length,
|
822
|
+
numTasksOver50ms:s.filter((e=>e.duration>50)).length,numTasksOver100ms:s.filter((e=>e.duration>100)).length,numTasksOver500ms:s.filter((e=>e.duration>500)).length,rtt:o.rtt,throughput:o.throughput,maxRtt:d,maxServerLatency:m,totalByteWeight:l,totalTaskTime:u,mainDocumentTransferSize:c}]}}}},yx={exports:{}};const vx=kc,bx=GT,wx={title:"Properly defines charset",failureTitle:"Charset declaration is missing or occurs too late in the HTML",description:"A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more](https://web.dev/charset/)."},Sx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/charset.js",wx),Tx=/^[a-zA-Z0-9-_:.()]{2,}$/,Ex=/<meta[^>]+charset[^<]+>/i,xx=/charset\s*=\s*[a-zA-Z0-9-_:.()]{2,}/i;yx.exports=class CharsetDefined extends vx{static get meta(){return{id:"charset",title:Sx(wx.title),failureTitle:Sx(wx.failureTitle),
|
823
|
+
description:Sx(wx.description),requiredArtifacts:["MainDocumentContent","URL","devtoolsLogs","MetaElements"]}}static async audit(e,t){const r=e.devtoolsLogs[vx.DEFAULT_PASS],a=await bx.request({devtoolsLog:r,URL:e.URL},t);let n=!1;if(a.responseHeaders){const e=a.responseHeaders.find((e=>"content-type"===e.name.toLowerCase()));e&&(n=xx.test(e.value))}return n=n||65279===e.MainDocumentContent.charCodeAt(0),Ex.test(e.MainDocumentContent.slice(0,1024))&&(n=n||e.MetaElements.some((e=>e.charset&&Tx.test(e.charset)||"content-type"===e.httpEquiv&&e.content&&xx.test(e.content)))),{score:Number(n)}}},yx.exports.UIStrings=wx,yx.exports.CHARSET_HTML_REGEX=Ex,yx.exports.CHARSET_HTTP_REGEX=xx,yx.exports.IANA_REGEX=Tx;var _x={exports:{}};const Ax=kc,Rx={title:"Page has the HTML doctype",failureTitle:"Page lacks the HTML doctype, thus triggering quirks-mode",description:"Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more](https://web.dev/doctype/).",
|
824
|
+
explanationNoDoctype:"Document must contain a doctype",explanationPublicId:"Expected publicId to be an empty string",explanationSystemId:"Expected systemId to be an empty string",explanationBadDoctype:"Doctype name must be the lowercase string `html`"},kx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/doctype.js",Rx);_x.exports=class Doctype extends Ax{static get meta(){return{id:"doctype",title:kx(Rx.title),failureTitle:kx(Rx.failureTitle),description:kx(Rx.description),requiredArtifacts:["Doctype"]}}static audit(e){if(!e.Doctype)return{score:0,explanation:kx(Rx.explanationNoDoctype)};const t=e.Doctype.name.trim(),r=e.Doctype.publicId,a=e.Doctype.systemId;return""!==r?{score:0,explanation:kx(Rx.explanationPublicId)}:""!==a?{score:0,explanation:kx(Rx.explanationSystemId)}:"html"===t?{score:1}:{score:0,explanation:kx(Rx.explanationBadDoctype)}}},_x.exports.UIStrings=Rx;var Dx={exports:{}};const Cx=kc,Ix=oi,Nx={title:"Avoids an excessive DOM size",
|
825
|
+
failureTitle:"Avoid an excessive DOM size",description:"A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://web.dev/dom-size/).",columnStatistic:"Statistic",columnValue:"Value",displayValue:"{itemCount, plural,\n =1 {1 element}\n other {# elements}\n }",statisticDOMElements:"Total DOM Elements",statisticDOMDepth:"Maximum DOM Depth",statisticDOMWidth:"Maximum Child Elements"},Lx=Ix.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/dom-size.js",Nx);Dx.exports=class DOMSize extends Cx{static get meta(){return{id:"dom-size",title:Lx(Nx.title),failureTitle:Lx(Nx.failureTitle),description:Lx(Nx.description),scoreDisplayMode:Cx.SCORING_MODES.NUMERIC,requiredArtifacts:["DOMStats"]}}static get defaultOptions(){return{
|
826
|
+
p10:818,median:1400}}static audit(e,t){const r=e.DOMStats,a=Cx.computeLogNormalScore({p10:t.options.p10,median:t.options.median},r.totalBodyElements),n=[{key:"statistic",itemType:"text",text:Lx(Nx.columnStatistic)},{key:"node",itemType:"node",text:Lx(Ix.UIStrings.columnElement)},{key:"value",itemType:"numeric",text:Lx(Nx.columnValue)}],i=[{statistic:Lx(Nx.statisticDOMElements),value:r.totalBodyElements},{node:Cx.makeNodeItem(r.depth),statistic:Lx(Nx.statisticDOMDepth),value:r.depth.max},{node:Cx.makeNodeItem(r.width),statistic:Lx(Nx.statisticDOMWidth),value:r.width.max}];return{score:a,numericValue:r.totalBodyElements,numericUnit:"element",displayValue:Lx(Nx.displayValue,{itemCount:r.totalBodyElements}),details:Cx.makeTableDetails(n,i)}}},Dx.exports.UIStrings=Nx;var Mx={exports:{}};const Px=kc,Ox=jb;var Fx=class ViolationAudit$4 extends Px{static async getViolationResults(e,t,r){const a=await Ox.request(e,t);const n=new Set
|
827
|
+
;return e.ConsoleMessages.filter((e=>e.url&&"violation"===e.source&&r.test(e.text))).map((e=>{const t=a.find((t=>t.script.src===e.url));return Px.makeSourceLocationFromConsoleMessage(e,t)})).filter((function filterUndefined(e){return void 0!==e})).filter((e=>{const t=`${e.url}!${e.line}!${e.column}`;return!n.has(t)&&(n.add(t),!0)})).map((e=>({source:e})))}};const Ux=Fx,jx=oi,Bx={title:"Avoids requesting the geolocation permission on page load",failureTitle:"Requests the geolocation permission on page load",description:"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more](https://web.dev/geolocation-on-start/)."},$x=jx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/geolocation-on-start.js",Bx);Mx.exports=class GeolocationOnStart extends Ux{static get meta(){return{id:"geolocation-on-start",title:$x(Bx.title),failureTitle:$x(Bx.failureTitle),
|
828
|
+
description:$x(Bx.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await Ux.getViolationResults(e,t,/geolocation/),a=[{key:"source",itemType:"source-location",text:$x(jx.UIStrings.columnSource)}],n=Ux.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},Mx.exports.UIStrings=Bx;var qx={exports:{}};const zx=kc,Vx={title:"No issues in the `Issues` panel in Chrome Devtools",failureTitle:"Issues were logged in the `Issues` panel in Chrome Devtools",description:"Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",columnIssueType:"Issue type",issueTypeBlockedByResponse:"Blocked by cross-origin policy",issueTypeHeavyAds:"Heavy resource usage by ads"
|
829
|
+
},Wx=oi.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/inspector-issues.js",Vx);qx.exports=class IssuesPanelEntries extends zx{static get meta(){return{id:"inspector-issues",title:Wx(Vx.title),failureTitle:Wx(Vx.failureTitle),description:Wx(Vx.description),requiredArtifacts:["InspectorIssues"]}}static getMixedContentRow(e){const t=new Set;for(const r of e){const e=r.request?.url||r.mainResourceURL;t.add(e)}return{issueType:"Mixed content",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getCookieRow(e){const t=new Set;for(const r of e){const e=r.request?.url||r.cookieUrl;e&&t.add(e)}return{issueType:"Cookie",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getBlockedByResponseRow(e){const t=new Set;for(const r of e){const e=r.request?.url;e&&t.add(e)}return{issueType:Wx(Vx.issueTypeBlockedByResponse),subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static getContentSecurityPolicyRow(e){const t=new Set
|
830
|
+
;for(const r of e){const e=r.blockedURL;e&&t.add(e)}return{issueType:"Content security policy",subItems:{type:"subitems",items:Array.from(t).map((e=>({url:e})))}}}static audit(e){const t=[{key:"issueType",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:Wx(Vx.columnIssueType)}],r=e.InspectorIssues,a=[];r.mixedContentIssue.length&&a.push(this.getMixedContentRow(r.mixedContentIssue)),r.cookieIssue.length&&a.push(this.getCookieRow(r.cookieIssue)),r.blockedByResponseIssue.length&&a.push(this.getBlockedByResponseRow(r.blockedByResponseIssue)),r.heavyAdIssue.length&&a.push({issueType:Wx(Vx.issueTypeHeavyAds)});const n=r.contentSecurityPolicyIssue.filter((e=>"kTrustedTypesSinkViolation"!==e.contentSecurityPolicyViolationType&&"kTrustedTypesPolicyViolation"!==e.contentSecurityPolicyViolationType));return n.length&&a.push(this.getContentSecurityPolicyRow(n)),{score:a.length>0?0:1,details:zx.makeTableDetails(t,a)}}},qx.exports.UIStrings=Vx;var Hx={exports:{}}
|
831
|
+
;const Gx=kc,Yx=oi,Kx={title:"Detected JavaScript libraries",description:"All front-end JavaScript libraries detected on the page. [Learn more](https://web.dev/js-libraries/).",columnVersion:"Version"},Jx=Yx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/js-libraries.js",Kx);Hx.exports=class JsLibrariesAudit extends Gx{static get meta(){return{id:"js-libraries",title:Jx(Kx.title),scoreDisplayMode:Gx.SCORING_MODES.INFORMATIVE,description:Jx(Kx.description),requiredArtifacts:["Stacks"]}}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)).filter((e=>!e.id.endsWith("-fast"))).map((e=>({name:e.name,version:e.version,npm:e.npm}))),r=[{key:"name",itemType:"text",text:Jx(Yx.UIStrings.columnName)},{key:"version",itemType:"text",text:Jx(Kx.columnVersion)}],a=Gx.makeTableDetails(r,t,{}),n={type:"debugdata",stacks:e.Stacks.map((e=>({id:e.id,version:e.version})))};return t.length?{score:1,details:{...a,debugData:n}}:{score:null,notApplicable:!0}}},Hx.exports.UIStrings=Kx
|
832
|
+
;var Xx={exports:{}};const Zx=Fx,Qx=oi,e_={title:"Avoids `document.write()`",failureTitle:"Avoid `document.write()`",description:"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn more](https://web.dev/no-document-write/)."},t_=Qx.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/no-document-write.js",e_);Xx.exports=class NoDocWriteAudit extends Zx{static get meta(){return{id:"no-document-write",title:t_(e_.title),failureTitle:t_(e_.failureTitle),description:t_(e_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await Zx.getViolationResults(e,t,/document\.write/),a=[{key:"source",itemType:"source-location",text:t_(Qx.UIStrings.columnSource)}],n=Zx.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},Xx.exports.UIStrings=e_;var r_={exports:{}},a_={exports:{}};!function(e,t){var r;t=e.exports=SemVer,
|
833
|
+
r="object"==typeof La&&La.env&&La.env.NODE_DEBUG&&/\bsemver\b/i.test(La.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var a=Number.MAX_SAFE_INTEGER||9007199254740991,n=t.re=[],i=t.src=[],o=0,s=o++;i[s]="0|[1-9]\\d*";var c=o++;i[c]="[0-9]+";var l=o++;i[l]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var u=o++;i[u]="("+i[s]+")\\.("+i[s]+")\\.("+i[s]+")";var d=o++;i[d]="("+i[c]+")\\.("+i[c]+")\\.("+i[c]+")";var m=o++;i[m]="(?:"+i[s]+"|"+i[l]+")";var p=o++;i[p]="(?:"+i[c]+"|"+i[l]+")";var h=o++;i[h]="(?:-("+i[m]+"(?:\\."+i[m]+")*))";var f=o++;i[f]="(?:-?("+i[p]+"(?:\\."+i[p]+")*))";var y=o++;i[y]="[0-9A-Za-z-]+";var v=o++;i[v]="(?:\\+("+i[y]+"(?:\\."+i[y]+")*))";var b=o++,w="v?"+i[u]+i[h]+"?"+i[v]+"?";i[b]="^"+w+"$";var S="[v=\\s]*"+i[d]+i[f]+"?"+i[v]+"?",T=o++;i[T]="^"+S+"$";var E=o++;i[E]="((?:<|>)?=?)";var x=o++;i[x]=i[c]+"|x|X|\\*";var _=o++;i[_]=i[s]+"|x|X|\\*";var A=o++
|
834
|
+
;i[A]="[v=\\s]*("+i[_]+")(?:\\.("+i[_]+")(?:\\.("+i[_]+")(?:"+i[h]+")?"+i[v]+"?)?)?";var R=o++;i[R]="[v=\\s]*("+i[x]+")(?:\\.("+i[x]+")(?:\\.("+i[x]+")(?:"+i[f]+")?"+i[v]+"?)?)?";var k=o++;i[k]="^"+i[E]+"\\s*"+i[A]+"$";var D=o++;i[D]="^"+i[E]+"\\s*"+i[R]+"$";var C=o++;i[C]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var I=o++;i[I]="(?:~>?)";var N=o++;i[N]="(\\s*)"+i[I]+"\\s+",n[N]=new RegExp(i[N],"g");var L=o++;i[L]="^"+i[I]+i[A]+"$";var M=o++;i[M]="^"+i[I]+i[R]+"$";var P=o++;i[P]="(?:\\^)";var O=o++;i[O]="(\\s*)"+i[P]+"\\s+",n[O]=new RegExp(i[O],"g");var F=o++;i[F]="^"+i[P]+i[A]+"$";var U=o++;i[U]="^"+i[P]+i[R]+"$";var j=o++;i[j]="^"+i[E]+"\\s*("+S+")$|^$";var B=o++;i[B]="^"+i[E]+"\\s*("+w+")$|^$";var $=o++;i[$]="(\\s*)"+i[E]+"\\s*("+S+"|"+i[A]+")",n[$]=new RegExp(i[$],"g");var q=o++;i[q]="^\\s*("+i[A]+")\\s+-\\s+("+i[A]+")\\s*$";var z=o++;i[z]="^\\s*("+i[R]+")\\s+-\\s+("+i[R]+")\\s*$";var V=o++;i[V]="(<|>)?=?\\s*\\*";for(var W=0;W<35;W++)r(W,i[W]),
|
835
|
+
n[W]||(n[W]=new RegExp(i[W]));function parse(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof SemVer)return e;if("string"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?n[T]:n[b]).test(e))return null;try{return new SemVer(e,t)}catch(e){return null}}function SemVer(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof SemVer){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof SemVer))return new SemVer(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var i=e.trim().match(t.loose?n[T]:n[b]);if(!i)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>a||this.major<0)throw new TypeError("Invalid major version");if(this.minor>a||this.minor<0)throw new TypeError("Invalid minor version")
|
836
|
+
;if(this.patch>a||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<a)return t}return e})):this.prerelease=[],this.build=i[5]?i[5].split("."):[],this.format()}t.parse=parse,t.valid=function valid(e,t){var r=parse(e,t);return r?r.version:null},t.clean=function clean(e,t){var r=parse(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null},t.SemVer=SemVer,SemVer.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},SemVer.prototype.toString=function(){return this.version},SemVer.prototype.compare=function(e){return r("SemVer.compare",this.version,this.options,e),e instanceof SemVer||(e=new SemVer(e,this.options)),this.compareMain(e)||this.comparePre(e)},SemVer.prototype.compareMain=function(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),
|
837
|
+
compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)},SemVer.prototype.comparePre=function(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var a=this.prerelease[t],n=e.prerelease[t];if(r("prerelease compare",t,a,n),void 0===a&&void 0===n)return 0;if(void 0===n)return 1;if(void 0===a)return-1;if(a!==n)return compareIdentifiers(a,n)}while(++t)},SemVer.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),
|
838
|
+
this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function inc(e,t,r,a){"string"==typeof r&&(a=r,r=void 0);try{return new SemVer(e,r).inc(t,a).version}catch(e){return null}},t.diff=function diff(e,t){if(eq(e,t))return null;var r=parse(e),a=parse(t),n=""
|
839
|
+
;if(r.prerelease.length||a.prerelease.length){n="pre";var i="prerelease"}for(var o in r)if(("major"===o||"minor"===o||"patch"===o)&&r[o]!==a[o])return n+o;return i},t.compareIdentifiers=compareIdentifiers;var H=/^[0-9]+$/;function compareIdentifiers(e,t){var r=H.test(e),a=H.test(t);return r&&a&&(e=+e,t=+t),e===t?0:r&&!a?-1:a&&!r?1:e<t?-1:1}function compare(e,t,r){return new SemVer(e,r).compare(new SemVer(t,r))}function gt(e,t,r){return compare(e,t,r)>0}function lt(e,t,r){return compare(e,t,r)<0}function eq(e,t,r){return 0===compare(e,t,r)}function neq(e,t,r){return 0!==compare(e,t,r)}function gte(e,t,r){return compare(e,t,r)>=0}function lte(e,t,r){return compare(e,t,r)<=0}function cmp(e,t,r,a){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return eq(e,r,a);case"!=":return neq(e,r,a);case">":return gt(e,r,a);case">=":
|
840
|
+
return gte(e,r,a);case"<":return lt(e,r,a);case"<=":return lte(e,r,a);default:throw new TypeError("Invalid operator: "+t)}}function Comparator(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof Comparator))return new Comparator(e,t);r("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===G?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}t.rcompareIdentifiers=function rcompareIdentifiers(e,t){return compareIdentifiers(t,e)},t.major=function major(e,t){return new SemVer(e,t).major},t.minor=function minor(e,t){return new SemVer(e,t).minor},t.patch=function patch(e,t){return new SemVer(e,t).patch},t.compare=compare,t.compareLoose=function compareLoose(e,t){return compare(e,t,!0)},t.rcompare=function rcompare(e,t,r){return compare(t,e,r)},t.sort=function sort(e,r){return e.sort((function(e,a){return t.compare(e,a,r)}))},
|
841
|
+
t.rsort=function rsort(e,r){return e.sort((function(e,a){return t.rcompare(e,a,r)}))},t.gt=gt,t.lt=lt,t.eq=eq,t.neq=neq,t.gte=gte,t.lte=lte,t.cmp=cmp,t.Comparator=Comparator;var G={};function Range(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Range)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new Range(e.raw,t);if(e instanceof Comparator)return new Range(e.value,t);if(!(this instanceof Range))return new Range(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((function(e){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function isX(e){return!e||"x"===e.toLowerCase()||"*"===e}function hyphenReplace(e,t,r,a,n,i,o,s,c,l,u,d,m){
|
842
|
+
return((t=isX(r)?"":isX(a)?">="+r+".0.0":isX(n)?">="+r+"."+a+".0":">="+t)+" "+(s=isX(c)?"":isX(l)?"<"+(+c+1)+".0.0":isX(u)?"<"+c+"."+(+l+1)+".0":d?"<="+c+"."+l+"."+u+"-"+d:"<="+s)).trim()}function testSet(e,t,a){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!a.includePrerelease){for(n=0;n<e.length;n++)if(r(e[n].semver),e[n].semver!==G&&e[n].semver.prerelease.length>0){var i=e[n].semver;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0}function satisfies(e,t,r){try{t=new Range(t,r)}catch(e){return!1}return t.test(e)}function outside(e,t,r,a){var n,i,o,s,c;switch(e=new SemVer(e,a),t=new Range(t,a),r){case">":n=gt,i=lte,o=lt,s=">",c=">=";break;case"<":n=lt,i=gte,o=gt,s="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(satisfies(e,t,a))return!1;for(var l=0;l<t.set.length;++l){var u=t.set[l],d=null,m=null;if(u.forEach((function(e){e.semver===G&&(e=new Comparator(">=0.0.0")),d=d||e,
|
843
|
+
m=m||e,n(e.semver,d.semver,a)?d=e:o(e.semver,m.semver,a)&&(m=e)})),d.operator===s||d.operator===c)return!1;if((!m.operator||m.operator===s)&&i(e,m.semver))return!1;if(m.operator===c&&o(e,m.semver))return!1}return!0}Comparator.prototype.parse=function(e){var t=this.options.loose?n[j]:n[B],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=r[1],"="===this.operator&&(this.operator=""),r[2]?this.semver=new SemVer(r[2],this.options.loose):this.semver=G},Comparator.prototype.toString=function(){return this.value},Comparator.prototype.test=function(e){return r("Comparator.test",e,this.options.loose),this.semver===G||("string"==typeof e&&(e=new SemVer(e,this.options)),cmp(e,this.operator,this.semver,this.options))},Comparator.prototype.intersects=function(e,t){if(!(e instanceof Comparator))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return r=new Range(e.value,t),
|
844
|
+
satisfies(this.value,r,t);if(""===e.operator)return r=new Range(this.value,t),satisfies(e.semver,r,t);var a=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),n=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,o=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=cmp(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=cmp(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return a||n||i&&o||s||c},t.Range=Range,Range.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},Range.prototype.toString=function(){return this.range},Range.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var a=t?n[z]:n[q];e=e.replace(a,hyphenReplace),
|
845
|
+
r("hyphen replace",e),e=e.replace(n[$],"$1$2$3"),r("comparator trim",e,n[$]),e=(e=(e=e.replace(n[N],"$1~")).replace(n[O],"$1^")).split(/\s+/).join(" ");var i=t?n[j]:n[B],o=e.split(" ").map((function(e){return function parseComparator(e,t){return r("comp",e,t),e=function replaceCarets(e,t){return e.trim().split(/\s+/).map((function(e){return function replaceCaret(e,t){r("caret",e,t);var a=t.loose?n[U]:n[F];return e.replace(a,(function(t,a,n,i,o){var s;return r("caret",e,t,a,n,i,o),isX(a)?s="":isX(n)?s=">="+a+".0.0 <"+(+a+1)+".0.0":isX(i)?s="0"===a?">="+a+"."+n+".0 <"+a+"."+(+n+1)+".0":">="+a+"."+n+".0 <"+(+a+1)+".0.0":o?(r("replaceCaret pr",o),s="0"===a?"0"===n?">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+n+"."+(+i+1):">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+(+n+1)+".0":">="+a+"."+n+"."+i+"-"+o+" <"+(+a+1)+".0.0"):(r("no pr"),s="0"===a?"0"===n?">="+a+"."+n+"."+i+" <"+a+"."+n+"."+(+i+1):">="+a+"."+n+"."+i+" <"+a+"."+(+n+1)+".0":">="+a+"."+n+"."+i+" <"+(+a+1)+".0.0"),r("caret return",s),s}))}(e,t)
|
846
|
+
})).join(" ")}(e,t),r("caret",e),e=function replaceTildes(e,t){return e.trim().split(/\s+/).map((function(e){return function replaceTilde(e,t){var a=t.loose?n[M]:n[L];return e.replace(a,(function(t,a,n,i,o){var s;return r("tilde",e,t,a,n,i,o),isX(a)?s="":isX(n)?s=">="+a+".0.0 <"+(+a+1)+".0.0":isX(i)?s=">="+a+"."+n+".0 <"+a+"."+(+n+1)+".0":o?(r("replaceTilde pr",o),s=">="+a+"."+n+"."+i+"-"+o+" <"+a+"."+(+n+1)+".0"):s=">="+a+"."+n+"."+i+" <"+a+"."+(+n+1)+".0",r("tilde return",s),s}))}(e,t)})).join(" ")}(e,t),r("tildes",e),e=function replaceXRanges(e,t){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function replaceXRange(e,t){e=e.trim();var a=t.loose?n[D]:n[k];return e.replace(a,(function(t,a,n,i,o,s){r("xRange",e,t,a,n,i,o,s);var c=isX(n),l=c||isX(i),u=l||isX(o);return"="===a&&u&&(a=""),c?t=">"===a||"<"===a?"<0.0.0":"*":a&&u?(l&&(i=0),o=0,">"===a?(a=">=",l?(n=+n+1,i=0,o=0):(i=+i+1,o=0)):"<="===a&&(a="<",l?n=+n+1:i=+i+1),
|
847
|
+
t=a+n+"."+i+"."+o):l?t=">="+n+".0.0 <"+(+n+1)+".0.0":u&&(t=">="+n+"."+i+".0 <"+n+"."+(+i+1)+".0"),r("xRange return",t),t}))}(e,t)})).join(" ")}(e,t),r("xrange",e),e=function replaceStars(e,t){return r("replaceStars",e,t),e.trim().replace(n[V],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(o=o.filter((function(e){return!!e.match(i)}))),o=o.map((function(e){return new Comparator(e,this.options)}),this)},Range.prototype.intersects=function(e,t){if(!(e instanceof Range))throw new TypeError("a Range is required");return this.set.some((function(r){return r.every((function(r){return e.set.some((function(e){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function toComparators(e,t){return new Range(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},Range.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new SemVer(e,this.options))
|
848
|
+
;for(var t=0;t<this.set.length;t++)if(testSet(this.set[t],e,this.options))return!0;return!1},t.satisfies=satisfies,t.maxSatisfying=function maxSatisfying(e,t,r){var a=null,n=null;try{var i=new Range(t,r)}catch(e){return null}return e.forEach((function(e){i.test(e)&&(a&&-1!==n.compare(e)||(n=new SemVer(a=e,r)))})),a},t.minSatisfying=function minSatisfying(e,t,r){var a=null,n=null;try{var i=new Range(t,r)}catch(e){return null}return e.forEach((function(e){i.test(e)&&(a&&1!==n.compare(e)||(n=new SemVer(a=e,r)))})),a},t.minVersion=function minVersion(e,t){e=new Range(e,t);var r=new SemVer("0.0.0");if(e.test(r))return r;if(r=new SemVer("0.0.0-0"),e.test(r))return r;r=null;for(var a=0;a<e.set.length;++a){e.set[a].forEach((function(e){var t=new SemVer(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!gt(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))
|
849
|
+
}if(r&&e.test(r))return r;return null},t.validRange=function validRange(e,t){try{return new Range(e,t).range||"*"}catch(e){return null}},t.ltr=function ltr(e,t,r){return outside(e,t,"<",r)},t.gtr=function gtr(e,t,r){return outside(e,t,">",r)},t.outside=outside,t.prerelease=function prerelease(e,t){var r=parse(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function intersects(e,t,r){return e=new Range(e,r),t=new Range(t,r),e.intersects(t)},t.coerce=function coerce(e){if(e instanceof SemVer)return e;if("string"!=typeof e)return null;var t=e.match(n[C]);if(null==t)return null;return parse(t[1]+"."+(t[2]||"0")+"."+(t[3]||"0"))}}(a_,a_.exports);const n_=kc,i_=Jl,o_=a_.exports,s_={npm:{"@angular/core":[{id:"SNYK-JS-ANGULARCORE-1070902",severity:"low",semver:{vulnerable:["<11.0.5",">=11.1.0-next.0 <11.1.0-next.3"]}}],angular:[{id:"SNYK-JS-ANGULAR-572020",severity:"high",semver:{vulnerable:["<1.8.0"]}},{id:"SNYK-JS-ANGULAR-570058",severity:"medium",semver:{
|
850
|
+
vulnerable:["<1.8.0"]}},{id:"SNYK-JS-ANGULAR-534884",severity:"high",semver:{vulnerable:[">=1.4.0-beta.6 <1.7.9"]}},{id:"SNYK-JS-ANGULAR-471885",severity:"medium",semver:{vulnerable:["<1.6.3"]}},{id:"SNYK-JS-ANGULAR-471882",severity:"medium",semver:{vulnerable:["<1.6.5"]}},{id:"SNYK-JS-ANGULAR-471879",severity:"medium",semver:{vulnerable:["<1.6.0-rc.0"]}},{id:"npm:angular:20180202",severity:"medium",semver:{vulnerable:["<1.6.9"]}},{id:"npm:angular:20171018",severity:"medium",semver:{vulnerable:["<1.6.7"]}},{id:"npm:angular:20160527",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.2.30"]}},{id:"npm:angular:20160122",severity:"medium",semver:{vulnerable:[">=1.3.0 <1.5.0-rc.2"]}},{id:"npm:angular:20140608",severity:"low",semver:{vulnerable:["<1.3.0"]}},{id:"npm:angular:20131113",severity:"high",semver:{vulnerable:["<1.2.2"]}},{id:"npm:angular:20140908",severity:"medium",semver:{vulnerable:["<1.3.0-rc.5"]}},{id:"npm:angular:20161101",severity:"medium",semver:{
|
851
|
+
vulnerable:[">=1.5.0 <1.5.9"]}},{id:"npm:angular:20150909",severity:"high",semver:{vulnerable:["<1.5.0-beta.2"]}},{id:"npm:angular:20151205",severity:"medium",semver:{vulnerable:["<1.5.0-rc.0"]}},{id:"npm:angular:20151130",severity:"medium",semver:{vulnerable:["<1.4.10"]}},{id:"npm:angular:20130622",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.2.0"]}},{id:"npm:angular:20150807-1",severity:"medium",semver:{vulnerable:[">=1.3.1 <1.5.0-beta.0"]}},{id:"npm:angular:20150807",severity:"high",semver:{vulnerable:[">=1.0.0 <1.5.0-beta.0"]}},{id:"npm:angular:20150315",severity:"medium",semver:{vulnerable:["<1.6.1"]}},{id:"npm:angular:20150310",severity:"high",semver:{vulnerable:["<1.4.0-beta.6"]}},{id:"npm:angular:20141104",severity:"medium",semver:{vulnerable:["<1.3.2"]}},{id:"npm:angular:20130621",severity:"medium",semver:{vulnerable:["<1.2.0"]}},{id:"npm:angular:20140909",severity:"high",semver:{vulnerable:[">=1.2.19 <1.2.27"]}},{id:"npm:angular:20130625",severity:"high",semver:{
|
852
|
+
vulnerable:["<1.1.5"]}}],backbone:[{id:"npm:backbone:20160523",severity:"medium",semver:{vulnerable:["<0.1.2"]}},{id:"npm:backbone:20110701",severity:"medium",semver:{vulnerable:["<0.5.0"]}}],bootstrap:[{id:"SNYK-JS-BOOTSTRAP-173700",severity:"medium",semver:{vulnerable:["<3.4.1",">=4.0.0 <4.3.1"]}},{id:"SNYK-JS-BOOTSTRAP-73560",severity:"medium",semver:{vulnerable:[">=4.0.0 <4.1.2"]}},{id:"SNYK-JS-BOOTSTRAP-72890",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"SNYK-JS-BOOTSTRAP-72889",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"npm:bootstrap:20180529",severity:"medium",semver:{vulnerable:["<3.4.0",">=4.0.0 <4.1.2"]}},{id:"npm:bootstrap:20160627",severity:"medium",semver:{vulnerable:["<3.4.0",">=4.0.0-alpha <4.0.0-beta.2"]}},{id:"npm:bootstrap:20120510",severity:"medium",semver:{vulnerable:["<2.1.0"]}}],dojo:[{id:"SNYK-JS-DOJO-1535223",severity:"high",semver:{vulnerable:["<1.17.0"]}},{id:"SNYK-JS-DOJO-559224",severity:"medium",semver:{
|
853
|
+
vulnerable:["<1.11.10",">=1.12.1 <1.12.8",">=1.13.0 <1.13.7",">=1.14.0 <1.14.6",">=1.15.0 <1.15.3",">=1.16.0 <1.16.2"]}},{id:"SNYK-JS-DOJO-174934",severity:"medium",semver:{vulnerable:[">=1.0.0 <1.0.3",">=1.1.0 <1.1.2",">=1.2.0 <1.2.4",">=1.3.0 <1.3.3",">=1.4.0 <1.4.2"]}},{id:"SNYK-JS-DOJO-174933",severity:"medium",semver:{vulnerable:["<1.2.0"]}},{id:"SNYK-JS-DOJO-72305",severity:"medium",semver:{vulnerable:[">=1.14.0-pre <1.14.0",">=1.13.0 <1.13.1",">=1.12.1 <1.12.4",">=1.11.0-rc1 <1.11.6","<1.10.10"]}},{id:"npm:dojo:20180818",severity:"medium",semver:{vulnerable:["<1.10.10",">=1.11.0 <1.11.6",">=1.12.0 <1.12.4",">=1.13.0 <1.13.1"]}},{id:"npm:dojo:20100614-6",severity:"medium",semver:{vulnerable:["<1.4.2"]}},{id:"npm:dojo:20100614",severity:"medium",semver:{vulnerable:[">=0.4.0 <0.4.4",">=1.0.0 <1.0.3",">=1.1.0 <1.1.2",">=1.2.0 <1.2.4",">=1.3.0 <1.3.3",">=1.4.0 <1.4.2"]}}],"foundation-sites":[{id:"npm:foundation-sites:20170802",severity:"medium",semver:{vulnerable:["<6.0.0"]}},{
|
854
|
+
id:"npm:foundation-sites:20150619",severity:"medium",semver:{vulnerable:["<5.5.3"]}},{id:"npm:foundation-sites:20120717",severity:"medium",semver:{vulnerable:[">=3.0.0 <3.0.6"]}}],"google-closure-library":[{id:"SNYK-JS-GOOGLECLOSURELIBRARY-561341",severity:"medium",semver:{vulnerable:["<20200315.0.0"]}},{id:"SNYK-JS-GOOGLECLOSURELIBRARY-174519",severity:"medium",semver:{vulnerable:[">=20190121.0.0 <20190301.0.0"]}}],gsap:[{id:"SNYK-JS-GSAP-1054614",severity:"high",semver:{vulnerable:["<3.6.0"]}}],handlebars:[{id:"SNYK-JS-HANDLEBARS-1279029",severity:"medium",semver:{vulnerable:["<4.7.7"]}},{id:"SNYK-JS-HANDLEBARS-1056767",severity:"high",semver:{vulnerable:["<4.7.7"]}},{id:"SNYK-JS-HANDLEBARS-567742",severity:"medium",semver:{vulnerable:["<4.6.0"]}},{id:"SNYK-JS-HANDLEBARS-534988",severity:"critical",semver:{vulnerable:[">=4.0.0 <4.5.3","<3.0.8"]}},{id:"SNYK-JS-HANDLEBARS-534478",severity:"high",semver:{vulnerable:[">=4.0.0 <4.5.3","<3.0.8"]}},{id:"SNYK-JS-HANDLEBARS-480388",
|
855
|
+
severity:"high",semver:{vulnerable:[">=4.0.0 <4.4.5"]}},{id:"SNYK-JS-HANDLEBARS-469063",severity:"high",semver:{vulnerable:[">=4.0.0 <4.3.0","<3.8.0"]}},{id:"SNYK-JS-HANDLEBARS-174183",severity:"high",semver:{vulnerable:[">=3.0.0 <3.0.7",">=4.1.0 <4.1.2",">=4.0.0 <4.0.14"]}},{id:"SNYK-JS-HANDLEBARS-173692",severity:"high",semver:{vulnerable:["<4.0.14",">=4.1.0 <4.1.2"]}},{id:"npm:handlebars:20151207",severity:"medium",semver:{vulnerable:["<4.0.0"]}},{id:"npm:handlebars:20110425",severity:"medium",semver:{vulnerable:["<=1.0.0-beta.3"]}}],highcharts:[{id:"SNYK-JS-HIGHCHARTS-1290057",severity:"medium",semver:{vulnerable:["<9.0.0"]}},{id:"SNYK-JS-HIGHCHARTS-1018906",severity:"medium",semver:{vulnerable:["<9.0.0"]}},{id:"SNYK-JS-HIGHCHARTS-571995",severity:"high",semver:{vulnerable:["<7.2.2",">=8.0.0 <8.1.1"]}},{id:"npm:highcharts:20180225",severity:"high",semver:{vulnerable:["<6.1.0"]}}],jquery:[{id:"SNYK-JS-JQUERY-569619",severity:"medium",semver:{vulnerable:["<1.9.0"]}},{
|
856
|
+
id:"SNYK-JS-JQUERY-567880",severity:"medium",semver:{vulnerable:[">=1.2.0 <3.5.0"]}},{id:"SNYK-JS-JQUERY-565129",severity:"medium",semver:{vulnerable:[">=1.5.1 <3.5.0"]}},{id:"SNYK-JS-JQUERY-174006",severity:"medium",semver:{vulnerable:["<3.4.0"]}},{id:"npm:jquery:20160529",severity:"low",semver:{vulnerable:[">=3.0.0-rc1 <3.0.0"]}},{id:"npm:jquery:20150627",severity:"medium",semver:{vulnerable:["<1.12.2",">=1.12.3 <2.2.0",">=2.2.3 <3.0.0"]}},{id:"npm:jquery:20140902",severity:"medium",semver:{vulnerable:[">=1.4.2 <1.6.2"]}},{id:"npm:jquery:20120206",severity:"medium",semver:{vulnerable:["<1.9.1"]}},{id:"npm:jquery:20110606",severity:"medium",semver:{vulnerable:["<1.6.3"]}}],"jquery-mobile":[{id:"SNYK-JS-JQUERYMOBILE-174599",severity:"medium",semver:{vulnerable:["<=1.5.0-alpha.1"]}},{id:"npm:jquery-mobile:20120802",severity:"medium",semver:{vulnerable:["<1.2.0"]}}],"jquery-ui":[{id:"SNYK-JS-JQUERYUI-1767767",severity:"high",semver:{vulnerable:["<1.13.0"]}},{
|
857
|
+
id:"SNYK-JS-JQUERYUI-1767175",severity:"high",semver:{vulnerable:["<1.13.0"]}},{id:"SNYK-JS-JQUERYUI-1767167",severity:"high",semver:{vulnerable:["<1.13.0"]}},{id:"npm:jquery-ui:20121127",severity:"medium",semver:{vulnerable:["<1.10.0"]}},{id:"npm:jquery-ui:20100903",severity:"medium",semver:{vulnerable:["<1.10.0"]}},{id:"npm:jquery-ui:20160721",severity:"high",semver:{vulnerable:["<1.12.0"]}}],knockout:[{id:"npm:knockout:20180213",severity:"medium",semver:{vulnerable:["<3.5.0-beta"]}},{id:"npm:knockout:20130701",severity:"medium",semver:{vulnerable:[">=2.1.0-pre <3.0.0"]}}],lodash:[{id:"SNYK-JS-LODASH-1040724",severity:"high",semver:{vulnerable:["<4.17.21"]}},{id:"SNYK-JS-LODASH-1018905",severity:"medium",semver:{vulnerable:["<4.17.21"]}},{id:"SNYK-JS-LODASH-608086",severity:"high",semver:{vulnerable:["<4.17.17"]}},{id:"SNYK-JS-LODASH-567746",severity:"high",semver:{vulnerable:["<4.17.20"]}},{id:"SNYK-JS-LODASH-450202",severity:"high",semver:{vulnerable:["<4.17.12"]}},{
|
858
|
+
id:"SNYK-JS-LODASH-73639",severity:"medium",semver:{vulnerable:["<4.17.11"]}},{id:"SNYK-JS-LODASH-73638",severity:"high",semver:{vulnerable:["<4.17.11"]}},{id:"npm:lodash:20180130",severity:"medium",semver:{vulnerable:["<4.17.5"]}}],moment:[{id:"SNYK-JS-MOMENT-2440688",severity:"high",semver:{vulnerable:["<2.29.2"]}},{id:"npm:moment:20170905",severity:"low",semver:{vulnerable:["<2.19.3"]}},{id:"npm:moment:20161019",severity:"medium",semver:{vulnerable:["<2.15.2"]}},{id:"npm:moment:20160126",severity:"medium",semver:{vulnerable:["<2.11.2"]}}],mustache:[{id:"npm:mustache:20151207",severity:"medium",semver:{vulnerable:["<2.2.1"]}},{id:"npm:mustache:20110814",severity:"medium",semver:{vulnerable:["< 0.3.1"]}}],next:[{id:"SNYK-JS-NEXT-2405694",severity:"medium",semver:{vulnerable:[">=10.0.0 <12.1.0"]}},{id:"SNYK-JS-NEXT-2388583",severity:"medium",semver:{vulnerable:[">=12.0.0 <12.0.9"]}},{id:"SNYK-JS-NEXT-2312745",severity:"high",semver:{vulnerable:[">=12.0.0 <12.0.5",">=11.1.0 <11.1.3"]}
|
859
|
+
},{id:"SNYK-JS-NEXT-1577139",severity:"medium",semver:{vulnerable:[">=10.0.0 <11.1.1"]}},{id:"SNYK-JS-NEXT-1540422",severity:"medium",semver:{vulnerable:["<11.1.0"]}},{id:"SNYK-JS-NEXT-1063481",severity:"medium",semver:{vulnerable:[">=9.5.0 <9.5.4"]}},{id:"SNYK-JS-NEXT-571938",severity:"high",semver:{vulnerable:["<5.1.0"]}},{id:"SNYK-JS-NEXT-561584",severity:"medium",semver:{vulnerable:["<9.3.2"]}},{id:"SNYK-JS-NEXT-174590",severity:"high",semver:{vulnerable:["<2.4.1"]}},{id:"SNYK-JS-NEXT-72454",severity:"medium",semver:{vulnerable:[">=7.0.0 <7.0.2"]}},{id:"npm:next:20180124",severity:"high",semver:{vulnerable:["<4.2.3"]}},{id:"npm:next:20170607",severity:"medium",semver:{vulnerable:["<2.4.3"]}},{id:"npm:next:20170601",severity:"high",semver:{vulnerable:["<2.4.1",">=3.0.0-beta1 <3.0.0-beta7"]}}],react:[{id:"npm:react:20150318",severity:"high",semver:{vulnerable:[">=0.0.1 <0.14.0"]}},{id:"npm:react:20131217",severity:"medium",semver:{vulnerable:[">=0.5.0 <0.5.2",">=0.4.0 <0.4.2"]}}],
|
860
|
+
riot:[{id:"npm:riot:20131114",severity:"medium",semver:{vulnerable:["<0.9.6"]}}],"socket.io":[{id:"SNYK-JS-SOCKETIO-1024859",severity:"medium",semver:{vulnerable:["<2.4.0"]}},{id:"npm:socket.io:20120417",severity:"medium",semver:{vulnerable:["<0.9.6"]}},{id:"npm:socket.io:20120323",severity:"medium",semver:{vulnerable:["<0.9.7"]}}],three:[{id:"SNYK-JS-THREE-1064931",severity:"high",semver:{vulnerable:["<0.125.0"]}}],underscore:[{id:"SNYK-JS-UNDERSCORE-1080984",severity:"medium",semver:{vulnerable:[">=1.13.0-0 <1.13.0-2",">=1.3.2 <1.12.1"]}}],vue:[{id:"npm:vue:20170829",severity:"medium",semver:{vulnerable:["<2.4.3"]}},{id:"npm:vue:20170401",severity:"medium",semver:{vulnerable:["<2.3.0-beta.1"]}},{id:"npm:vue:20180802",severity:"medium",semver:{vulnerable:["<2.5.17"]}},{id:"npm:vue:20180222",severity:"low",semver:{vulnerable:["<2.5.14"]}}],yui:[{id:"npm:yui:20130604",severity:"medium",semver:{vulnerable:[">=3.0.0 <3.10.1","=3.10.2"]}},{id:"npm:yui:20130515",severity:"medium",semver:{
|
861
|
+
vulnerable:["<3.10.0 >=3.0.0"]}},{id:"npm:yui:20121030",severity:"medium",semver:{vulnerable:["<3.0.0 >=2.4.0"]}},{id:"npm:yui:20120428",severity:"medium",semver:{vulnerable:["<3.5.1 >=3.5.0-PR1"]}},{id:"npm:yui:20101025",severity:"medium",semver:{vulnerable:["<2.8.2 >=2.4.0"]}}]}},c_=oi,l_={title:"Avoids front-end JavaScript libraries with known security vulnerabilities",failureTitle:"Includes front-end JavaScript libraries with known security vulnerabilities",description:"Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. [Learn more](https://web.dev/no-vulnerable-libraries/).",displayValue:"{itemCount, plural,\n =1 {1 vulnerability detected}\n other {# vulnerabilities detected}\n }",columnVersion:"Library Version",columnVuln:"Vulnerability Count",columnSeverity:"Highest Severity"
|
862
|
+
},u_=c_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/no-vulnerable-libraries.js",l_),d_=/^(\d+\.\d+\.\d+)[^-0-9]+/,m_={low:u_(c_.UIStrings.itemSeverityLow),medium:u_(c_.UIStrings.itemSeverityMedium),high:u_(c_.UIStrings.itemSeverityHigh)};class NoVulnerableLibrariesAudit extends n_{static get meta(){return{id:"no-vulnerable-libraries",title:u_(l_.title),failureTitle:u_(l_.failureTitle),description:u_(l_.description),requiredArtifacts:["Stacks"]}}static get snykDB(){return s_}static get severityMap(){return{high:3,medium:2,low:1}}static normalizeVersion(e){if(!e)return e;if(o_.valid(e))return e;if(/^\d+\.\d+$/.test(e))return`${e}.0`;const t=e.match(d_);return t?t[1]:e}static getVulnerabilities(e,t,r){if(!t.npm||!r.npm[t.npm])return[];try{o_.satisfies(e,"*")}catch(e){return e.pkgName=t.npm,i_.captureException(e,{level:"warning"}),[]}return r.npm[t.npm].filter((t=>t.semver.vulnerable.some((t=>o_.satisfies(e,t))))).map((r=>({severity:m_[r.severity],
|
863
|
+
numericSeverity:this.severityMap[r.severity],library:`${t.name}@${e}`,url:"https://snyk.io/vuln/"+r.id})))}static highestSeverity(e){return e.sort(((e,t)=>t.numericSeverity-e.numericSeverity))[0].severity}static audit(e){const t=e.Stacks.filter((e=>"js"===e.detector)),r=NoVulnerableLibrariesAudit.snykDB;if(!t.length)return{score:1};let a=0;const n=[];for(const e of t){const t=this.normalizeVersion(e.version)||"",i=this.getVulnerabilities(t,e,r),o=i.length;let s;a+=o,i.length>0&&(s=this.highestSeverity(i),n.push({highestSeverity:s,vulnCount:o,detectedLib:{text:e.name+"@"+t,url:`https://snyk.io/vuln/npm:${e.npm}?lh=${t}&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit`,type:"link"}}))}let i;a>0&&(i=u_(l_.displayValue,{itemCount:a}));const o=[{key:"detectedLib",itemType:"link",text:u_(l_.columnVersion)},{key:"vulnCount",itemType:"text",text:u_(l_.columnVuln)},{key:"highestSeverity",itemType:"text",text:u_(l_.columnSeverity)}],s=n_.makeTableDetails(o,n,{});return{
|
864
|
+
score:Number(0===a),displayValue:i,details:s}}}r_.exports=NoVulnerableLibrariesAudit,r_.exports.UIStrings=l_;var p_={exports:{}};const h_=Fx,g_=oi,f_={title:"Avoids requesting the notification permission on page load",failureTitle:"Requests the notification permission on page load",description:"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more](https://web.dev/notification-on-start/)."},y_=g_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/notification-on-start.js",f_);p_.exports=class NotificationOnStart extends h_{static get meta(){return{id:"notification-on-start",title:y_(f_.title),failureTitle:y_(f_.failureTitle),description:y_(f_.description),supportedModes:["navigation"],requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await h_.getViolationResults(e,t,/notification permission/),a=[{key:"source",
|
865
|
+
itemType:"source-location",text:y_(g_.UIStrings.columnSource)}],n=h_.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},p_.exports.UIStrings=f_;var v_={exports:{}};const b_=kc,w_=oi,S_={title:"Allows users to paste into password fields",failureTitle:"Prevents users to paste into password fields",description:"Preventing password pasting undermines good security policy. [Learn more](https://web.dev/password-inputs-can-be-pasted-into/)."},T_=w_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/password-inputs-can-be-pasted-into.js",S_);v_.exports=class PasswordInputsCanBePastedIntoAudit extends b_{static get meta(){return{id:"password-inputs-can-be-pasted-into",title:T_(S_.title),failureTitle:T_(S_.failureTitle),description:T_(S_.description),requiredArtifacts:["PasswordInputsWithPreventedPaste"]}}static audit(e){const t=e.PasswordInputsWithPreventedPaste,r=[];t.forEach((e=>{r.push({node:b_.makeNodeItem(e.node)})}));const a=[{key:"node",itemType:"node",
|
866
|
+
text:T_(w_.UIStrings.columnFailingElem)}];return{score:Number(0===t.length),details:b_.makeTableDetails(a,r)}}},v_.exports.UIStrings=S_;var E_={exports:{}};const x_=kc,A_=uw,R_=ji,k_=Ib,D_=Tb,C_=Ki,I_=Lo,N_=Dl,L_=eb,M_=oi,P_={title:"Use HTTP/2",description:"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. [Learn more](https://web.dev/uses-http2/).",displayValue:"{itemCount, plural,\n =1 {1 request not served via HTTP/2}\n other {# requests not served via HTTP/2}\n }",columnProtocol:"Protocol"},O_=M_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/uses-http2.js",P_),F_=new Set([C_.TYPES.Document,C_.TYPES.Font,C_.TYPES.Image,C_.TYPES.Stylesheet,C_.TYPES.Script,C_.TYPES.Media]);class UsesHTTP2Audit extends x_{static get meta(){return{id:"uses-http2",title:O_(P_.title),description:O_(P_.description),scoreDisplayMode:x_.SCORING_MODES.NUMERIC,supportedModes:["timespan","navigation"],
|
867
|
+
requiredArtifacts:["URL","devtoolsLogs","traces","GatherContext"]}}static computeWasteWithTTIGraph(e,t,r){const a=new Set(e.map((e=>e.url))),n=r.simulate(t,{label:"uses-http2-before",flexibleOrdering:true}),i=new Map;t.traverse((e=>{"network"===e.type&&a.has(e.record.url)&&(i.set(e.record.requestId,e.record.protocol),e.record.protocol="h2")}));const o=r.simulate(t,{label:"uses-http2-after",flexibleOrdering:true});t.traverse((e=>{if("network"!==e.type)return;const t=i.get(e.record.requestId);void 0!==t&&(e.record.protocol=t)}));const s=n.timeInMs-o.timeInMs,c=D_.getLastLongTaskEndTime(n.nodeTimings)-D_.getLastLongTaskEndTime(o.nodeTimings),l=Math.max(c,s);return 10*Math.round(Math.max(l,0)/10)}static isStaticAsset(e){if(!F_.has(e.resourceType))return!1;if(e.resourceSize<100){if(A_.getEntity(e.url))return!1}return!0}static determineNonHttp2Resources(e){const t=[],r=new Set,a=new Map;for(const t of e){if(!UsesHTTP2Audit.isStaticAsset(t))continue
|
868
|
+
;if(R_.isLikeLocalhost(t.parsedURL.host))continue;const e=a.get(t.parsedURL.securityOrigin)||[];e.push(t),a.set(t.parsedURL.securityOrigin,e)}for(const n of e){if(r.has(n.url))continue;if(n.fetchedViaServiceWorker)continue;if(!/HTTP\/[01][.\d]?/i.test(n.protocol))continue;(a.get(n.parsedURL.securityOrigin)||[]).length<6||(r.add(n.url),t.push({protocol:n.protocol,url:n.url}))}return t}static async audit(e,t){const r=e.traces[x_.DEFAULT_PASS],a=e.devtoolsLogs[x_.DEFAULT_PASS],n=await I_.request(a,t),i=UsesHTTP2Audit.determineNonHttp2Resources(n);let o;if(i.length>0&&(o=O_(P_.displayValue,{itemCount:i.length})),"timespan"===e.GatherContext.gatherMode){const e=[{key:"url",itemType:"url",text:O_(M_.UIStrings.columnURL)},{key:"protocol",itemType:"text",text:O_(P_.columnProtocol)}],t=x_.makeTableDetails(e,i);return{displayValue:o,score:i.length?0:1,details:t}}const s={devtoolsLog:a,settings:t?.settings||{}},c=await L_.request({trace:r,devtoolsLog:a
|
869
|
+
},t),l=await N_.request(s,t),u=UsesHTTP2Audit.computeWasteWithTTIGraph(i,c,l),d=[{key:"url",valueType:"url",label:O_(M_.UIStrings.columnURL)},{key:"protocol",valueType:"text",label:O_(P_.columnProtocol)}],m=x_.makeOpportunityDetails(d,i,u);return{displayValue:o,numericValue:u,numericUnit:"millisecond",score:k_.scoreForWastedMs(u),details:m}}}E_.exports=UsesHTTP2Audit,E_.exports.UIStrings=P_;var U_={exports:{}};const j_=Fx,B_=oi,$_={title:"Uses passive listeners to improve scrolling performance",failureTitle:"Does not use passive listeners to improve scrolling performance",description:"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more](https://web.dev/uses-passive-event-listeners/)."},q_=B_.createMessageInstanceIdFn("lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js",$_);U_.exports=class PassiveEventsAudit extends j_{static get meta(){return{id:"uses-passive-event-listeners",title:q_($_.title),
|
870
|
+
failureTitle:q_($_.failureTitle),description:q_($_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=await j_.getViolationResults(e,t,/passive event listener/),a=[{key:"source",itemType:"source-location",text:q_(B_.UIStrings.columnSource)}],n=j_.makeTableDetails(a,r);return{score:Number(0===r.length),details:n}}},U_.exports.UIStrings=$_;var z_={exports:{}};const V_=on.default,W_=kc,H_=jb,G_=oi,Y_={title:"No browser errors logged to the console",failureTitle:"Browser errors were logged to the console",description:"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more](https://web.dev/errors-in-console/)"},K_=G_.createMessageInstanceIdFn("lighthouse-core/audits/errors-in-console.js",Y_);class ErrorLogs extends W_{static get meta(){return{id:"errors-in-console",title:K_(Y_.title),failureTitle:K_(Y_.failureTitle),
|
871
|
+
description:K_(Y_.description),requiredArtifacts:["ConsoleMessages","SourceMaps","ScriptElements"]}}static get defaultOptions(){return{ignoredPatterns:["ERR_BLOCKED_BY_CLIENT.Inspector"]}}static filterAccordingToOptions(e,t){const{ignoredPatterns:r,...a}=t,n=Object.keys(a);return n.length&&V_.warn(this.meta.id,"Unrecognized options",n),r?e.filter((({description:e})=>{if(!e)return!0;for(const t of r){if(t instanceof RegExp&&t.test(e))return!1;if("string"==typeof t&&e.includes(t))return!1}return!0})):e}static async audit(e,t){const r=t.options,a=await H_.request(e,t),n=e.ConsoleMessages.filter((e=>"error"===e.level)).map((e=>{const t=a.find((t=>t.script.src===e.url));return{source:e.source,description:e.text,sourceLocation:W_.makeSourceLocationFromConsoleMessage(e,t)}})),i=ErrorLogs.filterAccordingToOptions(n,r).sort(((e,t)=>(e.description||"").localeCompare(t.description||""))),o=[{key:"sourceLocation",itemType:"source-location",text:K_(G_.UIStrings.columnSource)},{key:"description",
|
872
|
+
itemType:"code",text:K_(G_.UIStrings.columnDescription)}],s=W_.makeTableDetails(o,i),c=i.length;return{score:Number(0===c),details:s}}}z_.exports=ErrorLogs,z_.exports.UIStrings=Y_;const J_=Ao;var X_=J_(class Screenshots$1{static async compute_(e){return e.traceEvents.filter((e=>"Screenshot"===e.name)).map((e=>({timestamp:e.ts,datauri:`data:image/jpeg;base64,${e.args.snapshot}`})))}},null);const Z_=kc,Q_=vi.exports,eA=Yp,tA=X_;var rA=class FinalScreenshot extends Z_{static get meta(){return{id:"final-screenshot",scoreDisplayMode:Z_.SCORING_MODES.INFORMATIVE,title:"Final Screenshot",description:"The last screenshot captured of the pageload.",requiredArtifacts:["traces","GatherContext"]}}static async audit(e,t){const r=e.traces[Z_.DEFAULT_PASS],a=await eA.request(r,t),n=await tA.request(r,t),{timeOrigin:i}=a.timestamps,o=n[n.length-1];if(!o){if("timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw new Q_(Q_.errors.NO_SCREENSHOTS)}return{score:1,details:{
|
873
|
+
type:"screenshot",timing:Math.round((o.timestamp-i)/1e3),timestamp:o.timestamp,data:o.datauri}}}},aA={exports:{}};const nA=kc,iA=ji,oA=/^(block|fallback|optional|swap)$/,sA=/url\((.*?)\)/,cA=new RegExp(sA,"g"),lA=oi,uA=Jl,dA=Lo,mA={title:"All text remains visible during webfont loads",failureTitle:"Ensure text remains visible during webfont load",description:"Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://web.dev/font-display/).",undeclaredFontOriginWarning:"{fontCountForOrigin, plural, =1 {Lighthouse was unable to automatically check the `font-display` value for the origin {fontOrigin}.} other {Lighthouse was unable to automatically check the `font-display` values for the origin {fontOrigin}.}}"},pA=lA.createMessageInstanceIdFn("lighthouse-core/audits/font-display.js",mA);class FontDisplay$1 extends nA{static get meta(){return{id:"font-display",title:pA(mA.title),failureTitle:pA(mA.failureTitle),
|
874
|
+
description:pA(mA.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","CSSUsage","URL"]}}static findFontDisplayDeclarations(e,t){const r=new Set,a=new Set;for(const n of e.CSSUsage.stylesheets){const i=n.content.replace(/(\r|\n)+/g," ").match(/@font-face\s*{(.*?)}/g)||[];for(const o of i){const i=o.match(cA);if(!i)continue;const s=o.match(/font-display\s*:\s*(\w+)\s*(;|\})/)?.[1]||"",c=t.test(s)?r:a,l=i.map((e=>e.match(sA)[1].trim())).map((e=>/^('|").*\1$/.test(e)?e.substr(1,e.length-2):e));for(const t of l)try{const r=iA.isValid(n.header.sourceURL)?n.header.sourceURL:e.URL.finalUrl,a=new iA(t,r);c.add(a.href)}catch(e){uA.captureException(e,{tags:{audit:this.meta.id}})}}}return{passingURLs:r,failingURLs:a}}static getWarningsForFontUrls(e){const t=new Map;for(const r of e){const e=iA.getOrigin(r);if(!e)continue;const a=t.get(e)||0;t.set(e,a+1)}return[...t].map((([e,t])=>pA(mA.undeclaredFontOriginWarning,{fontCountForOrigin:t,fontOrigin:e})))}
|
875
|
+
static async audit(e,t){const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await dA.request(r,t),{passingURLs:n,failingURLs:i}=FontDisplay$1.findFontDisplayDeclarations(e,oA),o=[],s=a.filter((e=>"Font"===e.resourceType)).filter((e=>!/^data:/.test(e.url))).filter((e=>!/^blob:/.test(e.url))).filter((e=>!!i.has(e.url)||(n.has(e.url)||o.push(e.url),!1))).map((e=>{const t=Math.min(1e3*(e.endTime-e.startTime),3e3);return{url:e.url,wastedMs:t}})),c=[{key:"url",itemType:"url",text:pA(lA.UIStrings.columnURL)},{key:"wastedMs",itemType:"ms",text:pA(lA.UIStrings.columnWastedMs)}],l=nA.makeTableDetails(c,s);return{score:Number(0===s.length),details:l,warnings:FontDisplay$1.getWarningsForFontUrls(o)}}}aA.exports=FontDisplay$1,aA.exports.UIStrings=mA;
|
879
876
|
/**
|
880
877
|
* @license Copyright 2020 Google Inc. All Rights Reserved.
|
881
878
|
* 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
|
882
879
|
* 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.
|
883
880
|
*/
|
884
|
-
const
|
885
|
-
failureTitle:
|
886
|
-
itemType:"url",text:
|
887
|
-
return!(e.displayedWidth<=1||e.displayedHeight<=1)&&(!!(e.naturalDimensions&&e.naturalDimensions.width&&e.naturalDimensions.height)&&("image/svg+xml"!==
|
888
|
-
actualSize:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}`,actualPixels:e.naturalDimensions.width*e.naturalDimensions.height,expectedSize:`${r} x ${a}`,expectedPixels:r*a}}function quantizeDpr(e){return e>=2?2:e>=1.5?1.5:1}
|
889
|
-
}(t.clientRect,e.ViewportDimensions))).map((e=>getResult(e,t))),a=[{key:"node",itemType:"node",text:""},{key:"url",itemType:"url",text:
|
890
|
-
const r=t.icons.value,a=[];return r.filter((e=>{const t=e.value.type.value;if(t)return"image/png"===t;const r=e.value.src.value;return r&&new
|
891
|
-
failureText:"Manifest does not have a PNG icon of at least 512px",validate:e=>
|
892
|
-
},{id:"hasName",failureText:"Manifest does not have `name`",validate:e=>!!e.name.value},{id:"hasMaskableIcon",failureText:"Manifest does not have at least one icon that is maskable",validate:e=>
|
881
|
+
const hA=kc;var gA=class FullPageScreenshot extends hA{static get meta(){return{id:"full-page-screenshot",scoreDisplayMode:hA.SCORING_MODES.INFORMATIVE,title:"Full-page screenshot",description:"A full-height screenshot of the final rendered page",requiredArtifacts:["FullPageScreenshot"]}}static async audit(e){return e.FullPageScreenshot?{score:1,details:{type:"full-page-screenshot",...e.FullPageScreenshot}}:{score:0,notApplicable:!0}}},fA={exports:{}};const yA=kc,vA=ji,bA=oi,wA={title:"Displays images with correct aspect ratio",failureTitle:"Displays images with incorrect aspect ratio",description:"Image display dimensions should match natural aspect ratio. [Learn more](https://web.dev/image-aspect-ratio/).",columnDisplayed:"Aspect Ratio (Displayed)",columnActual:"Aspect Ratio (Actual)"},SA=bA.createMessageInstanceIdFn("lighthouse-core/audits/image-aspect-ratio.js",wA);class ImageAspectRatio extends yA{static get meta(){return{id:"image-aspect-ratio",title:SA(wA.title),
|
882
|
+
failureTitle:SA(wA.failureTitle),description:SA(wA.description),requiredArtifacts:["ImageElements"]}}static computeAspectRatios(e){const t=vA.elideDataURI(e.src),r=e.naturalDimensions.width/e.naturalDimensions.height,a=e.displayedWidth/e.displayedHeight,n=e.displayedWidth/r,i=Math.abs(n-e.displayedHeight)<2;return{url:t,node:yA.makeNodeItem(e.node),displayedAspectRatio:`${e.displayedWidth} x ${e.displayedHeight}\n (${a.toFixed(2)})`,actualAspectRatio:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}\n (${r.toFixed(2)})`,doRatiosMatch:i}}static audit(e){const t=e.ImageElements,r=[];t.filter((e=>!e.isCss&&"image/svg+xml"!==vA.guessMimeType(e.src)&&e.naturalDimensions&&e.naturalDimensions.height>5&&e.naturalDimensions.width>5&&e.displayedWidth&&e.displayedHeight&&"fill"===e.computedStyles.objectFit)).forEach((e=>{const t=e,a=ImageAspectRatio.computeAspectRatios(t);a.doRatiosMatch||r.push(a)}));const a=[{key:"node",itemType:"node",text:""},{key:"url",
|
883
|
+
itemType:"url",text:SA(bA.UIStrings.columnURL)},{key:"displayedAspectRatio",itemType:"text",text:SA(wA.columnDisplayed)},{key:"actualAspectRatio",itemType:"text",text:SA(wA.columnActual)}];return{score:Number(0===r.length),details:yA.makeTableDetails(a,r)}}}fA.exports=ImageAspectRatio,fA.exports.UIStrings=wA;var TA={exports:{}};const EA=kc,xA=ji,_A=oi,AA={title:"Serves images with appropriate resolution",failureTitle:"Serves images with low resolution",description:"Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn more](https://web.dev/serve-responsive-images/).",columnDisplayed:"Displayed size",columnActual:"Actual size",columnExpected:"Expected size"},RA=_A.createMessageInstanceIdFn("lighthouse-core/audits/image-size-responsive.js",AA);function isCandidate(e){
|
884
|
+
return!(e.displayedWidth<=1||e.displayedHeight<=1)&&(!!(e.naturalDimensions&&e.naturalDimensions.width&&e.naturalDimensions.height)&&("image/svg+xml"!==xA.guessMimeType(e.src)&&(!e.isCss&&("fill"===e.computedStyles.objectFit&&(!["pixelated","crisp-edges"].includes(e.computedStyles.imageRendering)&&!/ \d+(\.\d+)?x/.test(e.srcset))))))}function imageHasNaturalDimensions(e){return!!e.naturalDimensions}function imageHasRightSize(e,t){const[r,a]=function allowedImageSize(e,t,r){let a=1;(e>64||t>64)&&(a=.75);const n=quantizeDpr(r),i=Math.ceil(a*n*e),o=Math.ceil(a*n*t);return[i,o]}(e.displayedWidth,e.displayedHeight,t);return e.naturalDimensions.width>=r&&e.naturalDimensions.height>=a}function getResult(e,t){const[r,a]=function expectedImageSize(e,t,r){const a=Math.ceil(quantizeDpr(r)*e),n=Math.ceil(quantizeDpr(r)*t);return[a,n]}(e.displayedWidth,e.displayedHeight,t);return{url:xA.elideDataURI(e.src),node:EA.makeNodeItem(e.node),displayedSize:`${e.displayedWidth} x ${e.displayedHeight}`,
|
885
|
+
actualSize:`${e.naturalDimensions.width} x ${e.naturalDimensions.height}`,actualPixels:e.naturalDimensions.width*e.naturalDimensions.height,expectedSize:`${r} x ${a}`,expectedPixels:r*a}}function quantizeDpr(e){return e>=2?2:e>=1.5?1.5:1}TA.exports=class ImageSizeResponsive extends EA{static get meta(){return{id:"image-size-responsive",title:RA(AA.title),failureTitle:RA(AA.failureTitle),description:RA(AA.description),requiredArtifacts:["ImageElements","ViewportDimensions"]}}static audit(e){const t=e.ViewportDimensions.devicePixelRatio,r=Array.from(e.ImageElements).filter(isCandidate).filter(imageHasNaturalDimensions).filter((e=>!imageHasRightSize(e,t))).filter((t=>function isVisible(e,t){return(e.bottom-e.top)*(e.right-e.left)>0&&e.top<=t.innerHeight&&e.bottom>=0&&e.left<=t.innerWidth&&e.right>=0}(t.clientRect,e.ViewportDimensions))).filter((t=>function isSmallerThanViewport(e,t){return e.bottom-e.top<=t.innerHeight&&e.right-e.left<=t.innerWidth
|
886
|
+
}(t.clientRect,e.ViewportDimensions))).map((e=>getResult(e,t))),a=[{key:"node",itemType:"node",text:""},{key:"url",itemType:"url",text:RA(_A.UIStrings.columnURL)},{key:"displayedSize",itemType:"text",text:RA(AA.columnDisplayed)},{key:"actualSize",itemType:"text",text:RA(AA.columnActual)},{key:"expectedSize",itemType:"text",text:RA(AA.columnExpected)}],n=function sortResultsBySizeDelta(e){return e.sort(((e,t)=>t.expectedPixels-t.actualPixels-(e.expectedPixels-e.actualPixels)))}(function deduplicateResultsByUrl(e){e.sort(((e,t)=>e.url===t.url?0:e.url<t.url?-1:1));const t=[];for(const r of e){const e=t[t.length-1];e&&e.url===r.url?e.expectedPixels<r.expectedPixels&&(t[t.length-1]=r):t.push(r)}return t}(r));return{score:Number(0===r.length),details:EA.makeTableDetails(a,n)}}},TA.exports.UIStrings=AA;var kA={exports:{}};const DA=ji;const CA=Ao,IA={doExist:function doExist(e){return!(!e||!e.icons)&&0!==e.icons.value.length},pngSizedAtLeast:function pngSizedAtLeast(e,t){
|
887
|
+
const r=t.icons.value,a=[];return r.filter((e=>{const t=e.value.type.value;if(t)return"image/png"===t;const r=e.value.src.value;return r&&new DA(r).pathname.endsWith(".png")})).forEach((e=>{e.value.sizes.value&&a.push(...e.value.sizes.value)})),a.filter((e=>/\d+x\d+/.test(e))).filter((t=>{const r=t.split(/x/i),a=[parseFloat(r[0]),parseFloat(r[1])];return a[0]>=e&&a[1]>=e&&a[0]===a[1]}))},containsMaskableIcon:function containsMaskableIcon(e){return e.icons.value.some((e=>e.value.purpose?.value&&e.value.purpose.value.includes("maskable")))}},NA=["minimal-ui","fullscreen","standalone"];class ManifestValues$4{static get manifestChecks(){return[{id:"hasStartUrl",failureText:"Manifest does not contain a `start_url`",validate:e=>!!e.start_url.value},{id:"hasIconsAtLeast144px",failureText:"Manifest does not have a PNG icon of at least 144px",validate:e=>IA.doExist(e)&&IA.pngSizedAtLeast(144,e).length>0},{id:"hasIconsAtLeast512px",
|
888
|
+
failureText:"Manifest does not have a PNG icon of at least 512px",validate:e=>IA.doExist(e)&&IA.pngSizedAtLeast(512,e).length>0},{id:"fetchesIcon",failureText:"Manifest icon failed to be fetched",validate:(e,t)=>{const r=["cannot-download-icon","no-icon-available"];return IA.doExist(e)&&!t.some((e=>r.includes(e.errorId)))}},{id:"hasPWADisplayValue",failureText:"Manifest's `display` value is not one of: "+NA.join(" | "),validate:e=>NA.includes(e.display.value)},{id:"hasBackgroundColor",failureText:"Manifest does not have `background_color`",validate:e=>!!e.background_color.value},{id:"hasThemeColor",failureText:"Manifest does not have `theme_color`",validate:e=>!!e.theme_color.value},{id:"hasShortName",failureText:"Manifest does not have `short_name`",validate:e=>!!e.short_name.value},{id:"shortNameLength",failureText:"Manifest's `short_name` is too long (>12 characters) to be displayed on a homescreen without truncation",validate:e=>!!e.short_name.value&&e.short_name.value.length<=12
|
889
|
+
},{id:"hasName",failureText:"Manifest does not have `name`",validate:e=>!!e.name.value},{id:"hasMaskableIcon",failureText:"Manifest does not have at least one icon that is maskable",validate:e=>IA.doExist(e)&&IA.containsMaskableIcon(e)}]}static async compute_({WebAppManifest:e,InstallabilityErrors:t}){if(null===e)return{isParseFailure:!0,parseFailureReason:"No manifest was fetched",allChecks:[]};const r=e.value;if(void 0===r)return{isParseFailure:!0,parseFailureReason:"Manifest failed to parse as valid JSON",allChecks:[]};return{isParseFailure:!1,allChecks:ManifestValues$4.manifestChecks.map((e=>({id:e.id,failureText:e.failureText,passing:e.validate(r,t.errors)})))}}}var LA=CA(ManifestValues$4,["InstallabilityErrors","WebAppManifest"]);const MA=kc,PA=LA,OA={title:"Web app manifest and service worker meet the installability requirements",failureTitle:"Web app manifest or service worker do not meet the installability requirements",
|
893
890
|
description:"Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more](https://web.dev/installable-manifest/).",columnValue:"Failure reason",displayValue:"{itemCount, plural,\n =1 {1 reason}\n other {# reasons}\n }",noErrorId:"Installability error id '{errorId}' is not recognized","not-in-main-frame":"Page is not loaded in the main frame","not-from-secure-origin":"Page is not served from a secure origin","no-manifest":"Page has no manifest <link> URL","start-url-not-valid":"Manifest start URL is not valid","manifest-missing-name-or-short-name":"Manifest does not contain a 'name' or 'short_name' field",
|
894
891
|
"manifest-display-not-supported":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'","manifest-empty":"Manifest could not be fetched, is empty, or could not be parsed","no-matching-service-worker":"No matching service worker detected. You may need to reload the page, or check that the scope of the service worker for the current page encloses the scope and start URL from the manifest.","manifest-missing-suitable-icon":'Manifest does not contain a suitable icon - PNG, SVG or WebP format of at least {value0} px is required, the sizes attribute must be set, and the purpose attribute, if set, must include "any".',"no-acceptable-icon":'No supplied icon is at least {value0} px square in PNG, SVG or WebP format, with the purpose attribute unset or set to "any"',"cannot-download-icon":"Could not download a required icon from the manifest","no-icon-available":"Downloaded icon was empty or corrupted",
|
895
892
|
"platform-not-supported-on-android":"The specified application platform is not supported on Android","no-id-specified":"No Play store ID provided","ids-do-not-match":"The Play Store app URL and Play Store ID do not match","already-installed":"The app is already installed","url-not-supported-for-webapk":"A URL in the manifest contains a username, password, or port","in-incognito":"Page is loaded in an incognito window","not-offline-capable":"Page does not work offline","no-url-for-service-worker":"Could not check service worker without a 'start_url' field in the manifest","prefer-related-applications":"Manifest specifies prefer_related_applications: true","prefer-related-applications-only-beta-stable":"prefer_related_applications is only supported on Chrome Beta and Stable channels on Android.","manifest-display-override-not-supported":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'",
|
896
|
-
"manifest-location-changed":"Manifest URL changed while the manifest was being fetched.","warn-not-offline-capable":"Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.","protocol-timeout":"Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome.","pipeline-restarted":"PWA has been uninstalled and installability checks resetting.","scheme-not-supported-for-webapk":"The manifest URL scheme ({scheme}) is not supported on Android."},
|
897
|
-
;for(const i of t){if("in-incognito"===i.errorId)continue;if("warn-not-offline-capable"===i.errorId){a.push(
|
898
|
-
itemType:"text",text:
|
899
|
-
description:"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://web.dev/is-on-https/).",displayValue:"{itemCount, plural,\n =1 {1 insecure request found}\n other {# insecure requests found}\n }",columnInsecureURL:"Insecure URL",columnResolution:"Request Resolution",allowed:"Allowed",blocked:"Blocked",warning:"Allowed with warning",upgraded:"Automatically upgraded to HTTPS"},
|
900
|
-
}
|
901
|
-
score:Number(0===a.length),displayValue:i,details:
|
902
|
-
}],n=
|
893
|
+
"manifest-location-changed":"Manifest URL changed while the manifest was being fetched.","warn-not-offline-capable":"Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.","protocol-timeout":"Lighthouse could not determine if there was a service worker. Please try with a newer version of Chrome.","pipeline-restarted":"PWA has been uninstalled and installability checks resetting.","scheme-not-supported-for-webapk":"The manifest URL scheme ({scheme}) is not supported on Android."},FA=oi.createMessageInstanceIdFn("lighthouse-core/audits/installable-manifest.js",OA);class InstallableManifest extends MA{static get meta(){return{id:"installable-manifest",title:FA(OA.title),failureTitle:FA(OA.failureTitle),description:FA(OA.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static getInstallabilityErrors(e){const t=e.InstallabilityErrors.errors,r=[],a=[],n=/{([^}]+)}/g
|
894
|
+
;for(const i of t){if("in-incognito"===i.errorId)continue;if("warn-not-offline-capable"===i.errorId){a.push(FA(OA[i.errorId]));continue}if("pipeline-restarted"===i.errorId)continue;const t=OA[i.errorId];if("scheme-not-supported-for-webapk"===i.errorId){const a=e.WebAppManifest?.url;if(!a)continue;const n=new URL(a).protocol;r.push(FA(t,{scheme:n}));continue}if(void 0===t){r.push(FA(OA.noErrorId,{errorId:i.errorId}));continue}const o=t.match(n)||[],s=i.errorArguments?.length&&i.errorArguments[0].value;if(t&&i.errorArguments.length!==o.length){const e=JSON.stringify(i.errorArguments),t=i.errorArguments.length>o.length?`${i.errorId} has unexpected arguments ${e}`:`${i.errorId} does not have the expected number of arguments.`;r.push(t)}else t&&s?r.push(FA(t,{value0:s})):t&&r.push(FA(t))}return{i18nErrors:r,warnings:a}}static async audit(e,t){const{i18nErrors:r,warnings:a}=InstallableManifest.getInstallabilityErrors(e),n=e.WebAppManifest?e.WebAppManifest.url:null,i=[{key:"reason",
|
895
|
+
itemType:"text",text:FA(OA.columnValue)}],o=r.map((e=>({reason:e})));if(!o.length){const r=await PA.request(e,t);r.isParseFailure&&o.push({reason:r.parseFailureReason})}const s={type:"debugdata",manifestUrl:n};return o.length>0?{score:0,warnings:a,numericValue:o.length,numericUnit:"element",displayValue:FA(OA.displayValue,{itemCount:o.length}),details:{...MA.makeTableDetails(i,o),debugData:s}}:{score:1,warnings:a,details:{...MA.makeTableDetails(i,o),debugData:s}}}}kA.exports=InstallableManifest,kA.exports.UIStrings=OA;var UA={exports:{}};const jA=kc,BA=ji,$A=Ki,qA=Lo,zA={title:"Uses HTTPS",failureTitle:"Does not use HTTPS",
|
896
|
+
description:"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://web.dev/is-on-https/).",displayValue:"{itemCount, plural,\n =1 {1 insecure request found}\n other {# insecure requests found}\n }",columnInsecureURL:"Insecure URL",columnResolution:"Request Resolution",allowed:"Allowed",blocked:"Blocked",warning:"Allowed with warning",upgraded:"Automatically upgraded to HTTPS"},VA={MixedContentAutomaticallyUpgraded:zA.upgraded,MixedContentBlocked:zA.blocked,MixedContentWarning:zA.warning
|
897
|
+
},WA=oi.createMessageInstanceIdFn("lighthouse-core/audits/is-on-https.js",zA);UA.exports=class HTTPS extends jA{static get meta(){return{id:"is-on-https",title:WA(zA.title),failureTitle:WA(zA.failureTitle),description:WA(zA.description),requiredArtifacts:["devtoolsLogs","InspectorIssues"]}}static audit(e,t){const r=e.devtoolsLogs[jA.DEFAULT_PASS];return qA.request(r,t).then((t=>{const r=t.filter((e=>!$A.isSecureRequest(e))).map((e=>BA.elideDataURI(e.url))),a=Array.from(new Set(r)).map((e=>({url:e,resolution:void 0}))),n=[{key:"url",itemType:"url",text:WA(zA.columnInsecureURL)},{key:"resolution",itemType:"text",text:WA(zA.columnResolution)}];for(const t of e.InspectorIssues.mixedContentIssue){let e=a.find((e=>e.url===t.insecureURL));e||(e={url:t.insecureURL},a.push(e)),e.resolution=VA[t.resolutionStatus]?WA(VA[t.resolutionStatus]):t.resolutionStatus}for(const e of a)e.resolution||(e.resolution=WA(zA.allowed));let i;return a.length>0&&(i=WA(zA.displayValue,{itemCount:a.length})),{
|
898
|
+
score:Number(0===a.length),displayValue:i,details:jA.makeTableDetails(n,a)}}))}},UA.exports.UIStrings=zA;var HA={exports:{}};const GA=kc,YA=oi,KA={title:"Largest Contentful Paint element",description:"This is the largest contentful element painted within the viewport. [Learn More](https://web.dev/lighthouse-largest-contentful-paint/)"},JA=YA.createMessageInstanceIdFn("lighthouse-core/audits/largest-contentful-paint-element.js",KA);HA.exports=class LargestContentfulPaintElement extends GA{static get meta(){return{id:"largest-contentful-paint-element",title:JA(KA.title),description:JA(KA.description),scoreDisplayMode:GA.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["traces","TraceElements"]}}static audit(e){const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType)),r=[];t&&r.push({node:GA.makeNodeItem(t.node)});const a=[{key:"node",itemType:"node",text:JA(YA.UIStrings.columnElement)
|
899
|
+
}],n=GA.makeTableDetails(a,r),i=JA(YA.UIStrings.displayValueElementsFound,{nodeCount:r.length});return{score:1,notApplicable:0===r.length,displayValue:i,details:n}}},HA.exports.UIStrings=KA;var XA={exports:{}};
|
903
900
|
/**
|
904
901
|
* @license Copyright 2020 Google Inc. All Rights Reserved.
|
905
902
|
* 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
|
906
903
|
* 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.
|
907
|
-
*/const
|
908
|
-
|
909
|
-
const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType)),r=t?e.ImageElements.find((e=>e.node.devtoolsNodePath===t.node.devtoolsNodePath)):void 0;if(!r||!this.isImageInViewport(r,e.ViewportDimensions))return{score:
|
910
|
-
;class LongTasks$3 extends
|
911
|
-
startTime:e.startTime}))),u=[{key:"url",itemType:"url",text:
|
912
|
-
itemType:"ms",granularity:1,text:"Start Time"},{key:"duration",itemType:"ms",granularity:1,text:"End Time"}],a)}}},
|
913
|
-
;t.set(r.group.id,e+r.selfTime)}return t}static async audit(e,t){const r=t.settings||{},a=e.traces[MainThreadWorkBreakdown.DEFAULT_PASS],n=await
|
914
|
-
description:"To reach the most number of users, sites should work across every major browser. [Learn more](https://web.dev/pwa-cross-browser/)."},
|
915
|
-
;
|
916
|
-
}
|
904
|
+
*/const ZA=kc,QA=oi,eR={title:"Avoid large layout shifts",description:"These DOM elements contribute most to the CLS of the page.",columnContribution:"CLS Contribution"},tR=QA.createMessageInstanceIdFn("lighthouse-core/audits/layout-shift-elements.js",eR);XA.exports=class LayoutShiftElements extends ZA{static get meta(){return{id:"layout-shift-elements",title:tR(eR.title),description:tR(eR.description),scoreDisplayMode:ZA.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces","TraceElements"]}}static audit(e){const t=e.TraceElements.filter((e=>"layout-shift"===e.traceEventType)).map((e=>({node:ZA.makeNodeItem(e.node),score:e.score}))),r=[{key:"node",itemType:"node",text:tR(QA.UIStrings.columnElement)},{key:"score",itemType:"numeric",granularity:.001,text:tR(eR.columnContribution)}],a=ZA.makeTableDetails(r,t);let n;return t.length>0&&(n=tR(QA.UIStrings.displayValueElementsFound,{nodeCount:t.length})),{score:1,notApplicable:0===a.items.length,displayValue:n,details:a}}},
|
905
|
+
XA.exports.UIStrings=eR;var rR={exports:{}};const aR=kc,nR=oi,iR={title:"Largest Contentful Paint image was not lazily loaded",failureTitle:"Largest Contentful Paint image was lazily loaded",description:"Above-the-fold images that are lazily loaded render later in the page lifecycle, which can delay the largest contentful paint. [Learn more](https://web.dev/lcp-lazy-loading/)."},oR=nR.createMessageInstanceIdFn("lighthouse-core/audits/lcp-lazy-loaded.js",iR);rR.exports=class LargestContentfulPaintLazyLoaded extends aR{static get meta(){return{id:"lcp-lazy-loaded",title:oR(iR.title),failureTitle:oR(iR.failureTitle),description:oR(iR.description),supportedModes:["navigation"],requiredArtifacts:["TraceElements","ViewportDimensions","ImageElements"]}}static isImageInViewport(e,t){return e.clientRect.top<t.innerHeight}static audit(e){
|
906
|
+
const t=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType&&"image"===e.type)),r=t?e.ImageElements.find((e=>e.node.devtoolsNodePath===t.node.devtoolsNodePath)):void 0;if(!r||!this.isImageInViewport(r,e.ViewportDimensions))return{score:null,notApplicable:!0};const a=[{key:"node",itemType:"node",text:oR(nR.UIStrings.columnElement)}],n=aR.makeTableDetails(a,[{node:aR.makeNodeItem(r.node)}]);return{score:"lazy"===r.loading?0:1,details:n}}},rR.exports.UIStrings=iR;var sR={exports:{}};const cR=kc,lR=Lo,uR=oi,dR=Rv,mR=eb,pR=Dl,{getJavaScriptURLs:hR,getAttributableURLForTask:gR}=Iv,fR={startTime:0,endTime:0,duration:0},yR={title:"Avoid long main-thread tasks",description:"Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn more](https://web.dev/long-tasks-devtools/)",displayValue:"{itemCount, plural,\n =1 {# long task found}\n other {# long tasks found}\n }"
|
907
|
+
},vR=uR.createMessageInstanceIdFn("lighthouse-core/audits/long-tasks.js",yR);class LongTasks$3 extends cR{static get meta(){return{id:"long-tasks",scoreDisplayMode:cR.SCORING_MODES.INFORMATIVE,title:vR(yR.title),description:vR(yR.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r=t.settings||{},a=e.traces[cR.DEFAULT_PASS],n=await dR.request(a,t),i=e.devtoolsLogs[LongTasks$3.DEFAULT_PASS],o=await lR.request(i,t),s=new Map;if("simulate"===r.throttlingMethod){const e={devtoolsLog:i,settings:t.settings},r=await mR.request({trace:a,devtoolsLog:i},t),n=await pR.request(e,t),o=await n.simulate(r,{label:"long-tasks-diagnostic"});for(const[e,t]of o.nodeTimings.entries())"cpu"===e.type&&s.set(e.event,t)}else for(const e of n)e.unbounded||e.parent||s.set(e.event,e);const c=hR(o),l=n.map((e=>{const t=s.get(e.event)||fR;return{...e,duration:t.duration,startTime:t.startTime}
|
908
|
+
})).filter((e=>e.duration>=50&&!e.unbounded&&!e.parent)).sort(((e,t)=>t.duration-e.duration)).slice(0,20).map((e=>({url:gR(e,c),duration:e.duration,startTime:e.startTime}))),u=[{key:"url",itemType:"url",text:vR(uR.UIStrings.columnURL)},{key:"startTime",itemType:"ms",granularity:1,text:vR(uR.UIStrings.columnStartTime)},{key:"duration",itemType:"ms",granularity:1,text:vR(uR.UIStrings.columnDuration)}],d=cR.makeTableDetails(u,l);let m;return l.length>0&&(m=vR(yR.displayValue,{itemCount:l.length})),{score:0===l.length?1:0,notApplicable:0===l.length,details:d,displayValue:m}}}sR.exports=LongTasks$3,sR.exports.UIStrings=yR;const bR=kc,wR=Rv;var SR=class MainThreadTasks$5 extends bR{static get meta(){return{id:"main-thread-tasks",scoreDisplayMode:bR.SCORING_MODES.INFORMATIVE,title:"Tasks",description:"Lists the toplevel main thread tasks that executed during page load.",requiredArtifacts:["traces"]}}static async audit(e,t){
|
909
|
+
const r=e.traces[bR.DEFAULT_PASS],a=(await wR.request(r,t)).filter((e=>e.duration>5&&!e.parent)).map((e=>({duration:e.duration,startTime:e.startTime})));return{score:1,details:bR.makeTableDetails([{key:"startTime",itemType:"ms",granularity:1,text:"Start Time"},{key:"duration",itemType:"ms",granularity:1,text:"End Time"}],a)}}},TR={exports:{}};const ER=kc,{taskGroups:xR}=wv,_R=oi,AR=Rv,RR={title:"Minimizes main-thread work",failureTitle:"Minimize main-thread work",description:"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/mainthread-work-breakdown/)",columnCategory:"Category"},kR=_R.createMessageInstanceIdFn("lighthouse-core/audits/mainthread-work-breakdown.js",RR);class MainThreadWorkBreakdown extends ER{static get meta(){return{id:"mainthread-work-breakdown",title:kR(RR.title),failureTitle:kR(RR.failureTitle),description:kR(RR.description),
|
910
|
+
scoreDisplayMode:ER.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:2017,median:4e3}}static getExecutionTimingsByGroup(e){const t=new Map;for(const r of e){const e=t.get(r.group.id)||0;t.set(r.group.id,e+r.selfTime)}return t}static async audit(e,t){const r=t.settings||{},a=e.traces[MainThreadWorkBreakdown.DEFAULT_PASS],n=await AR.request(a,t),i="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,o=MainThreadWorkBreakdown.getExecutionTimingsByGroup(n);let s=0;const c={},l=Array.from(o).map((([e,t])=>{const r=t*i;s+=r;const a=c[e]||0;return c[e]=a+r,{group:e,groupLabel:xR[e].label,duration:r}})),u=[{key:"groupLabel",itemType:"text",text:kR(RR.columnCategory)},{key:"duration",itemType:"ms",granularity:1,text:kR(_R.UIStrings.columnTimeSpent)}];l.sort(((e,t)=>c[t.group]-c[e.group]));const d=MainThreadWorkBreakdown.makeTableDetails(u,l);return{score:ER.computeLogNormalScore({p10:t.options.p10,median:t.options.median},s),
|
911
|
+
numericValue:s,numericUnit:"millisecond",displayValue:kR(_R.UIStrings.seconds,{timeInMs:s}),details:d}}}TR.exports=MainThreadWorkBreakdown,TR.exports.UIStrings=RR;var DR={exports:{}};const CR=iy,IR={title:"Site works cross-browser",description:"To reach the most number of users, sites should work across every major browser. [Learn more](https://web.dev/pwa-cross-browser/)."},NR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-cross-browser.js",IR);DR.exports=class PWACrossBrowser extends CR{static get meta(){return Object.assign({id:"pwa-cross-browser",title:NR(IR.title),description:NR(IR.description)},super.partialMeta)}},DR.exports.UIStrings=IR;var LR={exports:{}};const MR=iy,PR={title:"Each page has a URL",description:"Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more](https://web.dev/pwa-each-page-has-url/)."
|
912
|
+
},OR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-each-page-has-url.js",PR);LR.exports=class PWAEachPageHasURL extends MR{static get meta(){return Object.assign({id:"pwa-each-page-has-url",title:OR(PR.title),description:OR(PR.description)},super.partialMeta)}},LR.exports.UIStrings=PR;var FR={exports:{}};const UR=iy,jR={title:"Page transitions don't feel like they block on the network",description:"Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more](https://web.dev/pwa-page-transitions/)."},BR=oi.createMessageInstanceIdFn("lighthouse-core/audits/manual/pwa-page-transitions.js",jR);FR.exports=class PWAPageTransitions extends UR{static get meta(){return Object.assign({id:"pwa-page-transitions",title:BR(jR.title),description:BR(jR.description)},super.partialMeta)}},FR.exports.UIStrings=jR;var $R={exports:{}};const qR=kc,zR=LA,VR={title:"Manifest has a maskable icon",
|
913
|
+
failureTitle:"Manifest doesn't have a maskable icon",description:"A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn more](https://web.dev/maskable-icon-audit/)."},WR=oi.createMessageInstanceIdFn("lighthouse-core/audits/maskable-icon.js",VR);$R.exports=class MaskableIcon extends qR{static get meta(){return{id:"maskable-icon",title:WR(VR.title),failureTitle:WR(VR.failureTitle),description:WR(VR.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static async audit(e,t){const r=await zR.request(e,t);if(r.isParseFailure)return{score:0,explanation:r.parseFailureReason};return{score:r.allChecks.find((e=>"hasMaskableIcon"===e.id))?.passing?1:0}}},$R.exports.UIStrings=VR;var HR={exports:{}};!function(e){function JPEGEncoder(e){
|
917
914
|
var t,r,a,n,i,o=Math.floor,s=new Array(64),c=new Array(64),l=new Array(64),u=new Array(64),d=new Array(65535),m=new Array(65535),p=new Array(64),h=new Array(64),f=[],y=0,v=7,b=new Array(64),w=new Array(64),S=new Array(64),T=new Array(256),E=new Array(2048),x=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],_=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],A=[0,1,2,3,4,5,6,7,8,9,10,11],R=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],k=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],D=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],I=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],N=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250]
|
918
915
|
;function computeHuffmanTbl(e,t){for(var r=0,a=0,n=new Array,i=1;i<=16;i++){for(var o=1;o<=e[i];o++)n[t[a]]=[],n[t[a]][0]=r,n[t[a]][1]=i,a++,r++;r*=2}return n}function writeBits(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1<<r&&(y|=1<<v),r--,--v<0&&(255==y?(writeByte(255),writeByte(0)):writeByte(y),v=7,y=0)}function writeByte(e){f.push(e)}function writeWord(e){writeByte(e>>8&255),writeByte(255&e)}function processDU(e,t,r,a,n){for(var i,o=n[0],s=n[240],c=function fDCTQuant(e,t){var r,a,n,i,o,s,c,l,u,d,m=0;for(u=0;u<8;++u){r=e[m],a=e[m+1],n=e[m+2],i=e[m+3],o=e[m+4],s=e[m+5],c=e[m+6];var h=r+(l=e[m+7]),f=r-l,y=a+c,v=a-c,b=n+s,w=n-s,S=i+o,T=i-o,E=h+S,x=h-S,_=y+b,A=y-b;e[m]=E+_,e[m+4]=E-_;var R=.707106781*(A+x);e[m+2]=x+R,e[m+6]=x-R;var k=.382683433*((E=T+w)-(A=v+f)),D=.5411961*E+k,C=1.306562965*A+k,I=.707106781*(_=w+v),N=f+I,L=f-I;e[m+5]=L+D,e[m+3]=L-D,e[m+1]=N+C,e[m+7]=N-C,m+=8}for(m=0,u=0;u<8;++u){r=e[m],a=e[m+8],n=e[m+16],i=e[m+24],o=e[m+32],s=e[m+40],c=e[m+48]
|
919
|
-
;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var
|
916
|
+
;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var H=.707106781*(W+z);e[m+16]=z+H,e[m+48]=z-H;var G=.382683433*((q=$+j)-(W=F+P)),Y=.5411961*q+G,K=1.306562965*W+G,J=.707106781*(V=j+F),X=P+J,Z=P-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[x[l]]=c[l];var u=h[0]-r;r=h[0],0==u?writeBits(a[0]):(writeBits(a[m[i=32767+u]]),writeBits(d[i]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(o),r;for(var y,v=1;v<=f;){for(var b=v;0==h[v]&&v<=f;++v);var w=v-b;if(w>=16){y=w>>4;for(var S=1;S<=y;++S)writeBits(s);w&=15}i=32767+h[v],writeBits(n[(w<<4)+m[i]]),writeBits(d[i]),v++}return 63!=f&&writeBits(o),r}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),i!=e){(function initQuantTables(e){
|
920
917
|
for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var a=o((t[r]*e+50)/100);a<1?a=1:a>255&&(a=255),s[x[r]]=a}for(var n=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],i=0;i<64;i++){var d=o((n[i]*e+50)/100);d<1?d=1:d>255&&(d=255),c[x[i]]=d}for(var m=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],p=0,h=0;h<8;h++)for(var f=0;f<8;f++)l[p]=1/(s[x[p]]*m[h]*m[f]*8),u[p]=1/(c[x[p]]*m[h]*m[f]*8),p++})(e<50?Math.floor(5e3/e):Math.floor(200-2*e)),i=e}}this.encode=function(e,i){(new Date).getTime(),i&&setQuality(i),f=new Array,y=0,v=7,writeWord(65496),function writeAPP0(){writeWord(65504),writeWord(16),writeByte(74),writeByte(70),writeByte(73),
|
921
918
|
writeByte(70),writeByte(0),writeByte(1),writeByte(1),writeByte(0),writeWord(1),writeWord(1),writeByte(0),writeByte(0)}(),function writeAPP1(e){if(e){writeWord(65505),69===e[0]&&120===e[1]&&105===e[2]&&102===e[3]?writeWord(e.length+2):(writeWord(e.length+5+2),writeByte(69),writeByte(120),writeByte(105),writeByte(102),writeByte(0));for(var t=0;t<e.length;t++)writeByte(e[t])}}(e.exifBuffer),function writeDQT(){writeWord(65499),writeWord(132),writeByte(0);for(var e=0;e<64;e++)writeByte(s[e]);writeByte(1);for(var t=0;t<64;t++)writeByte(c[t])}(),function writeSOF0(e,t){writeWord(65472),writeWord(17),writeByte(8),writeWord(t),writeWord(e),writeByte(3),writeByte(1),writeByte(17),writeByte(0),writeByte(2),writeByte(17),writeByte(1),writeByte(3),writeByte(17),writeByte(1)}(e.width,e.height),function writeDHT(){writeWord(65476),writeWord(418),writeByte(0);for(var e=0;e<16;e++)writeByte(_[e+1]);for(var t=0;t<=11;t++)writeByte(A[t]);writeByte(16);for(var r=0;r<16;r++)writeByte(R[r+1])
|
922
919
|
;for(var a=0;a<=161;a++)writeByte(k[a]);writeByte(1);for(var n=0;n<16;n++)writeByte(D[n+1]);for(var i=0;i<=11;i++)writeByte(C[i]);writeByte(17);for(var o=0;o<16;o++)writeByte(I[o+1]);for(var s=0;s<=161;s++)writeByte(N[s])}(),function writeSOS(){writeWord(65498),writeWord(12),writeByte(3),writeByte(1),writeByte(0),writeByte(2),writeByte(17),writeByte(3),writeByte(17),writeByte(0),writeByte(63),writeByte(0)}();var o=0,d=0,m=0;y=0,v=7,this.encode.displayName="_encode_";for(var p,h,T,x,L,M,P,O,F,U=e.data,j=e.width,B=e.height,$=4*j,q=0;q<B;){for(p=0;p<$;){for(M=L=$*q+p,P=-1,O=0,F=0;F<64;F++)M=L+(O=F>>3)*$+(P=4*(7&F)),q+O>=B&&(M-=$*(q+1+O-B)),p+P>=$&&(M-=p+P-$+4),h=U[M++],T=U[M++],x=U[M++],b[F]=(E[h]+E[T+256>>0]+E[x+512>>0]>>16)-128,w[F]=(E[h+768>>0]+E[T+1024>>0]+E[x+1280>>0]>>16)-128,S[F]=(E[h+1280>>0]+E[T+1536>>0]+E[x+1792>>0]>>16)-128;o=processDU(b,l,o,t,a),d=processDU(w,u,d,r,n),m=processDU(S,u,m,r,n),p+=32}q+=8}if(v>=0){var z=[];z[1]=v+1,z[0]=(1<<v+1)-1,writeBits(z)}
|
923
|
-
return writeWord(65497),new Buffer$2(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(
|
920
|
+
return writeWord(65497),new Buffer$2(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(HR);var GR,YR,KR={exports:{}};GR=KR,YR=function jpegImage(){
|
924
921
|
var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,r=799,a=3406,n=2276,i=1567,o=3784,s=5793,c=2896;function constructor(){}function buildHuffmanTable(e,t){for(var r,a,n=0,i=[],o=16;o>0&&!e[o-1];)o--;i.push({children:[],index:0});var s,c=i[0];for(r=0;r<o;r++){for(a=0;a<e[r];a++){for((c=i.pop()).children[c.index]=t[n];c.index>0;){if(0===i.length)throw new Error("Could not recreate Huffman Table");c=i.pop()}for(c.index++,i.push(c);i.length<=r;)i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s;n++}r+1<o&&(i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s)}return i[0].children}function decodeScan(t,r,a,n,i,o,s,c,l,u){a.precision,a.samplesPerLine,a.scanLines;var d=a.mcusPerLine,m=a.progressive;a.maxH,a.maxV;var p=r,h=0,f=0;function readBit(){if(f>0)return f--,h>>f&1;if(255==(h=t[r++])){var e=t[r++]
|
925
922
|
;if(e)throw new Error("unexpected marker: "+(h<<8|e).toString(16))}return f=7,h>>>7}function decodeHuffman(e){for(var t,r=e;null!==(t=readBit());){if("number"==typeof(r=r[t]))return r;if("object"!=typeof r)throw new Error("invalid huffman sequence")}return null}function receive(e){for(var t=0;e>0;){var r=readBit();if(null===r)return;t=t<<1|r,e--}return t}function receiveAndExtend(e){var t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}var y,v=0,b=0;function decodeMcu(e,t,r,a,n){var i=r%d,o=(r/d|0)*e.v+a,s=i*e.h+n;void 0===e.blocks[o]&&u.tolerantDecoding||t(e,e.blocks[o][s])}function decodeBlock(e,t,r){var a=r/e.blocksPerLine|0,n=r%e.blocksPerLine;void 0===e.blocks[a]&&u.tolerantDecoding||t(e,e.blocks[a][n])}var w,S,T,E,x,_,A=n.length;_=m?0===o?0===c?function decodeDCFirst(e,t){var r=decodeHuffman(e.huffmanTableDC),a=0===r?0:receiveAndExtend(r)<<l;t[0]=e.pred+=a}:function decodeDCSuccessive(e,t){t[0]|=readBit()<<l}:0===c?function decodeACFirst(t,r){if(v>0)v--;else for(var a=o,n=s;a<=n;){
|
926
923
|
var i=decodeHuffman(t.huffmanTableAC),c=15&i,u=i>>4;if(0!==c)r[e[a+=u]]=receiveAndExtend(c)*(1<<l),a++;else{if(u<15){v=receive(u)+(1<<u)-1;break}a+=16}}}:function decodeACSuccessive(t,r){for(var a=o,n=s,i=0;a<=n;){var c=e[a],u=r[c]<0?-1:1;switch(b){case 0:var d=decodeHuffman(t.huffmanTableAC),m=15&d;if(i=d>>4,0===m)i<15?(v=receive(i)+(1<<i),b=4):(i=16,b=1);else{if(1!==m)throw new Error("invalid ACn encoding");y=receiveAndExtend(m),b=i?2:3}continue;case 1:case 2:r[c]?r[c]+=(readBit()<<l)*u:0==--i&&(b=2==b?3:0);break;case 3:r[c]?r[c]+=(readBit()<<l)*u:(r[c]=y<<l,b=0);break;case 4:r[c]&&(r[c]+=(readBit()<<l)*u)}a++}4===b&&0==--v&&(b=0)}:function decodeBaseline(t,r){var a=decodeHuffman(t.huffmanTableDC),n=0===a?0:receiveAndExtend(a);r[0]=t.pred+=n;for(var i=1;i<64;){var o=decodeHuffman(t.huffmanTableAC),s=15&o,c=o>>4;if(0!==s)r[e[i+=c]]=receiveAndExtend(s),i++;else{if(c<15)break;i+=16}}};var R,k,D,C,I=0;for(k=1==A?n[0].blocksPerLine*n[0].blocksPerColumn:d*a.mcusPerColumn,i||(i=k);I<k;){
|
@@ -933,10 +930,10 @@ n.samplesPerLine=readUint16(),n.components={},n.componentsOrder=[];var b=n.scanL
|
|
933
930
|
if(255==t[a-3]&&t[a-2]>=192&&t[a-2]<=254){a-=3;break}throw new Error("unknown JPEG marker "+m.toString(16))}m=readUint16()}if(1!=l.length)throw new Error("only single frame JPEGs supported");for(var U=0;U<l.length;U++){var j=l[U].components;for(var B in j)j[B].quantizationTable=c[j[B].quantizationIdx],delete j[B].quantizationIdx}for(this.width=n.samplesPerLine,this.height=n.scanLines,this.jfif=o,this.adobe=s,this.components=[],U=0;U<n.componentsOrder.length;U++){var $=n.components[n.componentsOrder[U]];this.components.push({lines:buildComponentData(0,$),scaleX:$.h/n.maxH,scaleY:$.v/n.maxV})}},getData:function getData(e,t){var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x=this.width/e,_=this.height/t,A=0,R=e*t*this.components.length;requestMemoryAllocation(R);var k=new Uint8Array(R);switch(this.components.length){case 1:for(r=this.components[0],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m;break;case 2:for(r=this.components[0],a=this.components[1],
|
934
931
|
d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m,m=s[0|u*a.scaleX*x],k[A++]=m;break;case 3:for(E=!0,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],w=clampTo8bit(m+1.402*((h=c[0|u*n.scaleX*x])-128)),S=clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),T=clampTo8bit(m+1.772*(p-128))):(w=o[0|u*r.scaleX*x],S=s[0|u*a.scaleX*x],T=c[0|u*n.scaleX*x]),k[A++]=w,k[A++]=S,k[A++]=T;break;case 4:if(!this.adobe)throw new Error("Unsupported color mode (4 components)");for(E=!1,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],i=this.components[3],
|
935
932
|
d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],l=i.lines[0|d*i.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],h=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x],y=255-clampTo8bit(m+1.402*(h-128)),v=255-clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),b=255-clampTo8bit(m+1.772*(p-128))):(y=o[0|u*r.scaleX*x],v=s[0|u*a.scaleX*x],b=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x]),k[A++]=255-y,k[A++]=255-v,k[A++]=255-b,k[A++]=255-f;break;default:throw new Error("Unsupported color mode")}return k},copyToImageData:function copyToImageData(e,t){var r,a,n,i,o,s,c,l,u,d=e.width,m=e.height,p=e.data,h=this.getData(d,m),f=0,y=0;switch(this.components.length){case 1:for(a=0;a<m;a++)for(r=0;r<d;r++)n=h[f++],p[y++]=n,p[y++]=n,p[y++]=n,t&&(p[y++]=255);break;case 3:for(a=0;a<m;a++)for(r=0;r<d;r++)c=h[f++],l=h[f++],u=h[f++],p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;case 4:for(a=0;a<m;a++)for(r=0;r<d;r++)o=h[f++],s=h[f++],n=h[f++],
|
936
|
-
c=255-clampTo8bit(o*(1-(i=h[f++])/255)+i),l=255-clampTo8bit(s*(1-i/255)+i),u=255-clampTo8bit(n*(1-i/255)+i),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var r=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`)}l=t}return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}(),
|
937
|
-
data:r.useTArray?new Uint8Array(o):new Buffer$2(o)};n.comments.length>0&&(s.comments=n.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+o):e}return n.copyToImageData(s,r.formatAsRGBA),s};const
|
938
|
-
const o=getPixel(r,n,i,t,e.data);a[i][o]++}return a}(e),r},getTimeStamp:function(){return t},setProgress:function(e,t){a=e,n=Boolean(t)},setPerceptualProgress:function(e,t){i=e,o=Boolean(t)},getImage:function(){return e},getParsedImage:function(){return s||(s=
|
939
|
-
;const c=s.map((function(e){const t=e.args&&e.args.snapshot,r=e.ts/1e3;if(t===o)return null;o=t;return frame$1(Buffer$2.from(t,"base64"),r)})).filter(Boolean);if(0===c.length)return Promise.reject(new Error("No screenshots found in trace"));const l=frame$1(function synthesizeWhiteFrame(e){const t=
|
933
|
+
c=255-clampTo8bit(o*(1-(i=h[f++])/255)+i),l=255-clampTo8bit(s*(1-i/255)+i),u=255-clampTo8bit(n*(1-i/255)+i),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var r=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`)}l=t}return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}(),GR.exports=function decode(e,t={}){var r={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...t},a=new Uint8Array(e),n=new YR;n.opts=r,YR.resetMaxMemoryUsage(1024*r.maxMemoryUsageInMB*1024),n.parse(a);var i=r.formatAsRGBA?4:3,o=n.width*n.height*i;try{YR.requestMemoryAllocation(o);var s={width:n.width,height:n.height,exifBuffer:n.exifBuffer,
|
934
|
+
data:r.useTArray?new Uint8Array(o):new Buffer$2(o)};n.comments.length>0&&(s.comments=n.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+o):e}return n.copyToImageData(s,r.formatAsRGBA),s};const JR=wn,XR={encode:HR.exports,decode:KR.exports};function getPixel(e,t,r,a,n){return n[4*(e+t*a)+r]}function isWhitePixel(e,t,r){return getPixel(e,t,0,r.width,r.data)>=249&&getPixel(e,t,1,r.width,r.data)>=249&&getPixel(e,t,2,r.width,r.data)>=249}function frame$1(e,t){let r=null,a=null,n=null,i=null,o=null,s=null;return{getHistogram:function(){if(r)return r;const e=this.getParsedImage();return r=function convertPixelsToHistogram(e){const createHistogramArray=function(){const e=[];for(let t=0;t<256;t++)e[t]=0;return e},t=e.width,r=e.height,a=[createHistogramArray(),createHistogramArray(),createHistogramArray()];for(let n=0;n<r;n++)for(let r=0;r<t;r++)if(!isWhitePixel(r,n,e))for(let i=0;i<a.length;i++){
|
935
|
+
const o=getPixel(r,n,i,t,e.data);a[i][o]++}return a}(e),r},getTimeStamp:function(){return t},setProgress:function(e,t){a=e,n=Boolean(t)},setPerceptualProgress:function(e,t){i=e,o=Boolean(t)},getImage:function(){return e},getParsedImage:function(){return s||(s=XR.decode(e)),s},getProgress:function(){return a},isProgressInterpolated:function(){return n},getPerceptualProgress:function(){return i},isPerceptualProgressInterpolated:function(){return o}}}var ZR,QR={extractFramesFromTimeline:function extractFramesFromTimeline(e,t){let r;t=t||{},e="string"==typeof e?JR.readFileSync(e,"utf-8"):e;try{r="string"==typeof e?JSON.parse(e):e}catch(e){throw new Error("Speedline: Invalid JSON"+e.message)}let a=r.traceEvents||r,n=Number.MAX_VALUE,i=-Number.MAX_VALUE;a.forEach((e=>{0!==e.ts&&(n=Math.min(n,e.ts),i=Math.max(i,e.ts))})),n=(t.timeOrigin||n)/1e3,i/=1e3;let o=null;const s=a.filter((e=>e.cat.includes("disabled-by-default-devtools.screenshot")&&e.ts>=1e3*n));s.sort(((e,t)=>e.ts-t.ts))
|
936
|
+
;const c=s.map((function(e){const t=e.args&&e.args.snapshot,r=e.ts/1e3;if(t===o)return null;o=t;return frame$1(Buffer$2.from(t,"base64"),r)})).filter(Boolean);if(0===c.length)return Promise.reject(new Error("No screenshots found in trace"));const l=frame$1(function synthesizeWhiteFrame(e){const t=XR.decode(e[0].getImage()),r=t.width,a=t.height,n=Buffer$2.alloc(r*a*4);let i=0;for(;i<n.length;)n[i++]=255,n[i++]=255,n[i++]=255,n[i++]=255;return XR.encode({data:n,width:r,height:a}).data}(c),n);c.unshift(l);const u={startTs:n,endTs:i,frames:c};return Promise.resolve(u)},create:frame$1};
|
940
937
|
/**
|
941
938
|
* @preserve
|
942
939
|
* Copyright 2015 Igor Bezkrovny
|
@@ -944,68 +941,68 @@ const o=getPixel(r,n,i,t,e.data);a[i][o]++}return a}(e),r},getTimeStamp:function
|
|
944
941
|
*
|
945
942
|
* ssim.ts - part of Image Quantization Library
|
946
943
|
*/!function(e){var t,r;(t=e.Channels||(e.Channels={}))[t.Grey=1]="Grey",t[t.GreyAlpha=2]="GreyAlpha",t[t.RGB=3]="RGB",t[t.RGBAlpha=4]="RGBAlpha",e.Channels,e.compare=function compare(e,t,a,n,i,o,s){if(void 0===a&&(a=8),void 0===n&&(n=.01),void 0===i&&(i=.03),void 0===o&&(o=!0),void 0===s&&(s=8),e.width!==t.width||e.height!==t.height)throw new Error("Images have different sizes!");var c=(1<<s)-1,l=Math.pow(n*c,2),u=Math.pow(i*c,2),d=0,m=0,p=0;return r._iterate(e,t,a,o,(function iteration(e,t,r,a){var n,i,o;n=i=o=0;for(var s=0;s<e.length;s++)i+=Math.pow(e[s]-r,2),o+=Math.pow(t[s]-a,2),n+=(e[s]-r)*(t[s]-a);var c=e.length-1;i/=c,o/=c;var h=(2*r*a+l)*(2*(n/=c)+u),f=(Math.pow(r,2)+Math.pow(a,2)+l)*(i+o+u);m+=h/f,p+=(2*n+u)/(i+o+u),d++})),{ssim:m/d,mcs:p/d}},function(e){function _lumaValuesForWindow(e,t,r,a,n,i){for(var o=e.data,s=new Float32Array(new ArrayBuffer(a*n*4)),c=0,l=r+n,u=r;u<l;u++){var d=u*e.width,m=(d+t)*e.channels,p=(d+t+a)*e.channels;switch(e.channels){case 1:
|
947
|
-
for(;m<p;)s[c++]=o[m++];break;case 2:for(;m<p;)s[c++]=o[m++]*(o[m++]/255);break;case 3:if(i)for(;m<p;)s[c++]=.212655*o[m++]+.715158*o[m++]+.072187*o[m++];else for(;m<p;)s[c++]=o[m++]+o[m++]+o[m++];break;case 4:if(i)for(;m<p;)s[c++]=(.212655*o[m++]+.715158*o[m++]+.072187*o[m++])*(o[m++]/255);else for(;m<p;)s[c++]=(o[m++]+o[m++]+o[m++])*(o[m++]/255)}}return s}function _averageLuma(e){for(var t=0,r=0;r<e.length;r++)t+=e[r];return t/e.length}e._iterate=function _iterate(e,t,r,a,n){for(var i=e.width,o=e.height,s=0;s<o;s+=r)for(var c=0;c<i;c+=r){var l=Math.min(r,i-c),u=Math.min(r,o-s),d=_lumaValuesForWindow(e,c,s,l,u,a),m=_lumaValuesForWindow(t,c,s,l,u,a);n(d,m,_averageLuma(d),_averageLuma(m))}}}(r||(r={}))}(
|
948
|
-
;const o=e[t],s=e[r],c=s.getTimeStamp()-o.getTimeStamp(),l=n(o),u=n(s);if(i(o,l,!1),i(s,u,!1),Math.abs(l-u)<calculateFastModeAllowableChange(c))for(let a=t+1;a<r;a++)i(e[a],l,!0);else if(r-t>1){const o=Math.floor((t+r)/2);calculateProgressBetweenFrames(e,t,o,a,n,i),calculateProgressBetweenFrames(e,o,r,a,n,i)}}function calculateFrameSimilarity(e,t){const r={channels:4},a=Object.assign(e.getParsedImage(),r),n=Object.assign(t.getParsedImage(),r);return
|
944
|
+
for(;m<p;)s[c++]=o[m++];break;case 2:for(;m<p;)s[c++]=o[m++]*(o[m++]/255);break;case 3:if(i)for(;m<p;)s[c++]=.212655*o[m++]+.715158*o[m++]+.072187*o[m++];else for(;m<p;)s[c++]=o[m++]+o[m++]+o[m++];break;case 4:if(i)for(;m<p;)s[c++]=(.212655*o[m++]+.715158*o[m++]+.072187*o[m++])*(o[m++]/255);else for(;m<p;)s[c++]=(o[m++]+o[m++]+o[m++])*(o[m++]/255)}}return s}function _averageLuma(e){for(var t=0,r=0;r<e.length;r++)t+=e[r];return t/e.length}e._iterate=function _iterate(e,t,r,a,n){for(var i=e.width,o=e.height,s=0;s<o;s+=r)for(var c=0;c<i;c+=r){var l=Math.min(r,i-c),u=Math.min(r,o-s),d=_lumaValuesForWindow(e,c,s,l,u,a),m=_lumaValuesForWindow(t,c,s,l,u,a);n(d,m,_averageLuma(d),_averageLuma(m))}}}(r||(r={}))}(ZR||(ZR={}));const ek=ZR,tk=Math.log(4/6);function calculateFastModeAllowableChange(e){const t=e/1e3;return 6*Math.exp(tk*t)-1}function calculateProgressBetweenFrames(e,t,r,a,n,i){if(!a)return void e.forEach((e=>i(e,n(e),!1)))
|
945
|
+
;const o=e[t],s=e[r],c=s.getTimeStamp()-o.getTimeStamp(),l=n(o),u=n(s);if(i(o,l,!1),i(s,u,!1),Math.abs(l-u)<calculateFastModeAllowableChange(c))for(let a=t+1;a<r;a++)i(e[a],l,!0);else if(r-t>1){const o=Math.floor((t+r)/2);calculateProgressBetweenFrames(e,t,o,a,n,i),calculateProgressBetweenFrames(e,o,r,a,n,i)}}function calculateFrameSimilarity(e,t){const r={channels:4},a=Object.assign(e.getParsedImage(),r),n=Object.assign(t.getParsedImage(),r);return ek.compare(a,n).ssim}var rk={calculateFastModeAllowableChange,calculateFrameSimilarity,calculateVisualProgress:function calculateVisualProgress(e,t){const r=e[0],a=e[e.length-1];return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){return"number"==typeof e.getProgress()?e.getProgress():function calculateFrameProgress(e,t,r){let a=0,n=0;const i=e.getHistogram(),o=t.getHistogram(),s=r.getHistogram();for(let e=0;e<3;e++)for(let t=0;t<256;t++){
|
949
946
|
const r=i[e][t],c=o[e][t],l=s[e][t],u=Math.abs(r-c),d=Math.abs(l-c);n+=Math.min(u,d),a+=d}let c;return c=0===n&&0===a?100:Math.floor(n/a*100),c}(e,r,a)}),(function setProgress(e,t,r){return e.setProgress(t,r)})),e},calculatePerceptualProgress:function calculatePerceptualProgress(e,t){const r=e[0],a=e[e.length-1],n=calculateFrameSimilarity(r,a);return calculateProgressBetweenFrames(e,0,e.length-1,t&&t.fastMode,(function getProgress(e){if("number"==typeof e.getPerceptualProgress())return e.getPerceptualProgress();const t=calculateFrameSimilarity(e,a);return Math.max(100*(t-n)/(1-n),0)}),(function setProgress(e,t,r){return e.setPerceptualProgress(t,r)})),e},calculateSpeedIndexes:function calculateSpeedIndexes(e,t){const r="number"==typeof e[0].getProgress(),a="number"==typeof e[0].getPerceptualProgress(),n=r?"getProgress":"getPerceptualProgress",i=t.startTs;let o,s;for(let t=0;t<e.length&&!s;t++)e[t][n]()>0&&(s=e[t].getTimeStamp())
|
950
|
-
;for(let t=0;t<e.length&&!o;t++)e[t][n]()>=100&&(o=e[t].getTimeStamp());let c=e[0].getTimeStamp(),l=e[0].getProgress(),u=e[0].getPerceptualProgress(),d=s-i,m=s-i;return e.forEach((function(e){if(e.getTimeStamp()>s){const t=e.getTimeStamp()-c;d+=t*(1-l),m+=t*(1-u)}c=e.getTimeStamp(),l=e.getProgress()/100,u=e.getPerceptualProgress()/100})),d=r?d:void 0,m=a?m:void 0,{firstPaintTs:s,visuallyCompleteTs:o,speedIndex:d,perceptualSpeedIndex:m}}};const QR
|
951
|
-
const r=
|
952
|
-
static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaintAllFrames,timestamp:t.timestamps.firstContentfulPaintAllFrames}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const
|
953
|
-
;const t="Image"===e.record.resourceType,r="Low"===e.record.priority||"VeryLow"===e.record.priority;return!t||!r}static getOptimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new
|
954
|
-
;const
|
955
|
-
},["devtoolsLog","gatherContext","settings","simulator","trace"]);const
|
956
|
-
const r=await
|
957
|
-
;const r=t.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:t.optimistic?t.speedline.speedIndex:LanternSpeedIndex$2.computeLayoutBasedSpeedIndex(e.nodeTimings,r),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await
|
958
|
-
const r=
|
959
|
-
static getTimingsAfterFCP(e,t){return Array.from(e.entries()).filter((([e,r])=>e.type===
|
960
|
-
}return a}};const
|
961
|
-
;for(const[a,n]of e.entries())a.type===
|
962
|
-
static async summarize(e,t,r,a,n){const i={trace:e,devtoolsLog:t,gatherContext:r,settings:a},requestOrUndefined=(e,t)=>e.request(t,n).catch((e=>{})),o=await
|
947
|
+
;for(let t=0;t<e.length&&!o;t++)e[t][n]()>=100&&(o=e[t].getTimeStamp());let c=e[0].getTimeStamp(),l=e[0].getProgress(),u=e[0].getPerceptualProgress(),d=s-i,m=s-i;return e.forEach((function(e){if(e.getTimeStamp()>s){const t=e.getTimeStamp()-c;d+=t*(1-l),m+=t*(1-u)}c=e.getTimeStamp(),l=e.getProgress()/100,u=e.getPerceptualProgress()/100})),d=r?d:void 0,m=a?m:void 0,{firstPaintTs:s,visuallyCompleteTs:o,speedIndex:d,perceptualSpeedIndex:m}}};const ak=QR,nk=rk;const ik={All:"all",pSI:"perceptualSpeedIndex",SI:"speedIndex"};const ok=Ao,speedline=function(e,t){const r=t&&t.include||ik.All;if(!Object.keys(ik).some((e=>ik[e]===r)))throw new Error(`Unrecognized include option: ${r}`);return ak.extractFramesFromTimeline(e,t).then((function(e){const a=e.frames;return r!==ik.All&&r!==ik.SI||nk.calculateVisualProgress(a,t),r!==ik.All&&r!==ik.pSI||nk.calculatePerceptualProgress(a,t),function calculateValues(e,t){
|
948
|
+
const r=nk.calculateSpeedIndexes(e,t),a=Math.floor(t.endTs-t.startTs),n=Math.floor(r.firstPaintTs-t.startTs),i=Math.floor(r.visuallyCompleteTs-t.startTs);return{beginning:t.startTs,end:t.endTs,frames:e,first:n,complete:i,duration:a,speedIndex:r.speedIndex,perceptualSpeedIndex:r.perceptualSpeedIndex}}(a,e)}))},sk=vi.exports,ck=Yp;var lk=ok(class Speedline$4{static async compute_(e,t){return ck.request(e,t).then((t=>{const r=e.traceEvents.slice(),a=t.timestamps.timeOrigin;return speedline(r,{timeOrigin:a,fastMode:!0,include:"speedIndex"})})).catch((e=>{if(/No screenshots found in trace/.test(e.message))throw new sk(sk.errors.NO_SCREENSHOTS);throw e})).then((e=>{if(0===e.frames.length)throw new sk(sk.errors.NO_SPEEDLINE_FRAMES);if(0===e.speedIndex)throw new sk(sk.errors.SPEEDINDEX_OF_ZERO);return e}))}},null);const uk=Ao,dk=_w;var mk=uk(class FirstContentfulPaintAllFrames$1 extends dk{static computeSimulatedMetric(){throw new Error("FCP All Frames not implemented in lantern")}
|
949
|
+
static async computeObservedMetric(e){const{processedNavigation:t}=e;return{timing:t.timings.firstContentfulPaintAllFrames,timestamp:t.timestamps.firstContentfulPaintAllFrames}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const pk=Ao,hk=_w,gk=vi.exports,fk=fb;var yk=pk(class FirstMeaningfulPaint$2 extends hk{static computeSimulatedMetric(e,t){const r=hk.getMetricComputationInput(e);return fk.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.firstMeaningfulPaint)throw new gk(gk.errors.NO_FMP);return{timing:t.timings.firstMeaningfulPaint,timestamp:t.timestamps.firstMeaningfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const vk=Ao,bk=sb,wk=vi.exports,Sk=db;class LanternLargestContentfulPaint$1 extends bk{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static isNotLowPriorityImageNode(e){if("network"!==e.type)return!0
|
950
|
+
;const t="Image"===e.record.resourceType,r="Low"===e.record.priority||"VeryLow"===e.record.priority;return!t||!r}static getOptimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new wk(wk.errors.NO_LCP);return Sk.getFirstPaintBasedGraph(e,r,LanternLargestContentfulPaint$1.isNotLowPriorityImageNode)}static getPessimisticGraph(e,t){const r=t.timestamps.largestContentfulPaint;if(!r)throw new wk(wk.errors.NO_LCP);return Sk.getFirstPaintBasedGraph(e,r,(e=>!0),(e=>e.didPerformLayout()))}static getEstimateFromSimulation(e){const t=Array.from(e.nodeTimings.entries()).filter((e=>LanternLargestContentfulPaint$1.isNotLowPriorityImageNode(e[0]))).map((e=>e[1].endTime));return{timeInMs:Math.max(...t),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await Sk.request(e,t),a=await this.computeMetricWithGraphs(e,t);return a.timing=Math.max(a.timing,r.timing),a}}var Tk=vk(LanternLargestContentfulPaint$1,["devtoolsLog","gatherContext","settings","simulator","trace"])
|
951
|
+
;const Ek=Ao,xk=_w,_k=vi.exports,Ak=Tk;var Rk=Ek(class LargestContentfulPaint$2 extends xk{static computeSimulatedMetric(e,t){const r=xk.getMetricComputationInput(e);return Ak.request(r,t)}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaint)throw new _k(_k.errors.NO_LCP);return{timing:t.timings.largestContentfulPaint,timestamp:t.timestamps.largestContentfulPaint}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const kk=Ao,Dk=_w,Ck=vi.exports;var Ik=kk(class LargestContentfulPaintAllFrames$1 extends Dk{static async computeSimulatedMetric(){throw new Error("LCP All Frames not implemented in lantern")}static async computeObservedMetric(e){const{processedNavigation:t}=e;if(void 0===t.timings.largestContentfulPaintAllFrames)throw new Ck(Ck.errors.NO_LCP_ALL_FRAMES);return{timing:t.timings.largestContentfulPaintAllFrames,timestamp:t.timestamps.largestContentfulPaintAllFrames}}
|
952
|
+
},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Nk=Ao,Lk=Yp,Mk=vi.exports;class CumulativeLayoutShift$2{static getLayoutShiftEvents(e){const t=[];let r=!0;for(const a of e)if("LayoutShift"===a.name&&a.args.data&&void 0!==a.args.data.is_main_frame){if(void 0===a.args.data.weighted_score_delta)throw new Mk(Mk.errors.UNSUPPORTED_OLD_CHROME,{featureName:"Cumulative Layout Shift"});if(a.args.data.had_recent_input){if(!r)continue}else r=!1;t.push({ts:a.ts,isMainFrame:a.args.data.is_main_frame,weightedScore:a.args.data.weighted_score_delta})}return t}static calculate(e){let t=0,r=0,a=Number.NEGATIVE_INFINITY,n=Number.NEGATIVE_INFINITY;for(const i of e)(i.ts-a>5e6||i.ts-n>1e6)&&(a=i.ts,r=0),n=i.ts,r+=i.weightedScore,t=Math.max(t,r);return t}static calculateTotalCumulativeLayoutShift(e){return e.reduce(((e,t)=>e+t.weightedScore),0)}static async compute_(e,t){
|
953
|
+
const r=await Lk.request(e,t),a=CumulativeLayoutShift$2.getLayoutShiftEvents(r.frameTreeEvents),n=a.filter((e=>e.isMainFrame)),i=CumulativeLayoutShift$2.calculateTotalCumulativeLayoutShift(n);return{cumulativeLayoutShift:CumulativeLayoutShift$2.calculate(a),cumulativeLayoutShiftMainFrame:CumulativeLayoutShift$2.calculate(n),totalCumulativeLayoutShift:i}}}var Pk=Nk(CumulativeLayoutShift$2,null);const Ok=Ao,Fk=sb,Uk=Zc,jk=lk,Bk=db,$k=mn.throttling;class LanternSpeedIndex$2 extends Fk{static get COEFFICIENTS(){return{intercept:-250,optimistic:1.4,pessimistic:.65}}static getScaledCoefficients(e){const t=this.COEFFICIENTS,r=$k.mobileSlow4G.rttMs-30,a=Math.max((e-30)/r,0);return{intercept:t.intercept*a,optimistic:.5+(t.optimistic-.5)*a,pessimistic:.5+(t.pessimistic-.5)*a}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.speedline)throw new Error("missing speedline")
|
954
|
+
;const r=t.fcpResult.pessimisticEstimate.timeInMs;return{timeInMs:t.optimistic?t.speedline.speedIndex:LanternSpeedIndex$2.computeLayoutBasedSpeedIndex(e.nodeTimings,r),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await jk.request(e.trace,t),a=await Bk.request(e,t),n=await this.computeMetricWithGraphs(e,t,{speedline:r,fcpResult:a});return n.timing=Math.max(n.timing,a.timing),n}static computeLayoutBasedSpeedIndex(e,t){const r=[];for(const[t,a]of e.entries())if(t.type===Uk.TYPES.CPU&&t.childEvents.some((e=>"Layout"===e.name))){const e=Math.max(Math.log2(a.endTime-a.startTime),0);r.push({time:a.endTime,weight:e})}const a=r.map((e=>e.weight*Math.max(e.time,t))).reduce(((e,t)=>e+t),0),n=r.map((e=>e.weight)).reduce(((e,t)=>e+t),0);return n?a/n:t}}var qk=Ok(LanternSpeedIndex$2,["devtoolsLog","gatherContext","settings","simulator","trace"]);const zk=Ao,Vk=_w,Wk=qk,Hk=lk;var Gk=zk(class SpeedIndex$2 extends Vk{static computeSimulatedMetric(e,t){
|
955
|
+
const r=Vk.getMetricComputationInput(e);return Wk.request(r,t)}static async computeObservedMetric(e,t){const r=await Hk.request(e.trace,t),a=Math.round(r.speedIndex),n=1e3*(a+r.beginning);return Promise.resolve({timing:a,timestamp:n})}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const Yk=Ao,Kk=sb,Jk=Zc,Xk=db;class LanternMaxPotentialFID$1 extends Kk{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");const r=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=LanternMaxPotentialFID$1.getTimingsAfterFCP(e.nodeTimings,r);return{timeInMs:Math.max(...a.map((e=>e.duration)),16),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await Xk.request(e,t);return super.computeMetricWithGraphs(e,t,{fcpResult:r})}
|
956
|
+
static getTimingsAfterFCP(e,t){return Array.from(e.entries()).filter((([e,r])=>e.type===Jk.TYPES.CPU&&r.endTime>t)).map((([e,t])=>t))}}var Zk=Yk(LanternMaxPotentialFID$1,["devtoolsLog","gatherContext","settings","simulator","trace"]);const Qk=Ao,eD=_w,tD=Zk,rD=ao;var aD=Qk(class MaxPotentialFID$2 extends eD{static computeSimulatedMetric(e,t){const r=eD.getMetricComputationInput(e);return tD.request(r,t)}static computeObservedMetric(e){const{firstContentfulPaint:t}=e.processedNavigation.timings,r=rD.getMainThreadTopLevelEvents(e.processedTrace,t).filter((e=>e.duration>=1));return Promise.resolve({timing:Math.max(...r.map((e=>e.duration)),16)})}},["devtoolsLog","gatherContext","settings","simulator","trace"]);var nD={BLOCKING_TIME_THRESHOLD:50,calculateSumOfBlockingTime:function calculateSumOfBlockingTime$2(e,t,r){if(r<=t)return 0;let a=0;for(const n of e){if(n.duration<50)continue;if(n.end<t)continue;if(n.start>r)continue;const e=Math.max(n.start,t),i=Math.min(n.end,r)-e;i<50||(a+=i-50)
|
957
|
+
}return a}};const iD=Ao,oD=sb,sD=Zc,cD=db,lD=Tb,{BLOCKING_TIME_THRESHOLD:uD,calculateSumOfBlockingTime:dD}=nD;class LanternTotalBlockingTime$1 extends oD{static get COEFFICIENTS(){return{intercept:0,optimistic:.5,pessimistic:.5}}static getOptimisticGraph(e){return e}static getPessimisticGraph(e){return e}static getEstimateFromSimulation(e,t){if(!t.fcpResult)throw new Error("missing fcpResult");if(!t.interactiveResult)throw new Error("missing interactiveResult");const r=t.optimistic?t.fcpResult.pessimisticEstimate.timeInMs:t.fcpResult.optimisticEstimate.timeInMs,a=t.optimistic?t.interactiveResult.optimisticEstimate.timeInMs:t.interactiveResult.pessimisticEstimate.timeInMs,n=uD,i=LanternTotalBlockingTime$1.getTopLevelEvents(e.nodeTimings,n);return{timeInMs:dD(i,r,a),nodeTimings:e.nodeTimings}}static async compute_(e,t){const r=await cD.request(e,t),a=await lD.request(e,t);return this.computeMetricWithGraphs(e,t,{fcpResult:r,interactiveResult:a})}static getTopLevelEvents(e,t){const r=[]
|
958
|
+
;for(const[a,n]of e.entries())a.type===sD.TYPES.CPU&&(n.duration<t||r.push({start:n.startTime,end:n.endTime,duration:n.duration}));return r}}var mD=iD(LanternTotalBlockingTime$1,["devtoolsLog","gatherContext","settings","simulator","trace"]);const pD=Ao,hD=Ew,gD=ao,fD=mD,yD=Lw,{calculateSumOfBlockingTime:vD}=nD;var bD=pD(class TotalBlockingTime$2 extends hD{static computeSimulatedMetric(e,t){const r=hD.getMetricComputationInput(e);return fD.request(r,t)}static async computeObservedMetric(e,t){const r=gD.getMainThreadTopLevelEvents(e.processedTrace);if(e.processedNavigation){const{firstContentfulPaint:a}=e.processedNavigation.timings,n=hD.getMetricComputationInput(e),i=(await yD.request(n,t)).timing;return{timing:vD(r,a,i)}}return{timing:vD(r,0,e.processedTrace.timestamps.traceEnd)}}},["devtoolsLog","gatherContext","settings","simulator","trace"]);const wD=Yp,SD=Xp,TD=lk,ED=Zw,xD=mk,_D=yk,AD=Rk,RD=Ik,kD=Lw,DD=Pk,CD=Gk,ID=aD,ND=bD,LD=Ao;class TimingSummary$1{
|
959
|
+
static async summarize(e,t,r,a,n){const i={trace:e,devtoolsLog:t,gatherContext:r,settings:a},requestOrUndefined=(e,t)=>e.request(t,n).catch((e=>{})),o=await wD.request(e,n),s=await requestOrUndefined(SD,o),c=await TD.request(e,n),l=await requestOrUndefined(ED,i),u=await requestOrUndefined(xD,i),d=await requestOrUndefined(_D,i),m=await requestOrUndefined(AD,i),p=await requestOrUndefined(RD,i),h=await requestOrUndefined(kD,i),f=await requestOrUndefined(DD,e),y=await requestOrUndefined(ID,i),v=await requestOrUndefined(CD,i),b=await requestOrUndefined(ND,i),{cumulativeLayoutShift:w,cumulativeLayoutShiftMainFrame:S,totalCumulativeLayoutShift:T}=f||{};return{metrics:{firstContentfulPaint:l?.timing,firstContentfulPaintTs:l?.timestamp,firstContentfulPaintAllFrames:u?.timing,firstContentfulPaintAllFramesTs:u?.timestamp,firstMeaningfulPaint:d?.timing,firstMeaningfulPaintTs:d?.timestamp,largestContentfulPaint:m?.timing,largestContentfulPaintTs:m?.timestamp,
|
963
960
|
largestContentfulPaintAllFrames:p?.timing,largestContentfulPaintAllFramesTs:p?.timestamp,interactive:h?.timing,interactiveTs:h?.timestamp,speedIndex:v?.timing,speedIndexTs:v?.timestamp,totalBlockingTime:b?.timing,maxPotentialFID:y?.timing,cumulativeLayoutShift:w,cumulativeLayoutShiftMainFrame:S,totalCumulativeLayoutShift:T,observedTimeOrigin:o.timings.timeOrigin,observedTimeOriginTs:o.timestamps.timeOrigin,observedNavigationStart:s?.timings.timeOrigin,observedNavigationStartTs:s?.timestamps.timeOrigin,observedFirstPaint:s?.timings.firstPaint,observedFirstPaintTs:s?.timestamps.firstPaint,observedFirstContentfulPaint:s?.timings.firstContentfulPaint,observedFirstContentfulPaintTs:s?.timestamps.firstContentfulPaint,observedFirstContentfulPaintAllFrames:s?.timings.firstContentfulPaintAllFrames,observedFirstContentfulPaintAllFramesTs:s?.timestamps.firstContentfulPaintAllFrames,observedFirstMeaningfulPaint:s?.timings.firstMeaningfulPaint,
|
964
961
|
observedFirstMeaningfulPaintTs:s?.timestamps.firstMeaningfulPaint,observedLargestContentfulPaint:s?.timings.largestContentfulPaint,observedLargestContentfulPaintTs:s?.timestamps.largestContentfulPaint,observedLargestContentfulPaintAllFrames:s?.timings.largestContentfulPaintAllFrames,observedLargestContentfulPaintAllFramesTs:s?.timestamps.largestContentfulPaintAllFrames,observedTraceEnd:o.timings.traceEnd,observedTraceEndTs:o.timestamps.traceEnd,observedLoad:s?.timings.load,observedLoadTs:s?.timestamps.load,observedDomContentLoaded:s?.timings.domContentLoaded,observedDomContentLoadedTs:s?.timestamps.domContentLoaded,observedCumulativeLayoutShift:w,observedCumulativeLayoutShiftMainFrame:S,observedTotalCumulativeLayoutShift:T,observedFirstVisualChange:c.first,observedFirstVisualChangeTs:1e3*(c.first+c.beginning),observedLastVisualChange:c.complete,observedLastVisualChangeTs:1e3*(c.complete+c.beginning),observedSpeedIndex:c.speedIndex,observedSpeedIndexTs:1e3*(c.speedIndex+c.beginning)},
|
965
|
-
debugInfo:{lcpInvalidated:!!s?.lcpInvalidated}}}static async compute_(e,t){return TimingSummary$1.summarize(e.trace,e.devtoolsLog,e.gatherContext,e.settings,t)}}var
|
966
|
-
;"number"!=typeof t||
|
967
|
-
numericValue:a,numericUnit:"unitless",displayValue:a.toLocaleString(t.settings.locale),details:i}}},
|
968
|
-
},n=await
|
969
|
-
trace:e.traces[
|
970
|
-
mobile:{scoring:{p10:1800,median:3e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[
|
971
|
-
scoreDisplayMode:
|
972
|
-
static get meta(){return{id:"interactive",title:
|
973
|
-
},SC
|
974
|
-
score:
|
975
|
-
gatherContext:e.GatherContext,settings:t.settings},a=await
|
976
|
-
trace:e.traces[
|
977
|
-
static get defaultOptions(){return{mobile:{scoring:{p10:200,median:600}},desktop:{scoring:{p10:150,median:350}}}}static async audit(e,t){const r=e.traces[
|
978
|
-
const r=e.devtoolsLogs[
|
979
|
-
text:"Start Time"},{key:"endTime",itemType:"ms",granularity:1,text:"End Time"},{key:"transferSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Transfer Size"},{key:"resourceSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Resource Size"},{key:"statusCode",itemType:"text",text:"Status Code"},{key:"mimeType",itemType:"text",text:"MIME Type"},{key:"resourceType",itemType:"text",text:"Resource Type"}],o),c=Number.isFinite(n)?1e6*n:void 0;return s.debugData={type:"debugdata",networkStartTimeTs:c},{score:1,details:s}}},
|
980
|
-
static get meta(){return{id:"network-rtt",scoreDisplayMode:
|
981
|
-
description:"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall)."},nI
|
982
|
-
itemType:"text",text:nI
|
983
|
-
requiredArtifacts:["GlobalListeners","JsUsage","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=e.GlobalListeners.filter((e=>"unload"===e.type));if(!r.length)return{score:1};const a=await
|
984
|
-
displayValue:"{itemCount, plural,\n =1 {# animated element found}\n other {# animated elements found}\n }",unsupportedCSSProperty:"{propertyCount, plural,\n =1 {Unsupported CSS Property: {properties}}\n other {Unsupported CSS Properties: {properties}}\n }",transformDependsBoxSize:"Transform-related property depends on box size",filterMayMovePixels:"Filter-related property may move pixels",nonReplaceCompositeMode:'Effect has composite mode other than "replace"',incompatibleAnimations:"Target has another animation which is incompatible",unsupportedTimingParameters:"Effect has unsupported timing parameters"},
|
985
|
-
;function getActionableFailureReasons(e,t){return
|
986
|
-
animation:e});r.push({node:
|
987
|
-
transferSize:0},font:{count:0,resourceSize:0,transferSize:0},script:{count:0,resourceSize:0,transferSize:0},document:{count:0,resourceSize:0,transferSize:0},other:{count:0,resourceSize:0,transferSize:0},total:{count:0,resourceSize:0,transferSize:0},"third-party":{count:0,resourceSize:0,transferSize:0}},n=
|
988
|
-
a["third-party"].transferSize+=e.transferSize)})),a}static async compute_(e,t){const r=await
|
989
|
-
total:
|
990
|
-
})).filter((t=>!(!e.resourceSizes||!e.resourceSizes.some((e=>e.resourceType===t.resourceType)))||!(!e.resourceCounts||!e.resourceCounts.some((e=>e.resourceType===t.resourceType))))).sort(((e,t)=>(t.sizeOverBudget||0)-(e.sizeOverBudget||0)))}static async audit(e,t){const r=e.devtoolsLogs[
|
991
|
-
;const
|
992
|
-
pessimisticFMP:i.pessimisticEstimate.timeInMs,roughEstimateOfTTI:o.timing,optimisticTTI:o.optimisticEstimate.timeInMs,pessimisticTTI:o.pessimisticEstimate.timeInMs,roughEstimateOfSI:s.timing,optimisticSI:s.optimisticEstimate.timeInMs,pessimisticSI:s.pessimisticEstimate.timeInMs,roughEstimateOfLCP:c.timing,optimisticLCP:c.optimisticEstimate.timeInMs,pessimisticLCP:c.pessimisticEstimate.timeInMs};return{score:
|
993
|
-
},
|
994
|
-
;const
|
995
|
-
static getLCPNodeToPreload(e,t,r,a){if(!r)return{};const n=a.find((e=>e.node.devtoolsNodePath===r.node.devtoolsNodePath));if(!n)return{};const i=n.src,{lcpNode:o,path:s}=PreloadLCPImageAudit.findLCPNode(t,i);if(!o||!s)return{};return{lcpNodeToPreload:PreloadLCPImageAudit.shouldPreloadRequest(o.record,e,s)?o:void 0,initiatorPath:[{url:o.record.url,initiatorType:o.initiatorType},...s.map((e=>({url:e.record.url,initiatorType:e.initiatorType})))]}}static computeWasteWithGraph(e,t,r,a){if(!
|
996
|
-
|
997
|
-
settings:t.settings},t)]),d=l.pessimisticGraph,{lcpNodeToPreload:m,initiatorPath:p}=PreloadLCPImageAudit.getLCPNodeToPreload(c,d,s,e.ImageElements),{results:h,wastedMs:f}=PreloadLCPImageAudit.computeWasteWithGraph(s,m,d,u),y=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:
|
998
|
-
},
|
999
|
-
;for(const[e,t]of u.pessimisticEstimate.nodeTimings.entries())"network"===e.type&&d.set(e.record.url,t);const m=Redirects.getDocumentRequestChain(c,s,o);let p=0;const h=[];for(let e=0;e<m.length&&!(m.length<2);e++){const t=m[e],a=m[e+1]||t,n=d.get(t.url),i=d.get(a.url);if(!n||!i)throw new Error("Could not find redirects in graph");const o=i.startTime-n.startTime,s=a.startTime-t.startTime,c="simulate"===r.throttlingMethod?o:1e3*s;p+=c,h.push({url:t.url,wastedMs:c})}const f=[{key:"url",valueType:"url",label:
|
1000
|
-
description:"To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more](https://web.dev/use-lighthouse-for-performance-budgets/).",displayValue:"{requestCount, plural, =1 {1 request • {byteCount, number, bytes} KiB} other {# requests • {byteCount, number, bytes} KiB}}"},
|
1001
|
-
total:
|
962
|
+
debugInfo:{lcpInvalidated:!!s?.lcpInvalidated}}}static async compute_(e,t){return TimingSummary$1.summarize(e.trace,e.devtoolsLog,e.gatherContext,e.settings,t)}}var MD=LD(TimingSummary$1,["devtoolsLog","gatherContext","settings","trace"]);const PD=kc,OD=MD,FD=new Set(["cumulativeLayoutShift","cumulativeLayoutShiftMainFrame","totalCumulativeLayoutShift","observedCumulativeLayoutShift","observedCumulativeLayoutShiftMainFrame","observedTotalCumulativeLayoutShift"]);var UD=class Metrics extends PD{static get meta(){return{id:"metrics",scoreDisplayMode:PD.SCORING_MODES.INFORMATIVE,title:"Metrics",description:"Collects all available metrics.",supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static async audit(e,t){const r=e.GatherContext,a=e.traces[PD.DEFAULT_PASS],n=e.devtoolsLogs[PD.DEFAULT_PASS],i=await OD.request({trace:a,devtoolsLog:n,gatherContext:r,settings:t.settings},t),o=i.metrics,s=i.debugInfo;for(const[e,t]of Object.entries(o)){const r=e
|
963
|
+
;"number"!=typeof t||FD.has(r)||(o[r]=Math.round(t))}const c={type:"debugdata",items:[o,s]};return{score:1,numericValue:o.interactive||0,numericUnit:"millisecond",details:c}}},jD={exports:{}};const BD=kc,$D=Pk,qD=oi,zD={description:"Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more](https://web.dev/cls/)."},VD=qD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/cumulative-layout-shift.js",zD);jD.exports=class CumulativeLayoutShift extends BD{static get meta(){return{id:"cumulative-layout-shift",title:VD(qD.UIStrings.cumulativeLayoutShiftMetric),description:VD(zD.description),scoreDisplayMode:BD.SCORING_MODES.NUMERIC,requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:.1,median:.25}}static async audit(e,t){const r=e.traces[BD.DEFAULT_PASS],{cumulativeLayoutShift:a,...n}=await $D.request(r,t),i={type:"debugdata",items:[n]};return{score:BD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a),
|
964
|
+
numericValue:a,numericUnit:"unitless",displayValue:a.toLocaleString(t.settings.locale),details:i}}},jD.exports.UIStrings=zD;var WD={exports:{}};const HD=kc,GD=ah,YD=oi,KD={description:"Interaction to Next Paint measures page responsiveness, how long it takes the page to visibly respond to user input. [Learn more](https://web.dev/inp/)."},JD=YD.createMessageInstanceIdFn("lighthouse-core/audits/metrics/experimental-interaction-to-next-paint.js",KD);WD.exports=class ExperimentalInteractionToNextPaint extends HD{static get meta(){return{id:"experimental-interaction-to-next-paint",title:JD(YD.UIStrings.interactionToNextPaint),description:JD(KD.description),scoreDisplayMode:HD.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces"]}}static get defaultOptions(){return{p10:200,median:500}}static async audit(e,t){const{settings:r}=t;if("simulate"===r.throttlingMethod)return{score:null,notApplicable:!0};const a={trace:e.traces[HD.DEFAULT_PASS],settings:r
|
965
|
+
},n=await GD.request(a,t);if(null===n)return{score:null,notApplicable:!0};const i="FallbackTiming"===n.name?n.duration:n.args.data.duration;return{score:HD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},i),numericValue:i,numericUnit:"millisecond",displayValue:JD(YD.UIStrings.ms,{timeInMs:i})}}},WD.exports.UIStrings=KD;const XD=kc,ZD=mn.throttling.mobileRegular3G,QD=Zw;var eC=class FirstContentfulPaint3G extends XD{static get meta(){return{id:"first-contentful-paint-3g",title:"First Contentful Paint (3G)",description:"First Contentful Paint 3G marks the time at which the first text or image is painted while on a 3G network. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint).",scoreDisplayMode:XD.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{p10:2700,median:4500}}static async audit(e,t){const r=e.GatherContext,a={
|
966
|
+
trace:e.traces[XD.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[XD.DEFAULT_PASS],gatherContext:r,settings:{...t.settings,throttlingMethod:"simulate",throttling:ZD}},n=await QD.request(a,t);return{score:XD.computeLogNormalScore({p10:t.options.p10,median:t.options.median},n.timing),numericValue:n.timing,numericUnit:"millisecond",displayValue:`${n.timing} ms`}}},tC={exports:{}};const rC=kc,aC=oi,nC=Zw,iC={description:"First Contentful Paint marks the time at which the first text or image is painted. [Learn more](https://web.dev/first-contentful-paint/)."},oC=aC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/first-contentful-paint.js",iC);tC.exports=class FirstContentfulPaint extends rC{static get meta(){return{id:"first-contentful-paint",title:oC(aC.UIStrings.firstContentfulPaintMetric),description:oC(iC.description),scoreDisplayMode:rC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{
|
967
|
+
mobile:{scoring:{p10:1800,median:3e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[rC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[rC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await nC.request(r,t),n=t.options[t.settings.formFactor];return{score:rC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:oC(aC.UIStrings.seconds,{timeInMs:a.timing})}}},tC.exports.UIStrings=iC;var sC={exports:{}};const cC=kc,lC=oi,uC=yk,dC={description:"First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://web.dev/first-meaningful-paint/)."},mC=lC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/first-meaningful-paint.js",dC);sC.exports=class FirstMeaningfulPaint extends cC{static get meta(){return{id:"first-meaningful-paint",title:mC(lC.UIStrings.firstMeaningfulPaintMetric),description:mC(dC.description),
|
968
|
+
scoreDisplayMode:cC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2336,median:4e3}},desktop:{scoring:{p10:934,median:1600}}}}static async audit(e,t){const r={trace:e.traces[cC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[cC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await uC.request(r,t),n=t.options[t.settings.formFactor];return{score:cC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:mC(lC.UIStrings.seconds,{timeInMs:a.timing})}}},sC.exports.UIStrings=dC;var pC={exports:{}};const hC=kc,gC=oi,fC=Lw,yC={description:"Time to interactive is the amount of time it takes for the page to become fully interactive. [Learn more](https://web.dev/interactive/)."},vC=gC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/interactive.js",yC);pC.exports=class InteractiveMetric extends hC{
|
969
|
+
static get meta(){return{id:"interactive",title:vC(gC.UIStrings.interactiveMetric),description:vC(yC.description),scoreDisplayMode:hC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3785,median:7300}},desktop:{scoring:{p10:2468,median:4500}}}}static async audit(e,t){const r={trace:e.traces[hC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[hC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=(await fC.request(r,t)).timing,n=t.options[t.settings.formFactor];return{score:hC.computeLogNormalScore(n.scoring,a),numericValue:a,numericUnit:"millisecond",displayValue:vC(gC.UIStrings.seconds,{timeInMs:a})}}},pC.exports.UIStrings=yC;var bC={exports:{}};const wC=kc,SC=oi,TC=Rk,EC=vi.exports,xC={description:"Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more](https://web.dev/lighthouse-largest-contentful-paint/)"
|
970
|
+
},_C=SC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/largest-contentful-paint.js",xC);bC.exports=class LargestContentfulPaint extends wC{static get meta(){return{id:"largest-contentful-paint",title:_C(SC.UIStrings.largestContentfulPaintMetric),description:_C(xC.description),scoreDisplayMode:wC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["HostUserAgent","traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:2500,median:4e3}},desktop:{scoring:{p10:1200,median:2400}}}}static async audit(e,t){const r={trace:e.traces[wC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[wC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings};let a;try{a=await TC.request(r,t)}catch(t){const r=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!r)throw t;if(Number(r[1])<79&&"NO_LCP"===t.code)throw new EC(EC.errors.UNSUPPORTED_OLD_CHROME,{featureName:"Largest Contentful Paint"});throw t}const n=t.options[t.settings.formFactor];return{
|
971
|
+
score:wC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:_C(SC.UIStrings.seconds,{timeInMs:a.timing})}}},bC.exports.UIStrings=xC;var AC={exports:{}};const RC=kc,kC=aD,DC=oi,CC={description:"The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more](https://web.dev/lighthouse-max-potential-fid/)."},IC=DC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/max-potential-fid.js",CC);AC.exports=class MaxPotentialFID extends RC{static get meta(){return{id:"max-potential-fid",title:IC(DC.UIStrings.maxPotentialFIDMetric),description:IC(CC.description),scoreDisplayMode:RC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{p10:130,median:250}}static async audit(e,t){const r={trace:e.traces[RC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[RC.DEFAULT_PASS],
|
972
|
+
gatherContext:e.GatherContext,settings:t.settings},a=await kC.request(r,t);return{score:RC.computeLogNormalScore({p10:t.options.p10,median:t.options.median},a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:IC(DC.UIStrings.ms,{timeInMs:a.timing})}}},AC.exports.UIStrings=CC;var NC={exports:{}};const LC=kc,MC=oi,PC=Gk,OC={description:"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://web.dev/speed-index/)."},FC=MC.createMessageInstanceIdFn("lighthouse-core/audits/metrics/speed-index.js",OC);NC.exports=class SpeedIndex extends LC{static get meta(){return{id:"speed-index",title:FC(MC.UIStrings.speedIndexMetric),description:FC(OC.description),scoreDisplayMode:LC.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static get defaultOptions(){return{mobile:{scoring:{p10:3387,median:5800}},desktop:{scoring:{p10:1311,median:2300}}}}static async audit(e,t){const r={
|
973
|
+
trace:e.traces[LC.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[LC.DEFAULT_PASS],gatherContext:e.GatherContext,settings:t.settings},a=await PC.request(r,t),n=t.options[t.settings.formFactor];return{score:LC.computeLogNormalScore(n.scoring,a.timing),numericValue:a.timing,numericUnit:"millisecond",displayValue:FC(MC.UIStrings.seconds,{timeInMs:a.timing})}}},NC.exports.UIStrings=OC;var UC={exports:{}};const jC=kc,BC=bD,$C=oi,qC={description:"Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more](https://web.dev/lighthouse-total-blocking-time/)."},zC=$C.createMessageInstanceIdFn("lighthouse-core/audits/metrics/total-blocking-time.js",qC);UC.exports=class TotalBlockingTime extends jC{static get meta(){return{id:"total-blocking-time",title:zC($C.UIStrings.totalBlockingTimeMetric),description:zC(qC.description),scoreDisplayMode:jC.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}
|
974
|
+
static get defaultOptions(){return{mobile:{scoring:{p10:200,median:600}},desktop:{scoring:{p10:150,median:350}}}}static async audit(e,t){const r=e.traces[jC.DEFAULT_PASS],a=e.devtoolsLogs[jC.DEFAULT_PASS],n=e.GatherContext,i={trace:r,devtoolsLog:a,gatherContext:n,settings:t.settings};if("timespan"===n.gatherMode&&"simulate"===t.settings.throttlingMethod)return{score:1,notApplicable:!0};const o=await BC.request(i,t),s=t.options[t.settings.formFactor];return{score:jC.computeLogNormalScore(s.scoring,o.timing),numericValue:o.timing,numericUnit:"millisecond",displayValue:zC($C.UIStrings.ms,{timeInMs:o.timing})}}},UC.exports.UIStrings=qC;const VC=kc,WC=ji,HC=Lo,GC=GT;var YC=class NetworkRequests extends VC{static get meta(){return{id:"network-requests",scoreDisplayMode:VC.SCORING_MODES.INFORMATIVE,title:"Network Requests",description:"Lists the network requests that were made during page load.",requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static async audit(e,t){
|
975
|
+
const r=e.devtoolsLogs[VC.DEFAULT_PASS],a=await HC.request(r,t),n=a.reduce(((e,t)=>Math.min(e,t.rendererStartTime)),1/0);let i;if("navigation"===e.GatherContext.gatherMode){const a=await GC.request({devtoolsLog:r,URL:e.URL},t);i=a.frameId}const timeToMs=e=>e<n||!Number.isFinite(e)?void 0:1e3*(e-n),o=a.map((e=>{const t=e.lrStatistics?.endTimeDeltaMs,r=e.lrStatistics?.TCPMs,a=e.lrStatistics?.requestMs,n=e.lrStatistics?.responseMs,o=e.isLinkPreload||void 0,s=i&&e.frameId===i||void 0;return{url:WC.elideDataURI(e.url),protocol:e.protocol,rendererStartTime:timeToMs(e.rendererStartTime),startTime:timeToMs(e.startTime),endTime:timeToMs(e.endTime),finished:e.finished,transferSize:e.transferSize,resourceSize:e.resourceSize,statusCode:e.statusCode,mimeType:e.mimeType,resourceType:e.resourceType,priority:e.priority,isLinkPreload:o,experimentalFromMainFrame:s,lrEndTimeDeltaMs:t,lrTCPMs:r,lrRequestMs:a,lrResponseMs:n}})),s=VC.makeTableDetails([{key:"url",itemType:"url",text:"URL"},{key:"protocol",
|
976
|
+
itemType:"text",text:"Protocol"},{key:"startTime",itemType:"ms",granularity:1,text:"Start Time"},{key:"endTime",itemType:"ms",granularity:1,text:"End Time"},{key:"transferSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Transfer Size"},{key:"resourceSize",itemType:"bytes",displayUnit:"kb",granularity:1,text:"Resource Size"},{key:"statusCode",itemType:"text",text:"Status Code"},{key:"mimeType",itemType:"text",text:"MIME Type"},{key:"resourceType",itemType:"text",text:"Resource Type"}],o),c=Number.isFinite(n)?1e6*n:void 0;return s.debugData={type:"debugdata",networkStartTimeTs:c},{score:1,details:s}}},KC={exports:{}};const JC=kc,XC=oi,ZC=Lo,QC=xl,eI={title:"Network Round Trip Times",description:"Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more](https://hpbn.co/primer-on-latency-and-bandwidth/)."
|
977
|
+
},tI=XC.createMessageInstanceIdFn("lighthouse-core/audits/network-rtt.js",eI);KC.exports=class NetworkRTT extends JC{static get meta(){return{id:"network-rtt",scoreDisplayMode:JC.SCORING_MODES.INFORMATIVE,title:tI(eI.title),description:tI(eI.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[JC.DEFAULT_PASS];if(!(await ZC.request(r,t)).length)return{score:1,notApplicable:!0};const a=await QC.request(r,t);let n=0;const i=a.rtt,o=[];for(const[e,t]of a.additionalRttByOrigin.entries()){if(!e.startsWith("http"))continue;const r=t+i;o.push({origin:e,rtt:r}),n=Number.isFinite(r)?Math.max(r,n):n}o.sort(((e,t)=>t.rtt-e.rtt));const s=[{key:"origin",itemType:"text",text:tI(XC.UIStrings.columnURL)},{key:"rtt",itemType:"ms",granularity:1,text:tI(XC.UIStrings.columnTimeSpent)}],c=JC.makeTableDetails(s,o);return{score:1,numericValue:n,numericUnit:"millisecond",displayValue:tI(XC.UIStrings.ms,{timeInMs:n}),details:c}}},KC.exports.UIStrings=eI;var rI={
|
978
|
+
exports:{}};const aI=kc,nI=oi,iI=Lo,oI=xl,sI={title:"Server Backend Latencies",description:"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall)."},cI=nI.createMessageInstanceIdFn("lighthouse-core/audits/network-server-latency.js",sI);rI.exports=class NetworkServerLatency extends aI{static get meta(){return{id:"network-server-latency",scoreDisplayMode:aI.SCORING_MODES.INFORMATIVE,title:cI(sI.title),description:cI(sI.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[aI.DEFAULT_PASS];if(!(await iI.request(r,t)).length)return{score:1,notApplicable:!0};const a=await oI.request(r,t);let n=0;const i=[];for(const[e,t]of a.serverResponseTimeByOrigin.entries())e.startsWith("http")&&(n=Math.max(t,n),i.push({origin:e,serverResponseTime:t}))
|
979
|
+
;i.sort(((e,t)=>t.serverResponseTime-e.serverResponseTime));const o=[{key:"origin",itemType:"text",text:cI(nI.UIStrings.columnURL)},{key:"serverResponseTime",itemType:"ms",granularity:1,text:cI(nI.UIStrings.columnTimeSpent)}],s=aI.makeTableDetails(o,i);return{score:Math.max(1-n/500,0),numericValue:n,numericUnit:"millisecond",displayValue:cI(nI.UIStrings.ms,{timeInMs:n}),details:s}}},rI.exports.UIStrings=sI;var lI={exports:{}};const uI=kc,dI=jb,mI=oi,pI={title:"Avoids `unload` event listeners",failureTitle:"Registers an `unload` listener",description:"The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Use `pagehide` or `visibilitychange` events instead. [Learn more](https://web.dev/bfcache/#never-use-the-unload-event)"},hI=mI.createMessageInstanceIdFn("lighthouse-core/audits/no-unload-listeners.js",pI);lI.exports=class NoUnloadListeners extends uI{static get meta(){return{id:"no-unload-listeners",
|
980
|
+
title:hI(pI.title),failureTitle:hI(pI.failureTitle),description:hI(pI.description),requiredArtifacts:["GlobalListeners","JsUsage","SourceMaps","ScriptElements"]}}static async audit(e,t){const r=e.GlobalListeners.filter((e=>"unload"===e.type));if(!r.length)return{score:1};const a=await dI.request(e,t),n=[{key:"source",itemType:"source-location",text:hI(mI.UIStrings.columnSource)}],i=new Map;for(const[t,r]of Object.entries(e.JsUsage))for(const e of r)i.set(e.scriptId,t);const o=r.map((e=>{const t=i.get(e.scriptId);if(!t)return{source:{type:"url",value:"(unknown)"}};const r=a.find((e=>e.script.src===t));return{source:uI.makeSourceLocation(t,e.lineNumber,e.columnNumber,r)}}));return{score:0,details:uI.makeTableDetails(n,o)}}},lI.exports.UIStrings=pI;var gI={exports:{}};const fI=kc,yI=oi,vI={title:"Avoid non-composited animations",description:"Animations which are not composited can be janky and increase CLS. [Learn more](https://web.dev/non-composited-animations)",
|
981
|
+
displayValue:"{itemCount, plural,\n =1 {# animated element found}\n other {# animated elements found}\n }",unsupportedCSSProperty:"{propertyCount, plural,\n =1 {Unsupported CSS Property: {properties}}\n other {Unsupported CSS Properties: {properties}}\n }",transformDependsBoxSize:"Transform-related property depends on box size",filterMayMovePixels:"Filter-related property may move pixels",nonReplaceCompositeMode:'Effect has composite mode other than "replace"',incompatibleAnimations:"Target has another animation which is incompatible",unsupportedTimingParameters:"Effect has unsupported timing parameters"},bI=yI.createMessageInstanceIdFn("lighthouse-core/audits/non-composited-animations.js",vI),wI=[{flag:8192,text:vI.unsupportedCSSProperty},{flag:2048,text:vI.transformDependsBoxSize},{flag:4096,text:vI.filterMayMovePixels},{flag:16,text:vI.nonReplaceCompositeMode},{flag:64,text:vI.incompatibleAnimations},{flag:8,text:vI.unsupportedTimingParameters}]
|
982
|
+
;function getActionableFailureReasons(e,t){return wI.filter((t=>e&t.flag)).map((e=>e.text===vI.unsupportedCSSProperty?bI(e.text,{propertyCount:t.length,properties:t.join(", ")}):bI(e.text)))}gI.exports=class NonCompositedAnimations extends fI{static get meta(){return{id:"non-composited-animations",scoreDisplayMode:fI.SCORING_MODES.INFORMATIVE,title:bI(vI.title),description:bI(vI.description),requiredArtifacts:["TraceElements","HostUserAgent"]}}static async audit(e){const t=e.HostUserAgent.match(/Chrome\/(\d+)/);if(!t||Number(t[1])<86)return{score:1,notApplicable:!0};const r=[];let a=!1;e.TraceElements.forEach((e=>{if("animation"!==e.traceEventType)return;const t=e.animations||[],n=new Map;for(const{name:e,failureReasonsMask:r,unsupportedProperties:i}of t){if(!r)continue;const t=getActionableFailureReasons(r,i||[]);for(const r of t){e&&(a=!0);const t=n.get(e)||new Set;t.add(r),n.set(e,t)}}if(!n.size)return;const i=[];for(const[e,t]of n)for(const r of t)i.push({failureReason:r,
|
983
|
+
animation:e});r.push({node:fI.makeNodeItem(e.node),subItems:{type:"subitems",items:i}})}));const n=[{key:"node",itemType:"node",subItemsHeading:{key:"failureReason",itemType:"text"},text:bI(yI.UIStrings.columnElement)}];a&&n.push({key:null,itemType:"text",subItemsHeading:{key:"animation",itemType:"text"},text:bI(yI.UIStrings.columnName)});const i=fI.makeTableDetails(n,r);let o;return r.length>0&&(o=bI(vI.displayValue,{itemCount:r.length})),{score:0===r.length?1:0,notApplicable:0===r.length,details:i,displayValue:o}}},gI.exports.UIStrings=vI;var SI={exports:{}};const TI=Ao,EI=Lo,xI=ji,_I=Ki,AI=Tu,{Util:RI}=Ni;class ResourceSummary$2{static determineResourceType(e){if(!e.resourceType)return"other";return{Stylesheet:"stylesheet",Image:"image",Media:"media",Font:"font",Script:"script",Document:"document"}[e.resourceType]||"other"}static summarize(e,t,r){const a={stylesheet:{count:0,resourceSize:0,transferSize:0},image:{count:0,resourceSize:0,transferSize:0},media:{count:0,resourceSize:0,
|
984
|
+
transferSize:0},font:{count:0,resourceSize:0,transferSize:0},script:{count:0,resourceSize:0,transferSize:0},document:{count:0,resourceSize:0,transferSize:0},other:{count:0,resourceSize:0,transferSize:0},total:{count:0,resourceSize:0,transferSize:0},"third-party":{count:0,resourceSize:0,transferSize:0}},n=AI.getMatchingBudget(r,t);let i=[];if(n?.options?.firstPartyHostnames)i=n.options.firstPartyHostnames;else{const e=RI.getRootDomain(t);i=[`*.${e}`]}return e.filter((e=>("other"!==this.determineResourceType(e)||!e.url.endsWith("/favicon.ico"))&&!_I.isNonNetworkRequest(e))).forEach((e=>{const t=this.determineResourceType(e);a[t].count++,a[t].resourceSize+=e.resourceSize,a[t].transferSize+=e.transferSize,a.total.count++,a.total.resourceSize+=e.resourceSize,a.total.transferSize+=e.transferSize;i.some((t=>{const r=new xI(e.url);return t.startsWith("*.")?r.hostname.endsWith(t.slice(2)):r.hostname===t}))||(a["third-party"].count++,a["third-party"].resourceSize+=e.resourceSize,
|
985
|
+
a["third-party"].transferSize+=e.transferSize)})),a}static async compute_(e,t){const r=await EI.request(e.devtoolsLog,t);return ResourceSummary$2.summarize(r,e.URL.finalUrl,e.budgets)}}var kI=TI(ResourceSummary$2,["URL","devtoolsLog","budgets"]);const DI=kc,CI=kI,II=GT,NI=Tu,LI=oi,MI={title:"Performance budget",description:"Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",requestCountOverBudget:"{count, plural,\n =1 {1 request}\n other {# requests}\n }"},PI=LI.createMessageInstanceIdFn("lighthouse-core/audits/performance-budget.js",MI);SI.exports=class ResourceBudget extends DI{static get meta(){return{id:"performance-budget",title:PI(MI.title),description:PI(MI.description),scoreDisplayMode:DI.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","URL"]}}static getRowLabel(e){return{
|
986
|
+
total:LI.UIStrings.totalResourceType,document:LI.UIStrings.documentResourceType,script:LI.UIStrings.scriptResourceType,stylesheet:LI.UIStrings.stylesheetResourceType,image:LI.UIStrings.imageResourceType,media:LI.UIStrings.mediaResourceType,font:LI.UIStrings.fontResourceType,other:LI.UIStrings.otherResourceType,"third-party":LI.UIStrings.thirdPartyResourceType}[e]}static tableItems(e,t){return Object.keys(t).map((r=>{const a=PI(this.getRowLabel(r)),n=t[r].count,i=t[r].transferSize;let o,s;if(e.resourceSizes){const t=e.resourceSizes.find((e=>e.resourceType===r));t&&i>1024*t.budget&&(o=i-1024*t.budget)}if(e.resourceCounts){const t=e.resourceCounts.find((e=>e.resourceType===r));if(t&&n>t.budget){const e=n-t.budget;s=PI(MI.requestCountOverBudget,{count:e})}}return{resourceType:r,label:a,requestCount:n,transferSize:i,countOverBudget:s,sizeOverBudget:o}
|
987
|
+
})).filter((t=>!(!e.resourceSizes||!e.resourceSizes.some((e=>e.resourceType===t.resourceType)))||!(!e.resourceCounts||!e.resourceCounts.some((e=>e.resourceType===t.resourceType))))).sort(((e,t)=>(t.sizeOverBudget||0)-(e.sizeOverBudget||0)))}static async audit(e,t){const r=e.devtoolsLogs[DI.DEFAULT_PASS],a={devtoolsLog:r,URL:e.URL,budgets:t.settings.budgets},n=await CI.request(a,t),i=await II.request({URL:e.URL,devtoolsLog:r},t),o=NI.getMatchingBudget(t.settings.budgets,i.url);if(!o)return{score:0,notApplicable:!0};const s=[{key:"label",itemType:"text",text:PI(LI.UIStrings.columnResourceType)},{key:"requestCount",itemType:"numeric",text:PI(LI.UIStrings.columnRequests)},{key:"transferSize",itemType:"bytes",text:PI(LI.UIStrings.columnTransferSize)},{key:"countOverBudget",itemType:"text",text:""},{key:"sizeOverBudget",itemType:"bytes",text:PI(LI.UIStrings.columnOverBudget)}];return{details:DI.makeTableDetails(s,this.tableItems(o,n)),score:1}}},SI.exports.UIStrings=MI
|
988
|
+
;const OI=kc,FI=oi,UI=db,jI=fb,BI=Tb,$I=qk,qI=Tk,zI=FI.createMessageInstanceIdFn("lighthouse-core/audits/predictive-perf.js",{});var VI=class PredictivePerf extends OI{static get meta(){return{id:"predictive-perf",title:"Predicted Performance (beta)",description:"Predicted performance evaluates how your site will perform under a cellular connection on a mobile device.",scoreDisplayMode:OI.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext"]}}static async audit(e,t){const r=e.GatherContext,a={trace:e.traces[OI.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[OI.DEFAULT_PASS],gatherContext:r,settings:{}},n=await UI.request(a,t),i=await jI.request(a,t),o=await BI.request(a,t),s=await $I.request(a,t),c=await qI.request(a,t),l={roughEstimateOfFCP:n.timing,optimisticFCP:n.optimisticEstimate.timeInMs,pessimisticFCP:n.pessimisticEstimate.timeInMs,roughEstimateOfFMP:i.timing,optimisticFMP:i.optimisticEstimate.timeInMs,
|
989
|
+
pessimisticFMP:i.pessimisticEstimate.timeInMs,roughEstimateOfTTI:o.timing,optimisticTTI:o.optimisticEstimate.timeInMs,pessimisticTTI:o.pessimisticEstimate.timeInMs,roughEstimateOfSI:s.timing,optimisticSI:s.optimisticEstimate.timeInMs,pessimisticSI:s.pessimisticEstimate.timeInMs,roughEstimateOfLCP:c.timing,optimisticLCP:c.optimisticEstimate.timeInMs,pessimisticLCP:c.pessimisticEstimate.timeInMs};return{score:OI.computeLogNormalScore({p10:3651,median:1e4},l.roughEstimateOfTTI),numericValue:l.roughEstimateOfTTI,numericUnit:"millisecond",displayValue:zI(FI.UIStrings.ms,{timeInMs:l.roughEstimateOfTTI}),details:{type:"debugdata",items:[l]}}}},WI={exports:{}};const HI=kc,GI=oi,YI=aA.exports,KI=/^(optional)$/,JI=Lo,XI={title:"Fonts with `font-display: optional` are preloaded",failureTitle:"Fonts with `font-display: optional` are not preloaded",description:"Preload `optional` fonts so first-time visitors may use them. [Learn more](https://web.dev/preload-optional-fonts/)"
|
990
|
+
},ZI=GI.createMessageInstanceIdFn("lighthouse-core/audits/preload-fonts.js",XI);class PreloadFontsAudit extends HI{static get meta(){return{id:"preload-fonts",title:ZI(XI.title),failureTitle:ZI(XI.failureTitle),description:ZI(XI.description),requiredArtifacts:["devtoolsLogs","URL","CSSUsage"]}}static getURLsAttemptedToPreload(e){const t=e.filter((e=>"Font"===e.resourceType)).filter((e=>e.isLinkPreload)).map((e=>e.url));return new Set(t)}static async audit_(e,t){const r=e.devtoolsLogs[this.DEFAULT_PASS],a=await JI.request(r,t),n=YI.findFontDisplayDeclarations(e,KI).passingURLs,i=PreloadFontsAudit.getURLsAttemptedToPreload(a),o=Array.from(n).filter((e=>!i.has(e))).map((e=>({url:e}))),s=[{key:"url",itemType:"url",text:ZI(GI.UIStrings.columnURL)}];return{score:o.length>0?0:1,details:HI.makeTableDetails(s,o),notApplicable:0===n.size}}static async audit(){return{score:1,notApplicable:!0}}}WI.exports=PreloadFontsAudit,WI.exports.UIStrings=XI;var QI={exports:{}}
|
991
|
+
;const eN=kc,tN=oi,rN=Ki,aN=GT,nN=Tk,iN=Dl,oN=Ib,sN={title:"Preload Largest Contentful Paint image",description:"Preload the image used by the LCP element in order to improve your LCP time. [Learn more](https://web.dev/optimize-lcp/#preload-important-resources)."},cN=tN.createMessageInstanceIdFn("lighthouse-core/audits/preload-lcp-image.js",sN);class PreloadLCPImageAudit extends eN{static get meta(){return{id:"preload-lcp-image",title:cN(sN.title),description:cN(sN.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","GatherContext","URL","TraceElements","ImageElements"],scoreDisplayMode:eN.SCORING_MODES.NUMERIC}}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!rN.isNonNetworkRequest(e)&&(!(r.length<=a)&&e.frameId===t.frameId))}static findLCPNode(e,t){let r,a;return e.traverse(((e,n)=>{"network"===e.type&&e.record.url===t&&(r=e,a=n.slice(1).filter((e=>"network"===e.type)))})),{lcpNode:r,path:a}}
|
992
|
+
static getLCPNodeToPreload(e,t,r,a){if(!r)return{};const n=a.find((e=>e.node.devtoolsNodePath===r.node.devtoolsNodePath));if(!n)return{};const i=n.src,{lcpNode:o,path:s}=PreloadLCPImageAudit.findLCPNode(t,i);if(!o||!s)return{};return{lcpNodeToPreload:PreloadLCPImageAudit.shouldPreloadRequest(o.record,e,s)?o:void 0,initiatorPath:[{url:o.record.url,initiatorType:o.initiatorType},...s.map((e=>({url:e.record.url,initiatorType:e.initiatorType})))]}}static computeWasteWithGraph(e,t,r,a){if(!t)return{wastedMs:0,results:[]};const n=r.cloneWithRelationships(),i=new Set;for(const e of t.getDependencies())i.add(e.id);let o=null,s=null;for(const{node:e}of n.traverseGenerator())"network"===e.type&&(e.isMainDocument()?s=e:e.id===t.id&&(o=e));if(!s)throw new Error("Could not find main document node");if(!o)throw new Error("Could not find the LCP node");o.removeAllDependencies(),o.addDependency(s);const c=a.simulate(r,{flexibleOrdering:!0}),l=a.simulate(n,{flexibleOrdering:!0}),u=c.nodeTimings.get(t)
|
993
|
+
;if(!u)throw new Error("Impossible - node timings should never be undefined");const d=l.nodeTimings.get(o);if(!d)throw new Error("Impossible - node timings should never be undefined");const m=Array.from(l.nodeTimings.keys()).reduce(((e,t)=>e.set(t.id,t)),new Map);let p=0;for(const e of Array.from(i)){const t=m.get(e);if(!t)throw new Error("Impossible - node should never be undefined");const r=l.nodeTimings.get(t)?.endTime||0;p=Math.max(p,r)}const h=u.endTime-Math.max(d.endTime,p);return{wastedMs:h,results:[{node:eN.makeNodeItem(e.node),url:t.record.url,wastedMs:h}]}}static async audit(e,t){const r=e.GatherContext,a=e.traces[PreloadLCPImageAudit.DEFAULT_PASS],n=e.devtoolsLogs[PreloadLCPImageAudit.DEFAULT_PASS],i=e.URL,o={trace:a,devtoolsLog:n,gatherContext:r,settings:t.settings},s=e.TraceElements.find((e=>"largest-contentful-paint"===e.traceEventType));if(!s||"image"!==s.type)return{score:null,notApplicable:!0};const[c,l,u]=await Promise.all([aN.request({devtoolsLog:n,URL:i
|
994
|
+
},t),nN.request(o,t),iN.request({devtoolsLog:n,settings:t.settings},t)]),d=l.pessimisticGraph,{lcpNodeToPreload:m,initiatorPath:p}=PreloadLCPImageAudit.getLCPNodeToPreload(c,d,s,e.ImageElements),{results:h,wastedMs:f}=PreloadLCPImageAudit.computeWasteWithGraph(s,m,d,u),y=[{key:"node",valueType:"node",label:""},{key:"url",valueType:"url",label:cN(tN.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:cN(tN.UIStrings.columnWastedMs)}],v=eN.makeOpportunityDetails(y,h,f);return p&&(v.debugData={type:"debugdata",initiatorPath:p,pathLength:p.length}),{score:oN.scoreForWastedMs(f),numericValue:f,numericUnit:"millisecond",displayValue:f?cN(tN.UIStrings.displayValueMsSavings,{wastedMs:f}):"",details:v}}}QI.exports=PreloadLCPImageAudit,QI.exports.UIStrings=sN;var lN={exports:{}};const uN=kc,dN=Ib,mN=oi,pN=Yp,hN=Lo,gN=GT,fN=Tb,yN={title:"Avoid multiple page redirects",
|
995
|
+
description:"Redirects introduce additional delays before the page can be loaded. [Learn more](https://web.dev/redirects/)."},vN=mN.createMessageInstanceIdFn("lighthouse-core/audits/redirects.js",yN);class Redirects extends uN{static get meta(){return{id:"redirects",title:vN(yN.title),description:vN(yN.description),scoreDisplayMode:uN.SCORING_MODES.NUMERIC,supportedModes:["navigation"],requiredArtifacts:["URL","GatherContext","devtoolsLogs","traces"]}}static getDocumentRequestChain(e,t,r){const a=[];for(const e of r.processEvents){if("navigationStart"!==e.name)continue;const r=e.args.data||{};if(!r.documentLoaderURL||!r.isLoadingMainFrame)continue;let n=t.find((e=>e.url===r.documentLoaderURL));for(;n;)a.push(n),n=n.redirectDestination}return a.length?a:(e.redirects||[]).concat(e)}static async audit(e,t){const r=t.settings,a=e.traces[uN.DEFAULT_PASS],n=e.devtoolsLogs[uN.DEFAULT_PASS],i=e.GatherContext,o=await pN.request(a,t),s=await hN.request(n,t),c=await gN.request({URL:e.URL,
|
996
|
+
devtoolsLog:n},t),l={trace:a,devtoolsLog:n,gatherContext:i,settings:r},u=await fN.request(l,t),d=new Map;for(const[e,t]of u.pessimisticEstimate.nodeTimings.entries())"network"===e.type&&d.set(e.record.url,t);const m=Redirects.getDocumentRequestChain(c,s,o);let p=0;const h=[];for(let e=0;e<m.length&&!(m.length<2);e++){const t=m[e],a=m[e+1]||t,n=d.get(t.url),i=d.get(a.url);if(!n||!i)throw new Error("Could not find redirects in graph");const o=i.startTime-n.startTime,s=a.startTime-t.startTime,c="simulate"===r.throttlingMethod?o:1e3*s;p+=c,h.push({url:t.url,wastedMs:c})}const f=[{key:"url",valueType:"url",label:vN(mN.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:vN(mN.UIStrings.columnTimeSpent)}],y=uN.makeOpportunityDetails(f,h,p);return{score:m.length<=2?1:dN.scoreForWastedMs(p),numericValue:p,numericUnit:"millisecond",displayValue:p?vN(mN.UIStrings.displayValueMsSavings,{wastedMs:p}):"",details:y}}}lN.exports=Redirects,lN.exports.UIStrings=yN;var bN={exports:{}}
|
997
|
+
;const wN=kc,SN=kI,TN=oi,EN={title:"Keep request counts low and transfer sizes small",description:"To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more](https://web.dev/use-lighthouse-for-performance-budgets/).",displayValue:"{requestCount, plural, =1 {1 request • {byteCount, number, bytes} KiB} other {# requests • {byteCount, number, bytes} KiB}}"},xN=TN.createMessageInstanceIdFn("lighthouse-core/audits/resource-summary.js",EN);bN.exports=class ResourceSummary extends wN{static get meta(){return{id:"resource-summary",title:xN(EN.title),description:xN(EN.description),scoreDisplayMode:wN.SCORING_MODES.INFORMATIVE,requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[wN.DEFAULT_PASS],a=await SN.request({devtoolsLog:r,URL:e.URL,budgets:t.settings.budgets},t),n=[{key:"label",itemType:"text",text:xN(TN.UIStrings.columnResourceType)},{key:"requestCount",itemType:"numeric",text:xN(TN.UIStrings.columnRequests)},{
|
998
|
+
key:"transferSize",itemType:"bytes",text:xN(TN.UIStrings.columnTransferSize)}],i={total:xN(TN.UIStrings.totalResourceType),document:xN(TN.UIStrings.documentResourceType),script:xN(TN.UIStrings.scriptResourceType),stylesheet:xN(TN.UIStrings.stylesheetResourceType),image:xN(TN.UIStrings.imageResourceType),media:xN(TN.UIStrings.mediaResourceType),font:xN(TN.UIStrings.fontResourceType),other:xN(TN.UIStrings.otherResourceType),"third-party":xN(TN.UIStrings.thirdPartyResourceType)},o=Object.keys(a).map((e=>({resourceType:e,label:i[e],requestCount:a[e].count,transferSize:a[e].transferSize}))),s=o.find((e=>"third-party"===e.resourceType))||[],c=o.filter((e=>"third-party"!==e.resourceType)).sort(((e,t)=>t.transferSize-e.transferSize)).concat(s);return{details:wN.makeTableDetails(n,c),score:1,displayValue:xN(EN.displayValue,{requestCount:a.total.count,byteCount:a.total.transferSize})}}},bN.exports.UIStrings=EN;var _N={exports:{}};!function(e){function JPEGEncoder(e){
|
1002
999
|
var t,r,a,n,i,o=Math.floor,s=new Array(64),c=new Array(64),l=new Array(64),u=new Array(64),d=new Array(65535),m=new Array(65535),p=new Array(64),h=new Array(64),f=[],y=0,v=7,b=new Array(64),w=new Array(64),S=new Array(64),T=new Array(256),E=new Array(2048),x=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],_=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],A=[0,1,2,3,4,5,6,7,8,9,10,11],R=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],k=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],D=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],I=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],N=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250]
|
1003
1000
|
;function computeHuffmanTbl(e,t){for(var r=0,a=0,n=new Array,i=1;i<=16;i++){for(var o=1;o<=e[i];o++)n[t[a]]=[],n[t[a]][0]=r,n[t[a]][1]=i,a++,r++;r*=2}return n}function writeBits(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1<<r&&(y|=1<<v),r--,--v<0&&(255==y?(writeByte(255),writeByte(0)):writeByte(y),v=7,y=0)}function writeByte(e){f.push(e)}function writeWord(e){writeByte(e>>8&255),writeByte(255&e)}function processDU(e,t,r,a,n){for(var i,o=n[0],s=n[240],c=function fDCTQuant(e,t){var r,a,n,i,o,s,c,l,u,d,m=0;for(u=0;u<8;++u){r=e[m],a=e[m+1],n=e[m+2],i=e[m+3],o=e[m+4],s=e[m+5],c=e[m+6];var h=r+(l=e[m+7]),f=r-l,y=a+c,v=a-c,b=n+s,w=n-s,S=i+o,T=i-o,E=h+S,x=h-S,_=y+b,A=y-b;e[m]=E+_,e[m+4]=E-_;var R=.707106781*(A+x);e[m+2]=x+R,e[m+6]=x-R;var k=.382683433*((E=T+w)-(A=v+f)),D=.5411961*E+k,C=1.306562965*A+k,I=.707106781*(_=w+v),N=f+I,L=f-I;e[m+5]=L+D,e[m+3]=L-D,e[m+1]=N+C,e[m+7]=N-C,m+=8}for(m=0,u=0;u<8;++u){r=e[m],a=e[m+8],n=e[m+16],i=e[m+24],o=e[m+32],s=e[m+40],c=e[m+48]
|
1004
|
-
;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var
|
1001
|
+
;var M=r+(l=e[m+56]),P=r-l,O=a+c,F=a-c,U=n+s,j=n-s,B=i+o,$=i-o,q=M+B,z=M-B,V=O+U,W=O-U;e[m]=q+V,e[m+32]=q-V;var H=.707106781*(W+z);e[m+16]=z+H,e[m+48]=z-H;var G=.382683433*((q=$+j)-(W=F+P)),Y=.5411961*q+G,K=1.306562965*W+G,J=.707106781*(V=j+F),X=P+J,Z=P-J;e[m+40]=Z+Y,e[m+24]=Z-Y,e[m+8]=X+K,e[m+56]=X-K,m++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)h[x[l]]=c[l];var u=h[0]-r;r=h[0],0==u?writeBits(a[0]):(writeBits(a[m[i=32767+u]]),writeBits(d[i]));for(var f=63;f>0&&0==h[f];f--);if(0==f)return writeBits(o),r;for(var y,v=1;v<=f;){for(var b=v;0==h[v]&&v<=f;++v);var w=v-b;if(w>=16){y=w>>4;for(var S=1;S<=y;++S)writeBits(s);w&=15}i=32767+h[v],writeBits(n[(w<<4)+m[i]]),writeBits(d[i]),v++}return 63!=f&&writeBits(o),r}function setQuality(e){if(e<=0&&(e=1),e>100&&(e=100),i!=e){(function initQuantTables(e){
|
1005
1002
|
for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var a=o((t[r]*e+50)/100);a<1?a=1:a>255&&(a=255),s[x[r]]=a}for(var n=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],i=0;i<64;i++){var d=o((n[i]*e+50)/100);d<1?d=1:d>255&&(d=255),c[x[i]]=d}for(var m=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],p=0,h=0;h<8;h++)for(var f=0;f<8;f++)l[p]=1/(s[x[p]]*m[h]*m[f]*8),u[p]=1/(c[x[p]]*m[h]*m[f]*8),p++})(e<50?Math.floor(5e3/e):Math.floor(200-2*e)),i=e}}this.encode=function(e,i){(new Date).getTime(),i&&setQuality(i),f=new Array,y=0,v=7,writeWord(65496),function writeAPP0(){writeWord(65504),writeWord(16),writeByte(74),writeByte(70),writeByte(73),
|
1006
1003
|
writeByte(70),writeByte(0),writeByte(1),writeByte(1),writeByte(0),writeWord(1),writeWord(1),writeByte(0),writeByte(0)}(),function writeAPP1(e){if(e){writeWord(65505),69===e[0]&&120===e[1]&&105===e[2]&&102===e[3]?writeWord(e.length+2):(writeWord(e.length+5+2),writeByte(69),writeByte(120),writeByte(105),writeByte(102),writeByte(0));for(var t=0;t<e.length;t++)writeByte(e[t])}}(e.exifBuffer),function writeDQT(){writeWord(65499),writeWord(132),writeByte(0);for(var e=0;e<64;e++)writeByte(s[e]);writeByte(1);for(var t=0;t<64;t++)writeByte(c[t])}(),function writeSOF0(e,t){writeWord(65472),writeWord(17),writeByte(8),writeWord(t),writeWord(e),writeByte(3),writeByte(1),writeByte(17),writeByte(0),writeByte(2),writeByte(17),writeByte(1),writeByte(3),writeByte(17),writeByte(1)}(e.width,e.height),function writeDHT(){writeWord(65476),writeWord(418),writeByte(0);for(var e=0;e<16;e++)writeByte(_[e+1]);for(var t=0;t<=11;t++)writeByte(A[t]);writeByte(16);for(var r=0;r<16;r++)writeByte(R[r+1])
|
1007
1004
|
;for(var a=0;a<=161;a++)writeByte(k[a]);writeByte(1);for(var n=0;n<16;n++)writeByte(D[n+1]);for(var i=0;i<=11;i++)writeByte(C[i]);writeByte(17);for(var o=0;o<16;o++)writeByte(I[o+1]);for(var s=0;s<=161;s++)writeByte(N[s])}(),function writeSOS(){writeWord(65498),writeWord(12),writeByte(3),writeByte(1),writeByte(0),writeByte(2),writeByte(17),writeByte(3),writeByte(17),writeByte(0),writeByte(63),writeByte(0)}();var o=0,d=0,m=0;y=0,v=7,this.encode.displayName="_encode_";for(var p,h,T,x,L,M,P,O,F,U=e.data,j=e.width,B=e.height,$=4*j,q=0;q<B;){for(p=0;p<$;){for(M=L=$*q+p,P=-1,O=0,F=0;F<64;F++)M=L+(O=F>>3)*$+(P=4*(7&F)),q+O>=B&&(M-=$*(q+1+O-B)),p+P>=$&&(M-=p+P-$+4),h=U[M++],T=U[M++],x=U[M++],b[F]=(E[h]+E[T+256>>0]+E[x+512>>0]>>16)-128,w[F]=(E[h+768>>0]+E[T+1024>>0]+E[x+1280>>0]>>16)-128,S[F]=(E[h+1280>>0]+E[T+1536>>0]+E[x+1792>>0]>>16)-128;o=processDU(b,l,o,t,a),d=processDU(w,u,d,r,n),m=processDU(S,u,m,r,n),p+=32}q+=8}if(v>=0){var z=[];z[1]=v+1,z[0]=(1<<v+1)-1,writeBits(z)}
|
1008
|
-
return writeWord(65497),Buffer$2.from(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(
|
1005
|
+
return writeWord(65497),Buffer$2.from(f)},function init(){(new Date).getTime(),e||(e=50),function initCharLookupTable(){for(var e=String.fromCharCode,t=0;t<256;t++)T[t]=e(t)}(),function initHuffmanTbl(){t=computeHuffmanTbl(_,A),r=computeHuffmanTbl(D,C),a=computeHuffmanTbl(R,k),n=computeHuffmanTbl(I,N)}(),function initCategoryNumber(){for(var e=1,t=2,r=1;r<=15;r++){for(var a=e;a<t;a++)m[32767+a]=r,d[32767+a]=[],d[32767+a][1]=r,d[32767+a][0]=a;for(var n=-(t-1);n<=-e;n++)m[32767+n]=r,d[32767+n]=[],d[32767+n][1]=r,d[32767+n][0]=t-1+n;e<<=1,t<<=1}}(),function initRGBYUVTable(){for(var e=0;e<256;e++)E[e]=19595*e,E[e+256>>0]=38470*e,E[e+512>>0]=7471*e+32768,E[e+768>>0]=-11059*e,E[e+1024>>0]=-21709*e,E[e+1280>>0]=32768*e+8421375,E[e+1536>>0]=-27439*e,E[e+1792>>0]=-5329*e}(),setQuality(e),(new Date).getTime()}()}e.exports=function encode(e,t){void 0===t&&(t=50);return{data:new JPEGEncoder(t).encode(e,t),width:e.width,height:e.height}}}(_N);var AN={exports:{}};!function(e){
|
1009
1006
|
var t=function jpegImage(){var e=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),t=4017,r=799,a=3406,n=2276,i=1567,o=3784,s=5793,c=2896;function constructor(){}function buildHuffmanTable(e,t){for(var r,a,n=0,i=[],o=16;o>0&&!e[o-1];)o--;i.push({children:[],index:0});var s,c=i[0];for(r=0;r<o;r++){for(a=0;a<e[r];a++){for((c=i.pop()).children[c.index]=t[n];c.index>0;){if(0===i.length)throw new Error("Could not recreate Huffman Table");c=i.pop()}for(c.index++,i.push(c);i.length<=r;)i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s;n++}r+1<o&&(i.push(s={children:[],index:0}),c.children[c.index]=s.children,c=s)}return i[0].children}function decodeScan(t,r,a,n,i,o,s,c,l,u){a.precision,a.samplesPerLine,a.scanLines;var d=a.mcusPerLine,m=a.progressive;a.maxH,a.maxV;var p=r,h=0,f=0;function readBit(){if(f>0)return f--,h>>f&1
|
1010
1007
|
;if(255==(h=t[r++])){var e=t[r++];if(e)throw new Error("unexpected marker: "+(h<<8|e).toString(16))}return f=7,h>>>7}function decodeHuffman(e){for(var t,r=e;null!==(t=readBit());){if("number"==typeof(r=r[t]))return r;if("object"!=typeof r)throw new Error("invalid huffman sequence")}return null}function receive(e){for(var t=0;e>0;){var r=readBit();if(null===r)return;t=t<<1|r,e--}return t}function receiveAndExtend(e){var t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}var y=0;var v,b=0;function decodeMcu(e,t,r,a,n){var i=r%d,o=(r/d|0)*e.v+a,s=i*e.h+n;void 0===e.blocks[o]&&u.tolerantDecoding||t(e,e.blocks[o][s])}function decodeBlock(e,t,r){var a=r/e.blocksPerLine|0,n=r%e.blocksPerLine;void 0===e.blocks[a]&&u.tolerantDecoding||t(e,e.blocks[a][n])}var w,S,T,E,x,_,A=n.length;_=m?0===o?0===c?function decodeDCFirst(e,t){var r=decodeHuffman(e.huffmanTableDC),a=0===r?0:receiveAndExtend(r)<<l;t[0]=e.pred+=a}:function decodeDCSuccessive(e,t){t[0]|=readBit()<<l}:0===c?function decodeACFirst(t,r){
|
1011
1008
|
if(y>0)y--;else for(var a=o,n=s;a<=n;){var i=decodeHuffman(t.huffmanTableAC),c=15&i,u=i>>4;if(0!==c)r[e[a+=u]]=receiveAndExtend(c)*(1<<l),a++;else{if(u<15){y=receive(u)+(1<<u)-1;break}a+=16}}}:function decodeACSuccessive(t,r){for(var a=o,n=s,i=0;a<=n;){var c=e[a],u=r[c]<0?-1:1;switch(b){case 0:var d=decodeHuffman(t.huffmanTableAC),m=15&d;if(i=d>>4,0===m)i<15?(y=receive(i)+(1<<i),b=4):(i=16,b=1);else{if(1!==m)throw new Error("invalid ACn encoding");v=receiveAndExtend(m),b=i?2:3}continue;case 1:case 2:r[c]?r[c]+=(readBit()<<l)*u:0==--i&&(b=2==b?3:0);break;case 3:r[c]?r[c]+=(readBit()<<l)*u:(r[c]=v<<l,b=0);break;case 4:r[c]&&(r[c]+=(readBit()<<l)*u)}a++}4===b&&0==--y&&(b=0)}:function decodeBaseline(t,r){var a=decodeHuffman(t.huffmanTableDC),n=0===a?0:receiveAndExtend(a);r[0]=t.pred+=n;for(var i=1;i<64;){var o=decodeHuffman(t.huffmanTableAC),s=15&o,c=o>>4;if(0!==s)r[e[i+=c]]=receiveAndExtend(s),i++;else{if(c<15)break;i+=16}}};var R,k,D,C,I=0
|
@@ -1019,213 +1016,213 @@ n.samplesPerLine=readUint16(),n.components={},n.componentsOrder=[];var w=n.scanL
|
|
1019
1016
|
var r,a,n,i,o,s,c,l,u,d,m,p,h,f,y,v,b,w,S,T,E,x=this.width/e,_=this.height/t,A=0,R=e*t*this.components.length;requestMemoryAllocation(R);var k=new Uint8Array(R);switch(this.components.length){case 1:for(r=this.components[0],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m;break;case 2:for(r=this.components[0],a=this.components[1],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],u=0;u<e;u++)m=o[0|u*r.scaleX*x],k[A++]=m,m=s[0|u*a.scaleX*x],k[A++]=m;break;case 3:for(E=!0,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],w=clampTo8bit(m+1.402*((h=c[0|u*n.scaleX*x])-128)),S=clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),
|
1020
1017
|
T=clampTo8bit(m+1.772*(p-128))):(w=o[0|u*r.scaleX*x],S=s[0|u*a.scaleX*x],T=c[0|u*n.scaleX*x]),k[A++]=w,k[A++]=S,k[A++]=T;break;case 4:if(!this.adobe)throw new Error("Unsupported color mode (4 components)");for(E=!1,this.adobe&&this.adobe.transformCode?E=!0:void 0!==this.opts.colorTransform&&(E=!!this.opts.colorTransform),r=this.components[0],a=this.components[1],n=this.components[2],i=this.components[3],d=0;d<t;d++)for(o=r.lines[0|d*r.scaleY*_],s=a.lines[0|d*a.scaleY*_],c=n.lines[0|d*n.scaleY*_],l=i.lines[0|d*i.scaleY*_],u=0;u<e;u++)E?(m=o[0|u*r.scaleX*x],p=s[0|u*a.scaleX*x],h=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x],y=255-clampTo8bit(m+1.402*(h-128)),v=255-clampTo8bit(m-.3441363*(p-128)-.71413636*(h-128)),b=255-clampTo8bit(m+1.772*(p-128))):(y=o[0|u*r.scaleX*x],v=s[0|u*a.scaleX*x],b=c[0|u*n.scaleX*x],f=l[0|u*i.scaleX*x]),k[A++]=255-y,k[A++]=255-v,k[A++]=255-b,k[A++]=255-f;break;default:throw new Error("Unsupported color mode")}return k},copyToImageData:function copyToImageData(e,t){
|
1021
1018
|
var r,a,n,i,o,s,c,l,u,d=e.width,m=e.height,p=e.data,h=this.getData(d,m),f=0,y=0;switch(this.components.length){case 1:for(a=0;a<m;a++)for(r=0;r<d;r++)n=h[f++],p[y++]=n,p[y++]=n,p[y++]=n,t&&(p[y++]=255);break;case 3:for(a=0;a<m;a++)for(r=0;r<d;r++)c=h[f++],l=h[f++],u=h[f++],p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;case 4:for(a=0;a<m;a++)for(r=0;r<d;r++)o=h[f++],s=h[f++],n=h[f++],c=255-clampTo8bit(o*(1-(i=h[f++])/255)+i),l=255-clampTo8bit(s*(1-i/255)+i),u=255-clampTo8bit(n*(1-i/255)+i),p[y++]=c,p[y++]=l,p[y++]=u,t&&(p[y++]=255);break;default:throw new Error("Unsupported color mode")}}};var l=0,u=0;function requestMemoryAllocation(e=0){var t=l+e;if(t>u){var r=Math.ceil((t-u)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`)}l=t}return constructor.resetMaxMemoryUsage=function(e){l=0,u=e},constructor.getBytesAllocated=function(){return l},constructor.requestMemoryAllocation=requestMemoryAllocation,constructor}();e.exports=function decode(e,r={}){
|
1022
|
-
var a={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...r},n=new Uint8Array(e),i=new t;i.opts=a,t.resetMaxMemoryUsage(1024*a.maxMemoryUsageInMB*1024),i.parse(n);var o=a.formatAsRGBA?4:3,s=i.width*i.height*o;try{t.requestMemoryAllocation(s);var c={width:i.width,height:i.height,exifBuffer:i.exifBuffer,data:a.useTArray?new Uint8Array(s):Buffer$2.alloc(s)};i.comments.length>0&&(c.comments=i.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+s):e}return i.copyToImageData(c,a.formatAsRGBA),c}}(
|
1023
|
-
static scaleImageToThumbnail(e){const t=120,r=e.width/t,a=Math.floor(e.height/r),n=new Uint8Array(t*a*4);for(let i=0;i<t;i++)for(let o=0;o<a;o++){const a=Math.floor(i*r),s=4*(Math.floor(o*r)*e.width+a),c=4*(o*t+i);n[c]=e.data[s],n[c+1]=e.data[s+1],n[c+2]=e.data[s+2],n[c+3]=e.data[s+3]}return{width:t,height:a,data:n}}static async _audit(e,t){const r=e.traces[
|
1024
|
-
timing:Math.round(t-n.beginning),timestamp:1e3*t,data:`data:image/jpeg;base64,${r}`})}return{score:1,details:{type:"filmstrip",scale:l,items:o}}}static async audit(e,t){try{return await this._audit(e,t)}catch(t){if(new Set([
|
1019
|
+
var a={colorTransform:void 0,useTArray:!1,formatAsRGBA:!0,tolerantDecoding:!0,maxResolutionInMP:100,maxMemoryUsageInMB:512,...r},n=new Uint8Array(e),i=new t;i.opts=a,t.resetMaxMemoryUsage(1024*a.maxMemoryUsageInMB*1024),i.parse(n);var o=a.formatAsRGBA?4:3,s=i.width*i.height*o;try{t.requestMemoryAllocation(s);var c={width:i.width,height:i.height,exifBuffer:i.exifBuffer,data:a.useTArray?new Uint8Array(s):Buffer$2.alloc(s)};i.comments.length>0&&(c.comments=i.comments)}catch(e){throw e instanceof RangeError?new Error("Could not allocate enough memory for the image. Required: "+s):e}return i.copyToImageData(c,a.formatAsRGBA),c}}(AN);var RN={encode:_N.exports,decode:AN.exports};const kN=kc,DN=vi.exports,CN=RN,IN=lk;class ScreenshotThumbnails extends kN{static get meta(){return{id:"screenshot-thumbnails",scoreDisplayMode:kN.SCORING_MODES.INFORMATIVE,title:"Screenshot Thumbnails",description:"This is what the load of your site looked like.",requiredArtifacts:["traces","GatherContext"]}}
|
1020
|
+
static scaleImageToThumbnail(e){const t=120,r=e.width/t,a=Math.floor(e.height/r),n=new Uint8Array(t*a*4);for(let i=0;i<t;i++)for(let o=0;o<a;o++){const a=Math.floor(i*r),s=4*(Math.floor(o*r)*e.width+a),c=4*(o*t+i);n[c]=e.data[s],n[c+1]=e.data[s+1],n[c+2]=e.data[s+2],n[c+3]=e.data[s+3]}return{width:t,height:a,data:n}}static async _audit(e,t){const r=e.traces[kN.DEFAULT_PASS],a=new Map,n=await IN.request(r,t),i=t.options.minimumTimelineDuration||3e3,o=[],s=n.frames.filter((e=>!e.isProgressInterpolated())),c=n.complete||Math.max(...n.frames.map((e=>e.getTimeStamp()-n.beginning))),l=Math.max(c,i);if(!s.length||!Number.isFinite(l))throw new DN(DN.errors.INVALID_SPEEDLINE);for(let e=1;e<=10;e++){const t=n.beginning+l*e/10;let r,i=null;10===e?i=s[s.length-1]:s.forEach((e=>{e.getTimeStamp()<=t&&(i=e)}));const c=a.get(i);if(c)r=c;else{const e=i.getParsedImage(),t=ScreenshotThumbnails.scaleImageToThumbnail(e);r=CN.encode(t,90).data.toString("base64"),a.set(i,r)}o.push({
|
1021
|
+
timing:Math.round(t-n.beginning),timestamp:1e3*t,data:`data:image/jpeg;base64,${r}`})}return{score:1,details:{type:"filmstrip",scale:l,items:o}}}static async audit(e,t){try{return await this._audit(e,t)}catch(t){if(new Set([DN.errors.NO_SCREENSHOTS.code,DN.errors.SPEEDINDEX_OF_ZERO.code,DN.errors.NO_SPEEDLINE_FRAMES.code,DN.errors.INVALID_SPEEDLINE.code]).has(t.code)&&"timespan"===e.GatherContext.gatherMode)return{notApplicable:!0,score:1};throw t}}}var NN=ScreenshotThumbnails;const LN=kc,MN=jb,PN=zS,ON=qb;class ScriptTreemapDataAudit extends LN{static get meta(){return{id:"script-treemap-data",scoreDisplayMode:LN.SCORING_MODES.INFORMATIVE,title:"Script Treemap Data",description:"Used for treemap app",requiredArtifacts:["traces","devtoolsLogs","SourceMaps","ScriptElements","JsUsage","URL"]}}static makeScriptNode(e,t,r){function newNode(e){return{name:e,resourceBytes:0}}const a=newNode(t);function addAllNodesInSourcePath(e,r){let n=a;a.resourceBytes+=r.resourceBytes,
|
1025
1022
|
r.unusedBytes&&(a.unusedBytes=(a.unusedBytes||0)+r.unusedBytes);const i=e.replace(t,"").split(/\/+/);i.forEach(((e,t)=>{if(0===e.length)return;const a=t===i.length-1;let o=n.children&&n.children.find((t=>t.name===e));o||(o=newNode(e),n.children=n.children||[],n.children.push(o)),n=o,n.resourceBytes+=r.resourceBytes,r.unusedBytes&&(n.unusedBytes=(n.unusedBytes||0)+r.unusedBytes),a&&void 0!==r.duplicatedNormalizedModuleName&&(n.duplicatedNormalizedModuleName=r.duplicatedNormalizedModuleName)}))}for(const[e,t]of Object.entries(r))addAllNodesInSourcePath(e,t);if(function collapseAll(e){for(;e.children&&1===e.children.length;)e.name+="/"+e.children[0].name,e.children=e.children[0].children;if(e.children)for(const t of e.children)collapseAll(t)}(a),!a.name)return{...a,name:e,children:a.children};const n={...a};return n.name=e,n.children=[a],n}static async makeNodes(e,t){const r=[];let a=0;for(const t of e.ScriptElements)t.src||(a+=(t.content||"").length);if(a){const t=e.URL.finalUrl;r.push({
|
1026
|
-
name:t,resourceBytes:a})}const n=await
|
1027
|
-
unusedBytes:l.wastedBytes};r.push(u)}return r}static async audit(e,t){return{score:1,details:{type:"treemap-data",nodes:await ScriptTreemapDataAudit.makeNodes(e,t)}}}}var
|
1028
|
-
description:
|
1029
|
-
;return a.has(r.href)&&a.has(t.href)&&r.href!==t.href?{score:0,explanation:
|
1030
|
-
description:"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn More](https://support.google.com/webmasters/answer/9112205)",columnFailingLink:"Uncrawlable Link"},
|
1031
|
-
key:"node",itemType:"node",text:
|
1023
|
+
name:t,resourceBytes:a})}const n=await MN.request(e,t),i=await ON.request(e,t);for(const a of e.ScriptElements){if(!a.src)continue;const o=a.src,s=n.find((e=>a.src===e.script.src)),c=e.JsUsage[a.src]||[];if(!s&&0===c.length){r.push({name:o,resourceBytes:a.content?.length||0});continue}const l=await PN.request({url:a.src,scriptCoverages:c,bundle:s},t);let u;if(s&&!("errorMessage"in s.sizes)){const e={};for(const t of Object.keys(s.sizes.files)){const r={resourceBytes:s.sizes.files[t]};l.sourcesWastedBytes&&(r.unusedBytes=l.sourcesWastedBytes[t]);let a=t;s.rawMap.sourceRoot&&t.startsWith(s.rawMap.sourceRoot)&&(a=t.replace(s.rawMap.sourceRoot,""));const n=ON.normalizeSource(a);i.has(n)&&(r.duplicatedNormalizedModuleName=n),e[t]=r}if(s.sizes.unmappedBytes){const t={resourceBytes:s.sizes.unmappedBytes};l.sourcesWastedBytes&&(t.unusedBytes=l.sourcesWastedBytes["(unmapped)"]),e["(unmapped)"]=t}u=this.makeScriptNode(a.src,s.rawMap.sourceRoot||"",e)}else u={name:o,resourceBytes:l.totalBytes,
|
1024
|
+
unusedBytes:l.wastedBytes};r.push(u)}return r}static async audit(e,t){return{score:1,details:{type:"treemap-data",nodes:await ScriptTreemapDataAudit.makeNodes(e,t)}}}}var FN=ScriptTreemapDataAudit,UN={exports:{}};const jN=kc,BN=ji,$N=GT,qN={title:"Document has a valid `rel=canonical`",failureTitle:"Document does not have a valid `rel=canonical`",description:"Canonical links suggest which URL to show in search results. [Learn more](https://web.dev/canonical/).",explanationConflict:"Multiple conflicting URLs ({urlList})",explanationInvalid:"Invalid URL ({url})",explanationRelative:"Is not an absolute URL ({url})",explanationPointsElsewhere:"Points to another `hreflang` location ({url})",explanationRoot:"Points to the domain's root URL (the homepage), instead of an equivalent page of content"},zN=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/canonical.js",qN);class Canonical extends jN{static get meta(){return{id:"canonical",title:zN(qN.title),failureTitle:zN(qN.failureTitle),
|
1025
|
+
description:zN(qN.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL","devtoolsLogs"]}}static collectCanonicalURLs(e){const t=new Set,r=new Set;let a,n;for(const i of e)if("body"!==i.source)if("canonical"===i.rel){if(!i.hrefRaw)continue;i.href?BN.isValid(i.hrefRaw)?t.add(i.href):n=i:a=i}else"alternate"===i.rel&&i.href&&i.hreflang&&r.add(i.href);return{uniqueCanonicalURLs:t,hreflangURLs:r,invalidCanonicalLink:a,relativeCanonicallink:n}}static findInvalidCanonicalURLReason(e){const{uniqueCanonicalURLs:t,invalidCanonicalLink:r,relativeCanonicallink:a}=e;if(r)return{score:0,explanation:zN(qN.explanationInvalid,{url:r.hrefRaw})};if(a)return{score:0,explanation:zN(qN.explanationRelative,{url:a.hrefRaw})};const n=Array.from(t);return 0===n.length?{score:1,notApplicable:!0}:n.length>1?{score:0,explanation:zN(qN.explanationConflict,{urlList:n.join(", ")})}:void 0}static findCommonCanonicalURLMistakes(e,t,r){const{hreflangURLs:a}=e
|
1026
|
+
;return a.has(r.href)&&a.has(t.href)&&r.href!==t.href?{score:0,explanation:zN(qN.explanationPointsElsewhere,{url:r.href})}:t.origin===r.origin&&"/"===t.pathname&&"/"!==r.pathname?{score:0,explanation:zN(qN.explanationRoot)}:void 0}static async audit(e,t){const r=e.devtoolsLogs[jN.DEFAULT_PASS],a=await $N.request({devtoolsLog:r,URL:e.URL},t),n=new BN(a.url),i=Canonical.collectCanonicalURLs(e.LinkElements),o=Canonical.findInvalidCanonicalURLReason(i);if(o)return o;const s=new BN([...i.uniqueCanonicalURLs][0]),c=Canonical.findCommonCanonicalURLMistakes(i,s,n);return c||{score:1}}}UN.exports=Canonical,UN.exports.UIStrings=qN;var VN={exports:{}};const WN=kc,HN={title:"Links are crawlable",failureTitle:"Links are not crawlable",
|
1027
|
+
description:"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn More](https://support.google.com/webmasters/answer/9112205)",columnFailingLink:"Uncrawlable Link"},GN=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/crawlable-anchors.js",HN);VN.exports=class CrawlableAnchors extends WN{static get meta(){return{id:"crawlable-anchors",title:GN(HN.title),failureTitle:GN(HN.failureTitle),description:GN(HN.description),requiredArtifacts:["AnchorElements","URL"]}}static audit({AnchorElements:e,URL:t}){const r=e.filter((({rawHref:e,name:r="",role:a=""})=>{if(e=e.replace(/\s/g,""),r=r.trim(),(a=a.trim()).length>0)return;if(e.startsWith("mailto:"))return;if(e.startsWith("file:"))return!0;if(!(r.length>0)){if(""===e)return!0;if(/javascript:void(\(|)0(\)|)/.test(e))return!0;try{new URL(e,t.finalUrl)}catch(e){return!0}}})),a=[{
|
1028
|
+
key:"node",itemType:"node",text:GN(HN.columnFailingLink)}],n=r.map((e=>({node:WN.makeNodeItem(e.node)})));return{score:Number(0===r.length),details:WN.makeTableDetails(a,n)}}},VN.exports.UIStrings=HN;var YN={exports:{}},KN={};function min(e,t){return null===e?t:null===t?e:Math.min(e,t)}function max(e,t){return null===e?t:null===t?e:Math.max(e,t)}function translateLengthProperty(e,t,r){return"number"==typeof e?e>=0?clamp(e,1,1e4):void 0:"device-width"===e?100*t:"device-height"===e?100*r:1}function translateZoomProperty(e){return"number"==typeof e?e>=0?clamp(e,.1,10):void 0:"yes"===e?1:"device-width"===e||"device-height"===e?10:"no"===e||null===e?.1:void 0}function clamp(e,t,r){return max(min(e,r),t)}KN.getRenderingDataFromViewport=function(e,t,r,a,n){var i=t/100,o=r/100,s=null,c=null,l=null,u=null,d=null,m=null,p=null,h=null,f=null,y=t,v=r,b="zoom";if(void 0!==e["maximum-scale"]&&(s=translateZoomProperty(e["maximum-scale"])),
|
1032
1029
|
void 0!==e["minimum-scale"]&&(c=translateZoomProperty(e["minimum-scale"])),void 0!==e["initial-scale"]&&(l=translateZoomProperty(e["initial-scale"])),null!==c&&null===s&&(c=min(a,translateZoomProperty(e["minimum-scale"]))),void 0!==e.width&&(u="extend-to-zoom",m=translateLengthProperty(e.width,i,o)),void 0!==e.height&&(d="extend-to-zoom",p=translateLengthProperty(e.height,i,o)),void 0!==e["user-scalable"])if("number"==typeof(b=e["user-scalable"]))b=b>=1||b<=-1?"zoom":"fixed";else switch(b){case"yes":case"device-width":case"device-height":b="zoom";break;case"no":default:b="fixed"}null===l||void 0!==e.width&&void 0!==h||(void 0!==e.height?(u=null,m=null):(u="extend-to-zoom",m="extend-to-zoom")),null!==c&&null!==s&&(s=max(c,s)),null!==l&&(l=clamp(l,c,s));var w,S,T=null===l&&null===s?null:min(l,s);return null===T?("extend-to-zoom"===m&&(m=null),"extend-to-zoom"===p&&(p=null),"extend-to-zoom"===u&&(u=m),"extend-to-zoom"===d&&(d=p)):(w=y/T,S=v/T,"extend-to-zoom"===m&&(m=w),
|
1033
|
-
"extend-to-zoom"===p&&(p=S),"extend-to-zoom"===u&&(u=max(w,m)),"extend-to-zoom"===d&&(d=max(S,p))),null===u&&null===m||(h=max(u,min(m,y))),null===d&&null===p||(f=max(d,min(p,v))),null===h&&(h=null===f?y:0!==v?Math.round(f*(y/v)):y),null===f&&(f=0!==y?Math.round(h*(v/y)):v),{zoom:l,width:h,height:f,userZoom:b}},
|
1034
|
-
;for(;r<=t.length&&RegExp(" |\n|\t|\0d|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;return function setProperty(e,t,r){if(
|
1035
|
-
static async compute_(e){const t=e.find((e=>"viewport"===e.name));if(!t)return{hasViewportTag:!1,isMobileOptimized:!1,parserWarnings:[]};const r=[],a=
|
1036
|
-
explanationViewport:"Text is illegible because there's no viewport meta tag optimized for mobile screens.",additionalIllegibleText:"Add'l illegible text",legibleText:"Legible text",columnSelector:"Selector",columnPercentPageText:"% of Page Text",columnFontSize:"Font Size"},eL
|
1037
|
-
title:
|
1038
|
-
itemType:"source-location",text:eL
|
1039
|
-
;r.isInline&&"comment"!==n&&(i+=r.startLine,0===e.startLine&&(o+=r.startColumn));const s=
|
1040
|
-
;const rL=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]]
|
1041
|
-
;var
|
1042
|
-
static audit({LinkElements:e}){const t=[],r=e.filter((e=>{const t="alternate"===e.rel,r=e.hreflang,a="body"===e.source;return t&&r&&!a}));for(const e of r){const r=[];let n;isExpectedLanguageCode(e.hreflang)||r.push(
|
1043
|
-
;const
|
1030
|
+
"extend-to-zoom"===p&&(p=S),"extend-to-zoom"===u&&(u=max(w,m)),"extend-to-zoom"===d&&(d=max(S,p))),null===u&&null===m||(h=max(u,min(m,y))),null===d&&null===p||(f=max(d,min(p,v))),null===h&&(h=null===f?y:0!==v?Math.round(f*(y/v)):y),null===f&&(f=0!==y?Math.round(h*(v/y)):v),{zoom:l,width:h,height:f,userZoom:b}},KN.parseMetaViewPortContent=function(e){for(var t={validProperties:{},unknownProperties:{},invalidValues:{}},r=1;r<=e.length;){for(;r<=e.length&&RegExp(" |\n|\t|\0d|,|;|=").test(e[r-1]);)r++;r<=e.length&&(r=parseProperty(t,e,r))}return t};var JN=["width","height","initial-scale","minimum-scale","maximum-scale","user-scalable","shrink-to-fit","viewport-fit"];function parseProperty(e,t,r){for(var a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(var n=t.slice(a-1,r-1);r<=t.length&&!RegExp(",|;|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r
|
1031
|
+
;for(;r<=t.length&&RegExp(" |\n|\t|\0d|=").test(t[r-1]);)r++;if(r>t.length||RegExp(",|;").test(t[r-1]))return r;for(a=r;r<=t.length&&!RegExp(" |\n|\t|\0d|,|;|=").test(t[r-1]);)r++;return function setProperty(e,t,r){if(JN.indexOf(t)>=0){var a=parseFloat(r);if(!isNaN(a))return void(e.validProperties[t]=a);var n=r.toLowerCase();if("yes"===n||"no"===n||"device-width"===n||"device-height"===n||"viewport-fit"===t.toLowerCase()&&("auto"===n||"cover"===n))return void(e.validProperties[t]=n);e.validProperties[t]=null,e.invalidValues[t]=r}else e.unknownProperties[t]=r}(e,n,t.slice(a-1,r-1)),r}KN.expectedValues={width:["device-width","device-height","a positive number"],height:["device-width","device-height","a positive number"],"initial-scale":["a positive number"],"minimum-scale":["a positive number"],"maximum-scale":["a positive number"],"user-scalable":["yes","no","0","1"],"shrink-to-fit":["yes","no"],"viewport-fit":["auto","cover"]};const XN=KN,ZN=Ao;var QN=ZN(class ViewportMeta{
|
1032
|
+
static async compute_(e){const t=e.find((e=>"viewport"===e.name));if(!t)return{hasViewportTag:!1,isMobileOptimized:!1,parserWarnings:[]};const r=[],a=XN.parseMetaViewPortContent(t.content||"");Object.keys(a.unknownProperties).length&&r.push(`Invalid properties found: ${JSON.stringify(a.unknownProperties)}`),Object.keys(a.invalidValues).length&&r.push(`Invalid values found: ${JSON.stringify(a.invalidValues)}`);const n=a.validProperties;return{hasViewportTag:!0,isMobileOptimized:Boolean(n.width||n["initial-scale"]),parserWarnings:r}}},null);const eL=oi,tL=kc,rL=QN,aL={title:"Document uses legible font sizes",failureTitle:"Document doesn't use legible font sizes",description:"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more](https://web.dev/font-size/).",displayValue:"{decimalProportion, number, extendedPercent} legible text",
|
1033
|
+
explanationViewport:"Text is illegible because there's no viewport meta tag optimized for mobile screens.",additionalIllegibleText:"Add'l illegible text",legibleText:"Legible text",columnSelector:"Selector",columnPercentPageText:"% of Page Text",columnFontSize:"Font Size"},nL=eL.createMessageInstanceIdFn("lighthouse-core/audits/seo/font-size.js",aL);function getSelector(e){const t=function getAttributeMap(e=[]){const t=new Map;for(let r=0;r<e.length;r+=2){const a=e[r],n=e[r+1];if(!a||!n)continue;const i=n.trim();i&&t.set(a.toLowerCase(),i)}return t}(e.attributes);if(t.has("id"))return"#"+t.get("id");{const e=t.get("class");if(e)return"."+e.split(/\s+/).join(".")}return e.nodeName.toLowerCase()}function nodeToTableNode(e){const t=(e.attributes||[]).map(((e,t)=>t%2==0?` ${e}`:`="${e}"`)).join("");return{type:"node",selector:e.parentNode?getSelector(e.parentNode):"",snippet:`<${e.nodeName.toLowerCase()}${t}>`}}YN.exports=class FontSize extends tL{static get meta(){return{id:"font-size",
|
1034
|
+
title:nL(aL.title),failureTitle:nL(aL.failureTitle),description:nL(aL.description),requiredArtifacts:["FontSize","URL","MetaElements"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await rL.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:nL(aL.explanationViewport)};const{analyzedFailingNodesData:r,analyzedFailingTextLength:a,failingTextLength:n,totalTextLength:i}=e.FontSize;if(0===i)return{score:1};const o=function getUniqueFailingRules(e){const t=new Map;return e.forEach((e=>{const{nodeId:r,cssRule:a,fontSize:n,textLength:i,parentNode:o}=e,s=function getFontArtifactId(e,t){if(e&&"Regular"===e.type){const t=e.range?e.range.startLine:0,r=e.range?e.range.startColumn:0;return`${e.styleSheetId}@${t}:${r}`}return`node_${t}`}(a,r),c=t.get(s);c?c.textLength+=i:t.set(s,{nodeId:r,parentNode:o,cssRule:a,fontSize:n,textLength:i})})),[...t.values()]}(r),s=(i-n)/i*100,c=e.URL.finalUrl,l=[{key:"source",
|
1035
|
+
itemType:"source-location",text:nL(eL.UIStrings.columnSource)},{key:"selector",itemType:"code",text:nL(aL.columnSelector)},{key:"coverage",itemType:"text",text:nL(aL.columnPercentPageText)},{key:"fontSize",itemType:"text",text:nL(aL.columnFontSize)}],u=o.sort(((e,t)=>t.textLength-e.textLength)).map((({cssRule:e,textLength:t,fontSize:r,parentNode:a})=>{const n=t/i*100,o=function findStyleRuleSource(e,t,r){if(!t||"Attributes"===t.type||"Inline"===t.type)return{source:{type:"url",value:e},selector:nodeToTableNode(r)};if(t.parentRule&&"user-agent"===t.parentRule.origin)return{source:{type:"code",value:"User Agent Stylesheet"},selector:t.parentRule.selectors.map((e=>e.text)).join(", ")};let a="";t.parentRule&&(a=t.parentRule.selectors.map((e=>e.text)).join(", "));if(t.stylesheet&&!t.stylesheet.sourceURL)return{source:{type:"code",value:"dynamic"},selector:a};if(t.stylesheet&&t.range){const{range:e,stylesheet:r}=t,n=r.hasSourceURL?"comment":"network";let i=e.startLine,o=e.startColumn
|
1036
|
+
;r.isInline&&"comment"!==n&&(i+=r.startLine,0===e.startLine&&(o+=r.startColumn));const s=tL.makeSourceLocation(r.sourceURL,i,o);return s.urlProvider=n,{source:s,selector:a}}return{selector:a,source:{type:"code",value:"Unknown"}}}(c,e,a);return{source:o.source,selector:o.selector,coverage:`${n.toFixed(2)}%`,fontSize:`${r}px`}}));if(a<n){const e=(n-a)/i*100;u.push({source:{type:"code",value:nL(aL.additionalIllegibleText)},selector:"",coverage:`${e.toFixed(2)}%`,fontSize:"< 12px"})}s>0&&u.push({source:{type:"code",value:nL(aL.legibleText)},selector:"",coverage:`${s.toFixed(2)}%`,fontSize:"≥ 12px"});const d=nL(aL.displayValue,{decimalProportion:s/100}),m=tL.makeTableDetails(l,u);return{score:Number(s>=60),details:m,displayValue:d}}},YN.exports.UIStrings=aL;var iL={exports:{}}
|
1037
|
+
;const oL=[,[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,,,,,1,1,1,1,,,1,1,1,,1,,1,,1,1],[1,1,1,,1,1,,1,1,1,,1,,,1,1,1,,,1,1,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,,,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1],[,1,,,,,,1,,1,,,,,1,,1,,,,1,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,,,1,,,,,1,1,1,,1,,1,,1,,,,,,1],[1,,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,,1,,1,,,,,1,,1,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,,1,1,1,,1,,1,1,1,,,1,1,1,1,1,1,1,1],[,,1,,,1,,1,,,,1,1,1,,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1,1,1,1,1,,,1,1,1],[1,1,1,1,1,,,1,,,1,,,1,1,1,,,,,1,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1],[,1,,1,1,1,,1,1,,1,,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,,,1,1,1,,,1,1,,,,,,1,1],[1,1,1,,,,,1,,,,1,1,,1,,,,,,1,,,,,1],[,1,,,1,,,1,,,,,,1],[,1,,1,,,,1,,,,1],[1,,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,,1,,,1,1,1,1],[,1,1,1,1,1,,,1,,,1,,1,1,,1,,1,,,,,1,,1],[,1,,,,1,,,1,1,,1,,1,1,1,1,,1,1,,,1,,,1],[,1,1,,,,,,1,,,,1,1,1,1,,1,1,1,1,1,1,,1,1,1],[,1,,1,1,1,,,1,1,1,1,1,1,,1,,,,,1,1,,1,,1],[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,1,1],[,1,1,1,,,,1,1,1,,1,1,,,1,1,,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,,1,,,,,1,1,1,,,1,,1,,,1,1],[,,,,1,,,,,,,,,,,,,,,,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,,1,1,1,,1,1,,,,1,1,1,1,1,,,1,1,1,,,,,1],[1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,1,,,,,,,1],[,1,1,,1,1,,1,,,,,,,,,,,,,1],,[1,1,1,,,,,,,,,,,,,1],[,,,,,,,,1,,,1,,,1,1,,,,,1]],[,[1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,,1,1,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,,1],[,,,1,,,,,,,,,,,,,,,1],[,1,,,1,1,,1,,1,1,,,,1,1,,,1,1,,,,1],[1,,,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,,,,1],,[,1,1,1,1,1,,1,1,1,,1,1,,1,1,,,1,1,1,1,,1,1,,1],[,1,,,1,,,1,,1,,,1,1,1,1,,,1,1,,1,1,1,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,,,1,1,1,1,1,1,1,,,1,,,1,,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,,,,1],[,,,,,,,1,,,,1,,1,1],[,1,1,1,1,1,1,1,,,,1,1,1,1,1,,,1,1,,1,1,1,1,1],[,1,,,1,1,,1,,1,1,1,,,1,1,,,1,,1,1,1,1,,1],[,1,1,1,,1,1,,1,1,,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1],[,,,,,,,,,,,,,,,,1],,[,1,1,1,1,1,,1,1,1,,,1,,1,1,,1,1,1,1,1,,1,,1],[,,1,,,1,,,1,1,,,1,,1,1,,1],[,1,1,,1,,,,1,1,,1,,1,1,1,1,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1],[,1,,,,,,,,,,1,1,,,,,,1,1,,1,,1,,1,1],,[,1,1,,1,,,1,,1,,,,1,1,1,,,,,,1,,,,1],[1,1,,,1,1,,1,,,,,1,,1]],[,[,1],[,,,1,,,,1,,,,1,,,,1,,,1,,,1],[,,,,,,,,,,,,,,,,,,1,1,,,,,,1],,[1,,,,,1],[,1,,,,1,,,,1],[,1,,,,,,,,,,,1,,,1,,,,,,,,,1,1],[,,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,1,,1],[,1],[,1,,1,,1,,1,,1,,1,1,1,,1,1,,1,,,,,,,1],[1,,,,,1,,,1,1,,1,,1,,1,1,,,,,1,,,1],[,1,1,,,1,,1,,1,,1,,1,1,1,1,,,1,,1,,1,1,1],[1,1,1,1,1,,1,,1,,,,1,1,1,1,,1,1,,,1,1,1,1],[1,,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],,[,1,,,,,,1,1,1,,1,,,,1,,,1,1,1,,,1],[1,,,,,1,,1,1,1,,1,1,1,1,1,,1,,1,,1,,,1,1],[1,,1,1,,,,,1,,,,,,1,1,,,1,1,1,1,,,1,,1],[1,,,,,,,,,,,,,,,,,1],[,,,,,1,,,1,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,,,1],[,1,,,,1]],[,[1,1,1,,1,,1,1,1,1,1,1,1,1,1,,1,,1,,1,1,,,1,1,1],[,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],,[,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1],,[1,1,,,,1,1,,,,,,1,,,,1,,1,,1,1,,1],[1],[,,,,,,,,,,,1,,,,,,,,,,,1],[,1,,,,,,,1,1,,,1,,1,,,,1,,,,,,,1],[,,,,,,,,,,,,,,,,1,,,,,1],[,,1,,,,,1,,1],[1,,,,1,,,,,1,,,,1,1,,,,1,1,,,,,1],[,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[1,,,1,1,,,,,,,1,,1,,1,1,1,1,1,1],[,,,,,1,,,,,,,1,,,,,,,1],,[,,1,1,1,1,1,,1,1,1,,,1,1,,,1,1,,1,1,1,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,,,,1],,[1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[,,,1,1,1,1,,,,,,1,,1,,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,,1],[,1,1,1,1,,1,1,1,1,1,1,1,1,,,,1,,1,,,1,1,1,1,1],[,,,,,,,,,,,1,,,,,,,,,1,,,,1],[,1,1,,1,1,,1,,,,1,1,,1,1,,,1,,1,1,,1],[,1,,1,,1,,,1,,,1,1,,1,1,,,1,1,1],[,1,1,1,1,1,,1,1,,,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,,,,,,,,,1,,1,,1,1,,,,1,,,1],[,1,,,1,1,,,,,,,,,1,1,1,,,,,1],[1,,,1,1,,,,1,1,1,1,1,,,1,,,1,,,1,,1,,1],[,1,1,,1,1,,1,1,,,,1,1,1,,,1,1,,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,,,,1,,,,,,,,,1],[,1,,,,,,,,1,,,,,1,,,,1,,,1],[,1,1,1,1,,,1,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1],[,,,,,1,,1,,,,,1,1,1,1,1,,,1,,,,1],[,1,,,,,,,,1,,,,,,,,,,,,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,1,,,,1,,1,1,1,1,1,,1,1,,,,,,1],[,1,1,1,1,1,1,1,,1,1,,,1,1,,,,1,,1,1,,1,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,1,1,,1,,,1,1,1,1,,,1,,,,,,,1],[,1,,,,,,,,1,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1],[,1,1,,,,,,,,,,,,1,1,,,,,,1],[,1,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,,,,,1],[1,1,,,1,,,1,1,1,,,,1],,[,,,,,,,,,,,,,1,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,1,,,,,,,1],[1,1,1,,1,,1,1,1,1,1,1,1,1,,1,,,1,,1,,,1,1],[,,,,,,,,,1],[,1,,,,1,,,,,,1,,,1,,,,,1],[,1,1,,1,1,,,,,,,,,,,,,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,1,1,1,,,,1,1,,,,1,,1],[1,1,1,1,1,1,,,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,,1,1],[,,,,,,,,,,,,,,,1,,,,1],,[1,1,,1,,1,,,,,,1,,1,,1,1,,1,,1,1,,1,1,,1],[,,1,,,,,,1,,,,1,,1,,,,,1],[1,,,,,,,,,1,,,,,,1,,,,1,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,,1,,,,,,1,,,1,,,,,,,,1],[,1,,1,,,,,,,,,,,,1],,[1,1,,,,,,,,,,,,,,,,,,,,,,1,1],[1]],[,[1,,,,,,,,,1,,,,,1,,1,,1],[,1,1,,1,1,,1,1,1,,,1,1,1,,,,1,,,1,,,,1],[,1,,,,,,,1,,,,1,,,,,,1],[1,1,1,1,1,1,,,,1,,,,,,,,,1,1,1,1],[1],[,1,1,,,1,1,,,,,1,,1,,,,,,,,1,,,,1],[1,,1,,,1,,1,,,,,1,1,1,1,,,,1,,,,1],[,,1,,,,,,,1,,,,,,,1,,,,,,,1],[1,,,,,,,,,,,,,,1,,,,1],[,,,1,,1,,,,,1,,,,1,1,,,,1],[1,,,,,1,,,,1,,1,1,,,1,1,,1,1,1,,1,1,1,,1],[,1,1,,,,,1,,1,,1,1,1,,1,1,,,1,,1,1,1],[,1,,,,1,,,,1,,,1,,1,1,,,1,1,,,,,,1],[1,,1,1,,1,,1,1,,1,,1,1,1,1,1,,,1,1,,,,,,1],[1,,,,,,,,,,,,,,,,,,1,,,1,,1],[,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,,1,,1],[,1,,,,1,,,1,1,,1,,,1,1,,,1,,,1,,,1,1],[1,1,,1,1,1,,1,1,1,,1,,1,1,1,,,1,,1,1],[1,,1,1,1,1,,,,1,,1,1,1,,1,,,1,1,1,,1,1,1,1,1],[1,,,,,,,,,,,,,1],[,,1,,,,,,,,,,,,,,,,,,,,1],[1,,,,,,,,,,,1,,1,,1,,,,1],[,,,1,,,,,,,,,1],[,1,,,,,,,,,,,,,,1,,,,,,,,,1],[,,,,,,,,1,1,,,,,,,,,1,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,,,1,1,1],[,,,,,1,,,,1,1,1,,,1,1,,,1,,1,1,,1],[,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,1,,,,,,,,,,,,,1],[,,1,,,1,,1,1,1,,1,1,,1,,,,1,,1,1],,[,,1,,,1,,,,,,1,,,,1],[,,,,,,,,,1,,,,,,,,,,1],[1,1,1,1,1,1,,1,1,1,,,1,1,,1,,1,,,1,1,1,,,1],[,,,,,1,,,,,,,,,,,,,1],[,1,,,,,,,,,,,,1,,1,1,,1,,,1],[,,,,,1,,,,,,,,,,,,,,1],[,1,1,1,1,,,,,1,,,1,,1,,,,1,1,,,,1,1],[,1,,,1,,,1,,1,1,,1,,,,,,,1],[,,1,,1,,,1,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,,,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,,,,,,,,,,1,,1,1],[,,,,,,,,,,,,1],,[,1,1,1,1,,,,1,1,,1,1,1,1,1,1,,1,1,1,1,,1,,1],[1,,,,1,,,,,,,,,,1],[1,,,,,,,,,1],,[,1,,,,1,,,,,,,,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,,,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,,1,1,1,1],[1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,,1,,,,1,1,,,1,1,,1],[,1,1,,1,,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,1],[1,1,1,,,,,1,1,1,,1,1,1,1,,,1,1,,1,1,,,,,1],[,1,,,,,,,1,1,,,1,1,1,,1,,,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,,,1,,,,1,,,1,,,,1,,,,,,,1,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1],[1,1,1,,1,,,1,1,1,1,,1,1,1,1,,,,1,,1,,1,,,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,,1,1,,,,,,,,,1],,[,1,,1,,1,,1,,1,,1,1,1,1,1,,,1,,1,,1,,,,1],[,1,,,1,1,,1,1,1,,,1,1,1,1,1,,1,1,1,,1,,,1],[1,,,1,,,,1,1,1,,,,,1,1,,,,1,,1],[1,1,,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,,1,,1,,,,,,,,1,,1],[,1,,,,1,,1,1,,,,1,1,,1,,,,1,1,1,,1],,[,1,,,,,,1,,,,,,,1],[,,,,,,,,1,,,,1,,1,,,,,,,,,,,,1]],[,[,1,1,,1,1,1,1,,1,1,1,,1,1,,1,1,,1,1,1,1,1,1,,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,,,1,,,,,,,,1,,,,,,1,,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,1,1,1,,1,1,1,1,,,1,1,1,1,,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,,1,,1,,1,,1,1,1,1,1,1,1,,1,1,,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1],[,1,1,,,,,1,1,1,,,1,,1,1,,,,1,,1,,,1,1],[,,,,,,,1,,,,1,1,1,1,1,,1,,,,,,,,1],[1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,,1,,1,1,,,1,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,1,1,,1,,1,1,1,,1,,1,1,,1,1,,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,,,,,,1,,,,,1,,1],[,1,1,1,,1,,1,,1,,,,1,,1,,,1,,,,,,1,1],[,1,,,1,1,,1,,1,,1,1,1,1,1,,1,1,,,1,,,1],[1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,,,1,,1,,1,,,,,,1,,1,,,,1,1]],[,[,1,,1,,,,,,,,,,,,,,,1,,,,1],[,,,,,,,,,1,,1,1,1,,1,,,1,,1,1],[1,1,,,,,,,1,,,,,,,1,,,,,,1],[,1,,,,,,,,,,1,,,,,,,,,1,1],,[,,,,,,,,,,,,,,,1,,,,1,,1],[,,1,1,,1,,1,,,,,,,,1,,,,,,1],[,,,,,,,,,,,,,,,,,,,,1,1],[,1,,,,,,,,,,,,,1],[1,,1,1,,,,1,,,,,,,,,1,,,1,,,1,1],[,1,1,,1,1,,1,1,1,1,1,1,1,1,1,,,1,1,,1,1,,1],[,1,,,1,1,,,,,,1,,1,,1,,,1,,1,1],[1,1,1,1,,1,,1,,1,,1,1,,1,1,1,1,1,,1,1,1,1,1],[,1,1,,,1,,1,,1,1,1,,,1,1,1,,1,1,1,1,,1,1],[,,,,1,,,1,,,,,,,1,,,,1,1],[,1,,,,,,,,,,1,,1,,1,,,,,1,,,,,1],,[1,1,,1,,1,,1,1,,,,,,1,1,,,1,1,1,1,1,1,1,1,1],[1,1,,1,,,,,,1,,,,,,1,1,,,,1,1,,,1],[,1,1,,1,1,,,,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,,,1,,,,1,,,,1,1],[,,,,1],[,,,,,,,,,1,,,1],,[,,1,,1,,,,,,,,,1,,,,,,,,,,,,1],[,,,,,,,,,,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,1,1,1,1,,,1,1,1,1,1,,1,1,1,1,1,,,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,,,,,1],[,1,,1,,,,,,1,,,,,1,1,,,,,1,1],[,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,,1,,,1,,1,1,1],[,1,,,,1,,,,,,,1],[,1,,,1,,,1,,1,,1,1,,1,,,,,1,,1,,,,1,1],[,1,,,1,,,1,1,1,,1,1,1,1,1,,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1],[,,,,,,,,,,,,,,,,,,,,1],[,1,1,1,,,,1,1,,,,,,1,1,1,,1,1,1,1],[1,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1],[,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,1,1,1,1,1,1,1,,1,,1,1,1,1,1,,1,1,,1,1,1,1,1],[,1,,,,1,,,,1,,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,1,,,,,,,,1,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1],[1,1,,1,1,1,,1,1,1,,,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,,,,,,,1,1,,,,,1,1,1,1,1,,1,1,1,1,,1],[,1,1,1,1,1,1,1,,1,1,1,,1,,1,1,1,1,,1,1,,1,1,1,1],,[,1,1,,,,,1,,1,,,,1,1,1,,,1,,,,,1],[,,,,,,,,,,,,,1],[,,,,,1,,,,,,,,1,1,,,,,1,,1,,,1,1],[,,,,,,,,,,,,,,1]],[,[,1],,,,,,,,,,,,,,,,,,,,[1,1,1,1,1,,1,1,1,1,,1,1,1,1,,1,1,1,1,,,1,1,1,1,1],[,1,,1,,1,,,1,1,1,,1,1,1,1,1,,,1,,,,1,,1,1],[,1,,1,,1,,,1,,,,,1,,,,,,1,1],[,1,,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1],[,1,,,,,,,,,,,,,,,1]],[,[,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,,,,,,,,,1,1,,,,1],[,,,,,,1],[,,1],[,1,1,,,1,,1,,1,1,,1,1,1,,,,1,1,1,,,,,1],,[,1,,,,1,,,,,,1,,,1,,,,1,1,,1],[,,,,,,,1,,,,,,,,,1],[,1,,,,1,1,,,,,,1,1,1,,,,1,,1,1],[,,,,,,,1,,1,,,,,,,,,,1],[,1,1,,,,,,1,1,,,,1,,,,,,,1,,,1],,[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,,1,,,1,,,,,1,,1,,1,,1,,,,,1],[1,1,1,1,1,1,1,1,,,,,1,1,,1,1,,1,,,1,,1],[,,,,,,,,,,,,,,1,,,,,,1],,[,,,,,,,,,1,,,,,,1,,,,,1],[,,1,,,,,,,1,,,1,1],[,,,1,,,,,1,,,,,1,,,,,,1,,,,1],[1,,1,1,,1,1,1,1,1,,1,,,,1,1,1,,,1,1,,,,1,1],,[1,1,,,,,,,,,,1,,1,,1,,,1],[,,,,1,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,1,,,,,1,,1],[,,,,,,,,1]],[,[1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,,1,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,,1,,,1,,,,,,,,1,,,,,,1,,,,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,1,,,,1,1,1,1,1,1,,1,1,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,,1,1,1,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1],[1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,,1,1,1,1,,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,,,,,,,1,,1,1,,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1],[1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,,1,,1,,1,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1],[1,1,1,1,,1,,,,,,1,,1,,,,,1,1,,,,,1],[1,,1,1,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,1,1,,1,,1,,,,1,1,1,1,1,,,1,1,,1,,1],[,1,1,1,1,,,,,1,,1,1,1,1,1,,,1,1,,,,1,1,1],[,1,1,1,1,1,,1,,,,,1,,1,,1,,,1,,,1,1,,1]],[,[1,1,1,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1,,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,,,,,1,,,,,1,1,,,1,,1],[1,1,1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,,1,1,1,1,,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1],[1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,,,,1,,1,1,,1,1,1,1,1,,,1,,1,,1],[1,1,1,,1,1,1,1,,,,1,1,1,1,,1,1,1,1,1,1,1,1,1,,1],[1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,,1,1,1,1,1,1,1,1,1,,1,1,,1,1,1,1,1,,1,1,1,1,1,1],[,1,,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1],[,,1,,,,,,,,,,1,1,1,1,1,1,1,,1,1,,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,1,1,1,1,1],[,1,,,1,1,,,,,,1,1,1,1,1,,,,1,1,1,,1,1,1],[1,1,1,1,1,1,1,1,1,,,,1,1,1,1,1,1,1,,1,1,,1,1,1],[,1,1,1,,1,,1,1,1,1,,,1,1,1,,1,1,1,1,1,,,1,1],[1,1,,,,1,,,1,1,1,,1,,1,,1,,1,1,1,1,1,,1,,1],[,1,,,,,,,1,,1,,1,1,1,1,,,,,,,,,1]],[,[,,,,,,,,,,,,,1,1,,,,1],[,1,,,,,,,,1,,,1,,,,,,1,,,1,,,,1],,[,1,,,,1,,1,,1,1,,1,1,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1],[,,,,,,,,,1],[1,1,1,,,1,,,,,,,,,1,1,,,,,,,,,,1],[,1,,,,,,,,,,,,,1],[,,,,,,,,,,,,,,,,,,,1,,,1],[,,,,,,,,,1],[1,1,,,,,,1,1,1,,1,1,,,,1,1,,1,,1,1,1,,1],[,1,1,1,,1,1,,,1,,1,1,1,1,,,,,,,1,,1],[,1,1,1,1,,,1,,1,,,,1,1,1,1,,1,1,,1],[,1,,,1,1,,1,,,,1,,1,1,,1,,1,,,1,,,1,,1],[,,,,,,,,,,,1],[,,,,,,,,,1,,,,,,,,,,,,,1],,[1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,,1,1,1,1,1,1,1],[,1,,,,,,,1,1,,1,,,,,1,,,1,,1],[,1,,,,1,,,1,,,,,,,,1,,1,,,1],[,,,,,,,,,,,,,1,1,,,,1,,,1],[,,,,,1,,,1,,,,1],[,1],,[,1],[1,,,,,,,,,,,,,,1,,,,,1]],[,[,1,,,,1,1,1,1,1,1,,1,1,1,1,1,,1,1,,1,1,,,1],[,,1,,,,,,,,,1],,,[1,,,1,1,,,,,,,,1,1,,1,1,,1],,[,,,,,,,,,,,,,,,,,,1,,1],,[1,,,1,1,,1,1,,,,,1,,1,,,,,1,1,,1],,[,1,,,,,,,,1,1,1,1,1,,1,1,,,,1,1],[,,,,,,,,,,,,,,,,1,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,,,1,1,1,1,,1,1,1,1,1,1],[,,,,,,,,,,,1,,1,,,1],[1,,,,,,,,,,,,,,,,,,1,,1],,,[,1,,,,,,,,,,,,,,1,,,,1,1],[,,,,,,,,,1,,,1,,,,,,,,,,1],[,,,,,,,,,,,,,,,1],[,,,,,,,,,,,,,1,1,,,,,,1],,[,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,,1,1,,1,1,1,1,1,1,,,1,1,1,1,1,,1,1],[,1,,,,,,,,1],[,,,,1,,,1,,,1,1,,,,,,,,,,1,,,,1],[,1,,1,1,,,1,1,1,,,,1,1,1,1,,1,1,1,1,,1],[,,,,,,,1],[,1,1,,,,,1,,1,,,,,,1,,,,,,1,,1,,1],[,1,,,,,,1,,,,1,,,,,,,,,,1],[,,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1,1,1,1,,1],[,1,,,,,,,,1],[,1,1,,1,,,,,,,,1,,,,,,1,,,1,,1,,1],[,1,,1,,1,,1,1,1,,1,1,1,,1,,,1,1,,1,1,1,1,1],[,1,1,1,1,1,,,1,1,,,,1,1,1,,,,1,1,,,1,1],[,,1,1,1,1,,1,,1,,1,,1,1,1,1,,,,,1,,1,,1],[1,1,1,1,1,1,1,1,,1,,1,,1,1,1,,,1,1,,,,1,,1],[,,,1],,[,1,1,,1,,,1,1,1,,1,1,1,1,1,1,,1,1,,1,1,1,1,1,1],[,1,,,,,,1,,1,,1,,,,,,,1,1,,1,1],[,,,,,,1,,1,1,,1,,1,,,,,,,,,,1],[,1,1,,1,,,,1,,,,1,1,1,,,,1,,1,1,1,,1,1],,[,1,1,,,,,,,,,,,,,1,,,1,,,,,1],[,1,,,,,,,,,,,,,,,,,,,,,,1],[,1,1,,,,,,,1,,,,1,,,,,1,,,,,,,1]],[,[,1,1,1,1,1,,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1],[,1,1,1,1,1,,1,,1,1,,,1,1,1,1,,1,,,,,1,1,1],[,,1,1,,1,,1,1,,,,1,1,1,1,,,1,,1,1,1,1,,1],[,1,,1,,,,,,,,1,,1,,1,,,,,,,,,,1],[,,1,,1,,,1,,,,,1,1,,,1,,1,1,1,1],[,1],[,1,1,,1,,1,1,,1,,,1,1,1,,,,1,,,1,,1],[1,1,,1,1,1,,,,,,,,,,,,,1,,1,1,1],[,1,1,,,,,,,1,,,1,,1,,1,,1,1,,,1,,,1],[,,1,,,,,,,,,,,,,,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,1,1,1,,1,,1,,,,,1,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,1,1,1,,,,1,1],[,,,1,1,,,1,,1,,1,,1,1,1,1,,1,,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,1,,1,1,,1,,1,,,,1,1,,,1,1,,1,1,,1],[,1,1,1,1,1,,,1,1,1,,1,1,1,1,1,1,1,1,,1,1,,,1],[,1,1,1,1,1,,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,,1,1],[,1,1,,1,,,1,,,1,,1,1,1,1,1,,1,,1,1],[,,,,,1,,,,1,,,,,1,1,,,,1],[,1,,1,1,1,,1,,,1,1,1,,,1,,,1,,1,,,1],[,,1,,,,,,,,,1,,1,,,,,1,,1],[,1,1,,,,,,,,1,1,1,,,,,,,,1,,,,,1],[,,,,,,,,1,,,,,1,,,1]],[,[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,1,,1,1,,,1,1,1,1,1,1,1,1,,,,,,,,,1,1],[,,,,,,,,1,,,,1,,1,,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,1,,1,,1,,,,1,1,,1,,1,,,,1,1,1,1,1,,,1],,[,1,,,,,,,,1,,,1,1,,,1,,1,1,,1,,1],[,1,,,1,,,,,,,,1,,,,,,,1],[1,1,,,,,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,,1,1,1],,[,1,,,,,,1,,1,,1,1,1,1,1,,,1,,1,1,,,,1],[,1,1,,,1,,1,,1,,,1,1,1,1,,,1,,,1,,,,1],[,1,1,1,1,1,,1,1,1,,1,1,1,1,1,1,1,1,1,1,,,,1,,1],[,1,,,1,1,,1,1,,,1,1,,1,1,,1,,1,,1],[1,,1,,,,,1,,1,,1,1,1,1,,,,,1,1,,,,1,1],[,1,1,,,,,1,1,,,1,,1,1,1,1,,,,,,,,,,1],,[,1,1,,,1,,,,1,,1,1,1,1,1,,,,1,,,,1,,1],[,,,1,1,,,1,,,,,1,,1,1,1,,1,1,,,,,,1],[,1,,,,,,,,,,,1,,,,1,,,,,,,1,,1],[,1,1,1,1,1,1,1,,1,1,1,1,1,1,,1,1,1,,1,1,,1,1,1,1],[,1,,,,,,,,,,,,,,,,,,,1],[,1,,,,,,1,,,,,1,,1,,,1,1,,1,1,,1],[,1,,,,,,1,,,,,1,1,,,,,,,,1,,,,1],[,,,,,,,,,,,,,,,,,,1,,,1,,,,,1],[,,,,,,,1,,,,1]],[,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,1,,1,,,,,,,1,,,,,,,,1,,,1],[,1,,,,,,,1],[,,,,,,,,,,1],[,1,,,,,,1,1,,,,,,1],,[,1,1,,,,,,1,,,,,1,1,,,,1],[1,,1,,1,,,,,1,,,,,1,,,,,,,,,1,1],[,1,1,,,,,,,,,1,1,1,1,,,,1,,,,,1,,,1],,[,1,1,,1,,,1,1,,,1,,,1,1,1,,1,,1,1,1,,,,1],[,,,,,1,,,,,1,,,1,1,,,1,,1,,,,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,1,,,1,1,,1,,,,1,,,,,,,,1],[,,,1,,,,,1,,,,,1,,1,,1,1,1],[,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[,,,,,1],[,1,,,,,,1,,,,,,,1,1,1,,,1],[,1,,,,,,,,,,1,1,1,,,,,1,,,1],[,,,,,1,,1,,,,,1,1,1,,1,1,,1,1,1,,,1,1],[1,1,,,,,,,1,,,,,1,1,,,,,,,,,,,1],,[,1],[,,,,,,,,,,,,,,,,,,,,,,,,1],[,,1,,,,,1,,,1,,,,1,,1],[,1,,,,,,,,,1]]]
|
1038
|
+
;var sL={isValidLang:function isValidLang$1(e){let t=oL;for(;e.length<3;)e+="`";for(let r=0;r<=e.length-1;r++){if(t=t[e.charCodeAt(r)-96],!t)return!1}return!0}};const cL=kc,lL=oi,{isValidLang:uL}=sL,dL={title:"Document has a valid `hreflang`",failureTitle:"Document doesn't have a valid `hreflang`",description:"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://web.dev/hreflang/).",unexpectedLanguage:"Unexpected language code",notFullyQualified:"Relative href value"},mL=lL.createMessageInstanceIdFn("lighthouse-core/audits/seo/hreflang.js",dL);function isExpectedLanguageCode(e){if("x-default"===e.toLowerCase())return!0;const[t]=e.split("-");return uL(t.toLowerCase())}iL.exports=class Hreflang extends cL{static get meta(){return{id:"hreflang",title:mL(dL.title),failureTitle:mL(dL.failureTitle),description:mL(dL.description),supportedModes:["navigation"],requiredArtifacts:["LinkElements","URL"]}}
|
1039
|
+
static audit({LinkElements:e}){const t=[],r=e.filter((e=>{const t="alternate"===e.rel,r=e.hreflang,a="body"===e.source;return t&&r&&!a}));for(const e of r){const r=[];let n;isExpectedLanguageCode(e.hreflang)||r.push(mL(dL.unexpectedLanguage)),(a=e.hrefRaw.toLowerCase()).startsWith("http:")||a.startsWith("https:")||r.push(mL(dL.notFullyQualified)),"head"===e.source?n=e.node?{...cL.makeNodeItem(e.node),snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:{type:"node",snippet:`<link rel="alternate" hreflang="${e.hreflang}" href="${e.hrefRaw}" />`}:"headers"===e.source&&(n=`Link: <${e.hrefRaw}>; rel="alternate"; hreflang="${e.hreflang}"`),n&&r.length&&t.push({source:n,subItems:{type:"subitems",items:r.map((e=>({reason:e})))}})}var a;const n=cL.makeTableDetails([{key:"source",itemType:"code",subItemsHeading:{key:"reason",itemType:"text"},text:""}],t);return{score:Number(0===t.length),details:n}}},iL.exports.UIStrings=dL;var pL={exports:{}}
|
1040
|
+
;const hL=kc,gL=Lo,fL=Fo,yL={title:"Page has successful HTTP status code",failureTitle:"Page has unsuccessful HTTP status code",description:"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more](https://web.dev/http-status-code/)."},vL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/http-status-code.js",yL);pL.exports=class HTTPStatusCode extends hL{static get meta(){return{id:"http-status-code",title:vL(yL.title),failureTitle:vL(yL.failureTitle),description:vL(yL.description),requiredArtifacts:["devtoolsLogs","URL","GatherContext"],supportedModes:["navigation"]}}static async audit(e,t){const r=e.devtoolsLogs[hL.DEFAULT_PASS],a=e.URL,n=await gL.request(r,t),i=fL.findMainDocument(n,a.finalUrl).statusCode;return i>=400&&i<=599?{score:0,displayValue:`${i}`}:{score:1}}},pL.exports.UIStrings=yL;var bL={exports:{}};function trimLine(e){return e?Array.isArray(e)?e.map(trimLine):String(e).trim():null}function removeComments(e){var t=e.indexOf("#")
|
1044
1041
|
;return t>-1?e.substr(0,t):e}function splitLine(e){var t=String(e).indexOf(":");return!e||t<0?null:[e.slice(0,t),e.slice(t+1)]}function formatUserAgent(e){var t=e.toLowerCase(),r=t.indexOf("/");return r>-1&&(t=t.substr(0,r)),t.trim()}function normaliseEncoding(e){try{return urlEncodeToUpper(encodeURI(e).replace(/%25/g,"%"))}catch(t){return e}}function urlEncodeToUpper(e){return e.replace(/%[0-9a-fA-F]{2}/g,(function(e){return e.toUpperCase()}))}function matches(e,t){var r=new Array(t.length+1),a=1;r[0]=0;for(var n=0;n<e.length;n++){if("$"===e[n]&&n+1===e.length)return r[a-1]===t.length;if("*"==e[n]){a=t.length-r[0]+1;for(var i=1;i<a;i++)r[i]=r[i-1]+1}else{var o=0;for(i=0;i<a;i++)r[i]<t.length&&t[r[i]]===e[n]&&(r[o++]=r[i]+1);if(0==o)return!1;a=o}}return!0}function parseUrl(e){try{return new URL(e,"http://robots-relative.samclarke.com/")}catch(e){return null}}function Robots$1(e,t){this._url=parseUrl(e)||{},this._url.port=this._url.port||80,this._rules=Object.create(null),
|
1045
1042
|
this._sitemaps=[],this._preferredHost=null,function parseRobots(e,t){for(var r=e.split(/\r\n|\r|\n/).map(removeComments).map(splitLine).map(trimLine),a=[],n=!0,i=0;i<r.length;i++){var o=r[i];if(o&&o[0]){switch(o[0].toLowerCase()){case"user-agent":n&&(a.length=0),o[1]&&a.push(formatUserAgent(o[1]));break;case"disallow":t.addRule(a,o[1],!1,i+1);break;case"allow":t.addRule(a,o[1],!0,i+1);break;case"crawl-delay":t.setCrawlDelay(a,o[1]);break;case"sitemap":o[1]&&t.addSitemap(o[1]);break;case"host":o[1]&&t.setPreferredHost(o[1].toLowerCase())}n="user-agent"!==o[0].toLowerCase()}}}(t||"",this)}Robots$1.prototype.addRule=function(e,t,r,a){var n=this._rules;e.forEach((function(e){n[e]=n[e]||[],t&&n[e].push({pattern:normaliseEncoding(t),allow:r,lineNumber:a})}))},Robots$1.prototype.setCrawlDelay=function(e,t){var r=this._rules,a=Number(t);e.forEach((function(e){r[e]=r[e]||[],isNaN(a)||(r[e].crawlDelay=a)}))},Robots$1.prototype.addSitemap=function(e){this._sitemaps.push(e)},
|
1046
1043
|
Robots$1.prototype.setPreferredHost=function(e){this._preferredHost=e},Robots$1.prototype._getRule=function(e,t){var r=parseUrl(e)||{},a=formatUserAgent(t||"*");if(r.port=r.port||80,r.protocol===this._url.protocol&&r.hostname===this._url.hostname&&r.port===this._url.port){var n=this._rules[a]||this._rules["*"]||[];return function findRule(e,t){for(var r=null,a=0;a<t.length;a++){var n=t[a];matches(n.pattern,e)&&(!r||n.pattern.length>r.pattern.length||n.pattern.length==r.pattern.length&&n.allow&&!r.allow)&&(r=n)}return r}(urlEncodeToUpper(r.pathname+r.search),n)}},Robots$1.prototype.isAllowed=function(e,t){var r=this._getRule(e,t);if(void 0!==r)return!r||r.allow},Robots$1.prototype.getMatchingLineNumber=function(e,t){var r=this._getRule(e,t);return r?r.lineNumber:-1},Robots$1.prototype.isDisallowed=function(e,t){return!this.isAllowed(e,t)},Robots$1.prototype.getCrawlDelay=function(e){var t=formatUserAgent(e||"*");return(this._rules[t]||this._rules["*"]||{}).crawlDelay},
|
1047
|
-
Robots$1.prototype.getPreferredHost=function(){return this._preferredHost},Robots$1.prototype.getSitemaps=function(){return this._sitemaps.slice(0)};var
|
1048
|
-
failureTitle:
|
1049
|
-
line:e-1,column:0}})}}const n=
|
1050
|
-
description:"Descriptive link text helps search engines understand your content. [Learn more](https://web.dev/link-text/).",displayValue:"{itemCount, plural,\n =1 {1 link found}\n other {# links found}\n }"},
|
1051
|
-
;return t.length&&(a=
|
1052
|
-
description:"Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://web.dev/meta-description/).",explanation:"Description text is empty."}
|
1053
|
-
title:"Document avoids plugins",failureTitle:"Document uses plugins",description:"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://web.dev/plugins/)."},
|
1054
|
-
;if("EMBED"===e.tagName&&t&&isPluginURL(t))return!0;if("OBJECT"===e.tagName&&e.data&&isPluginURL(e.data))return!0;return e.params.filter((e=>
|
1055
|
-
displayValueValidationError:"{itemCount, plural,\n =1 {1 error found}\n other {# errors found}\n }",explanation:"Lighthouse was unable to download a robots.txt file"},
|
1056
|
-
;if(-1!==e&&e!==t.length-1)throw new Error('"$" should only be used at the end of the pattern')}}(a,n),{directive:a,value:n}}
|
1057
|
-
}(r),n=
|
1058
|
-
return e=
|
1059
|
-
},
|
1060
|
-
const r=[];return e.forEach((e=>{const a=
|
1061
|
-
}(function mergeSymmetricFailures(e){const t=[];return e.forEach(((r,a)=>{const n=e.find((e=>e.tapTarget===r.overlappingTarget&&e.overlappingTarget===r.tapTarget));if(!n)return void t.push(r);const{overlapScoreRatio:i}=r,{overlapScoreRatio:o}=n;(i>o||i===o&&a<e.indexOf(n))&&t.push(r)})),t}(a)),i=[{key:"tapTarget",itemType:"node",text:
|
1062
|
-
description:"Keep the server response time for the main document short because all other requests depend on it. [Learn more](https://web.dev/time-to-first-byte/).",displayValue:"Root document took {timeInMs, number, milliseconds} ms"},
|
1063
|
-
;const n=ServerResponseTime.calculateResponseTime(a),i=n<600,o=
|
1064
|
-
explanationNoManifest:"This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched.",explanationBadManifest:"This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON",explanationBadStartUrl:"This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"},
|
1065
|
-
;if(e){const t=new
|
1066
|
-
;var
|
1067
|
-
return{id:"splash-screen",title:
|
1068
|
-
},
|
1069
|
-
{failures:r,manifestValues:n,themeColor:a?.content||null}}}
|
1070
|
-
failureTitle:
|
1071
|
-
},i=Math.max(4096,r.transferSize/20),o=Math.min(5,a.length);let s=0;for(;s<o;){const e=a[s];if(0===e.blockingTime&&e.transferSize<i)break;s++,n.transferSize+=e.transferSize,n.blockingTime+=e.blockingTime}if(!n.blockingTime&&!n.transferSize)return[];a=a.slice(0,s);const c={url:
|
1072
|
-
items:ThirdPartySummary$1.makeSubItems(e,l,t)}}))).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize)),m=[{key:"entity",itemType:"link",text:
|
1073
|
-
description:"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn more](https://web.dev/third-party-facades/).",displayValue:"{itemCount, plural,\n =1 {# facade alternative available}\n other {# facade alternatives available}\n }",columnProduct:"Product",categoryVideo:"{productName} (Video)",categoryCustomerSuccess:"{productName} (Customer Success)",categoryMarketing:"{productName} (Marketing)",categorySocial:"{productName} (Social)"},
|
1074
|
-
e.sort(((e,t)=>t.transferSize-e.transferSize));let t=e.findIndex((e=>e.transferSize<1e3))||1;if((-1===t||t>5)&&(t=5),t>=e.length-1)return;const r=e.splice(t).reduce(((e,t)=>(e.transferSize+=t.transferSize,e.blockingTime+=t.blockingTime,e)));r.transferSize<1e3||(r.url=
|
1075
|
-
;for(const{product:e,entity:t}of d){const r=
|
1076
|
-
title:"Timing budget",description:"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",columnTimingMetric:"Metric",columnMeasurement:"Measurement"},
|
1077
|
-
"speed-index":
|
1078
|
-
value:Number(a.measurement),granularity:.01}),"number"==typeof a.overBudget&&(a.overBudget={type:"numeric",value:Number(a.overBudget),granularity:.01})),r}static async audit(e,t){const r=e.GatherContext,a=e.devtoolsLogs[
|
1079
|
-
description:"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn more](https://web.dev/optimize-cls/#images-without-dimensions)"},
|
1080
|
-
;const t=e.attributeWidth,r=e.attributeHeight,a=e.cssEffectiveRules.width,n=e.cssEffectiveRules.height,i=e.cssEffectiveRules.aspectRatio,o=UnsizedImages.doesHtmlAttrProvideExplicitSize(t),s=UnsizedImages.isCssPropExplicitlySet(a),c=UnsizedImages.doesHtmlAttrProvideExplicitSize(r),l=UnsizedImages.isCssPropExplicitlySet(n),u=UnsizedImages.isCssPropExplicitlySet(i),d=o||s,m=c||l;return d&&m||d&&u||m&&u}static isNonNetworkSvg(e){const t="image/svg+xml"===
|
1081
|
-
text:""},{key:"url",itemType:"url",text:
|
1082
|
-
;const
|
1083
|
-
timingType:e.isMark?"Mark":"Measure"}))).sort(((e,t)=>e.timingType===t.timingType?e.startTime-t.startTime:"Measure"===e.timingType?-1:1)),a=[{key:"name",itemType:"text",text:
|
1084
|
-
unusedWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Only use `preconnect` for important origins that the page will certainly request.',crossoriginWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.',tooManyPreconnectLinksWarning:"More than 2 `<link rel=preconnect>` connections were found. These should be used sparingly and only to the most important origins."},
|
1085
|
-
static hasAlreadyConnectedToOrigin(e){return!!e.timing&&e.timing.dnsEnd-e.timing.dnsStart==0&&e.timing.connectEnd-e.timing.connectStart==0}static socketStartTimeIsBelowThreshold(e,t){return Math.max(0,e.startTime-t.endTime)<15}static async audit(e,t){const r=e.traces[UsesRelPreconnectAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreconnectAudit.DEFAULT_PASS],n=t.settings;let i=0;const o=[],s=await
|
1086
|
-
if(!UsesRelPreconnectAudit.hasValidTiming(e)||e.initiator.url===l.url||!e.parsedURL||!e.parsedURL.securityOrigin||l.parsedURL.securityOrigin===e.parsedURL.securityOrigin||!y.has(e.url)||UsesRelPreconnectAudit.hasAlreadyConnectedToOrigin(e)||!UsesRelPreconnectAudit.socketStartTimeIsBelowThreshold(e,l))return;const t=e.parsedURL.securityOrigin,r=v.get(t)||[];r.push(e),v.set(t,r)}));const b=e.LinkElements.filter((e=>"preconnect"===e.rel)),w=new Set(b.map((e=>
|
1087
|
-
;for(const e of w)e&&(c.some((t=>e===t.parsedURL.securityOrigin))||o.push(
|
1088
|
-
crossoriginWarning:'A preload `<link>` was found for "{preloadURL}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.'},
|
1089
|
-
const t=a.get(e.frameId);if(!t)return!1;if(!t.has(e.url))return!1;return!(e.fromDiskCache||e.fromMemoryCache||e.fromPrefetchCache)&&!e.isLinkPreload}));return new Set(n.map((e=>e.url)))}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!!
|
1090
|
-
const t=c.get(e.record),r=s.nodeTimings.get(e),n=a.nodeTimings.get(t);if(!n||!r)throw new Error("Missing preload node");const i=Math.round(n.endTime-r.endTime);i<100||l.push({url:e.record.url,wastedMs:i})}return l.length?{wastedMs:Math.max(...l.map((e=>e.wastedMs))),results:l}:{wastedMs:0,results:l}}static async audit_(e,t){const r=e.traces[UsesRelPreloadAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreloadAudit.DEFAULT_PASS],n=e.URL,i={devtoolsLog:a,settings:t.settings},[o,s,c]=await Promise.all([
|
1091
|
-
label:
|
1044
|
+
Robots$1.prototype.getPreferredHost=function(){return this._preferredHost},Robots$1.prototype.getSitemaps=function(){return this._sitemaps.slice(0)};var wL=Robots$1;const SL=kc,robotsParser=function(e,t){return new wL(e,t)},TL=ji,EL=GT,xL=new Set(["noindex","none"]),_L="unavailable_after",AL={title:"Page isn’t blocked from indexing",failureTitle:"Page is blocked from indexing",description:"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://web.dev/is-crawable/)."},RL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/is-crawlable.js",AL);function hasBlockingDirective(e){return e.split(",").map((e=>e.toLowerCase().trim())).some((e=>xL.has(e)||function isUnavailable(e){const t=e.split(":");if(t.length<=1||t[0]!==_L)return!1;const r=Date.parse(t.slice(1).join(":"));return!isNaN(r)&&r<Date.now()}(e)))}bL.exports=class IsCrawlable extends SL{static get meta(){return{id:"is-crawlable",title:RL(AL.title),
|
1045
|
+
failureTitle:RL(AL.failureTitle),description:RL(AL.description),supportedModes:["navigation"],requiredArtifacts:["MetaElements","RobotsTxt","URL","devtoolsLogs"]}}static audit(e,t){const r=e.devtoolsLogs[SL.DEFAULT_PASS],a=e.MetaElements.find((e=>"robots"===e.name));return EL.request({devtoolsLog:r,URL:e.URL},t).then((t=>{const r=[];if(a){const e=a.content||"";hasBlockingDirective(e)&&r.push({source:{...SL.makeNodeItem(a.node),snippet:`<meta name="robots" content="${e}" />`}})}if(t.responseHeaders&&t.responseHeaders.filter((e=>"x-robots-tag"===e.name.toLowerCase()&&!function hasUserAgent(e){const t=e.match(/^([^,:]+):/);return!!t&&t[1].toLowerCase()!==_L}(e.value)&&hasBlockingDirective(e.value))).forEach((e=>r.push({source:`${e.name}: ${e.value}`}))),e.RobotsTxt.content){const a=new TL("/robots.txt",t.url),n=robotsParser(a.href,e.RobotsTxt.content);if(!n.isAllowed(t.url)){const e=n.getMatchingLineNumber(t.url)||1;r.push({source:{type:"source-location",url:a.href,urlProvider:"network",
|
1046
|
+
line:e-1,column:0}})}}const n=SL.makeTableDetails([{key:"source",itemType:"code",text:"Blocking Directive Source"}],r);return{score:Number(0===r.length),details:n}}))}},bL.exports.UIStrings=AL;var kL={exports:{}};const DL=kc,CL=ji,IL=new Set(["click here","click this","go","here","information","learn more","more","more info","more information","right here","read more","see more","start","this","ここをクリック","こちらをクリック","リンク","続きを読む","続く","全文表示","click aquí","click aqui","clicka aquí","clicka aqui","pincha aquí","pincha aqui","aquí","aqui","más","mas","más información","más informacion","mas información","mas informacion","este","enlace","este enlace","empezar","clique aqui","ir","mais informação","mais informações","mais","veja mais","여기","여기를 클릭","클릭","링크","자세히","자세히 보기","계속","이동","전체 보기","här","klicka här","läs mer","mer","mer info","mer information"]),NL={title:"Links have descriptive text",failureTitle:"Links do not have descriptive text",
|
1047
|
+
description:"Descriptive link text helps search engines understand your content. [Learn more](https://web.dev/link-text/).",displayValue:"{itemCount, plural,\n =1 {1 link found}\n other {# links found}\n }"},LL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/link-text.js",NL);kL.exports=class LinkText extends DL{static get meta(){return{id:"link-text",title:LL(NL.title),failureTitle:LL(NL.failureTitle),description:LL(NL.description),requiredArtifacts:["URL","AnchorElements"]}}static audit(e){const t=e.AnchorElements.filter((e=>e.href&&!e.rel.includes("nofollow"))).filter((t=>{const r=t.href.toLowerCase();return!(r.startsWith("javascript:")||r.startsWith("mailto:")||CL.equalWithExcludedFragments(t.href,e.URL.finalUrl))&&IL.has(t.text.trim().toLowerCase())})).map((e=>({href:e.href,text:e.text.trim()}))),r=DL.makeTableDetails([{key:"href",itemType:"url",text:"Link destination"},{key:"text",itemType:"text",text:"Link Text"}],t,{});let a
|
1048
|
+
;return t.length&&(a=LL(NL.displayValue,{itemCount:t.length})),{score:Number(0===t.length),details:r,displayValue:a}}},kL.exports.UIStrings=NL;var ML={exports:{}};const PL=iy,OL={description:"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more](https://web.dev/structured-data/).",title:"Structured data is valid"},FL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/manual/structured-data.js",OL);ML.exports=class StructuredData extends PL{static get meta(){return Object.assign({id:"structured-data",description:FL(OL.description),title:FL(OL.title)},super.partialMeta)}},ML.exports.UIStrings=OL;var UL={exports:{}};const jL=kc,BL={title:"Document has a meta description",failureTitle:"Document does not have a meta description",
|
1049
|
+
description:"Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://web.dev/meta-description/).",explanation:"Description text is empty."},$L=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/meta-description.js",BL);UL.exports=class Description extends jL{static get meta(){return{id:"meta-description",title:$L(BL.title),failureTitle:$L(BL.failureTitle),description:$L(BL.description),requiredArtifacts:["MetaElements"]}}static audit(e){const t=e.MetaElements.find((e=>"description"===e.name));if(!t)return{score:0};return 0===(t.content||"").trim().length?{score:0,explanation:$L(BL.explanation)}:{score:1}}},UL.exports.UIStrings=BL;var qL={exports:{}};const zL=kc,VL=ji,WL="application/x-java-applet",HL="application/x-java-bean",GL=new Set(["application/x-shockwave-flash",WL,HL,"application/x-silverlight","application/x-silverlight-2"]),YL=new Set(["swf","flv","class","xap"]),KL=new Set(["code","movie","source","src"]),JL={
|
1050
|
+
title:"Document avoids plugins",failureTitle:"Document uses plugins",description:"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://web.dev/plugins/)."},XL=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/plugins.js",JL);function isPluginURL(e){try{const t=new VL(e,"http://example.com").pathname.split(".");if(t.length<2)return!1;const r=t[t.length-1];return YL.has(r.trim().toLowerCase())}catch(e){return!1}}qL.exports=class Plugins extends zL{static get meta(){return{id:"plugins",title:XL(JL.title),failureTitle:XL(JL.failureTitle),description:XL(JL.description),requiredArtifacts:["EmbeddedContent"]}}static audit(e){const t=e.EmbeddedContent.filter((e=>{if("APPLET"===e.tagName)return!0;if(("EMBED"===e.tagName||"OBJECT"===e.tagName)&&e.type&&function isPluginType(e){return e=e.trim().toLowerCase(),GL.has(e)||e.startsWith(WL)||e.startsWith(HL)}(e.type))return!0;const t=e.src||e.code
|
1051
|
+
;if("EMBED"===e.tagName&&t&&isPluginURL(t))return!0;if("OBJECT"===e.tagName&&e.data&&isPluginURL(e.data))return!0;return e.params.filter((e=>KL.has(e.name.trim().toLowerCase())&&isPluginURL(e.value))).length>0})).map((e=>({source:zL.makeNodeItem(e.node)}))),r=zL.makeTableDetails([{key:"source",itemType:"code",text:"Element source"}],t);return{score:Number(0===t.length),details:r}}},qL.exports.UIStrings=JL;var ZL={exports:{}};const QL=kc,eM=ji,tM="sitemap",rM="user-agent",aM="allow",nM="disallow",iM=new Set([aM,nM]),oM=new Set([rM,nM,aM,tM,"crawl-delay","clean-param","host","request-rate","visit-time","noindex"]),sM=new Set(["https:","http:","ftp:"]),cM={title:"robots.txt is valid",failureTitle:"robots.txt is not valid",description:"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more](https://web.dev/robots-txt/).",displayValueHttpBadCode:"Request for robots.txt returned HTTP status: {statusCode}",
|
1052
|
+
displayValueValidationError:"{itemCount, plural,\n =1 {1 error found}\n other {# errors found}\n }",explanation:"Lighthouse was unable to download a robots.txt file"},lM=oi.createMessageInstanceIdFn("lighthouse-core/audits/seo/robots-txt.js",cM);function parseLine(e){const t=e.indexOf("#");if(-1!==t&&(e=e.substr(0,t)),0===(e=e.trim()).length)return null;const r=e.indexOf(":");if(-1===r)throw new Error("Syntax not understood");const a=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim();return function verifyDirective(e,t){if(!oM.has(e))throw new Error("Unknown directive");if(e===tM){let e;try{e=new eM(t)}catch(e){throw new Error("Invalid sitemap URL")}if(!sM.has(e.protocol))throw new Error("Invalid sitemap URL protocol")}if(e===rM&&!t)throw new Error("No user-agent specified");if(e===aM||e===nM){if(""!==t&&"/"!==t[0]&&"*"!==t[0])throw new Error('Pattern should either be empty, start with "/" or "*"');const e=t.indexOf("$")
|
1053
|
+
;if(-1!==e&&e!==t.length-1)throw new Error('"$" should only be used at the end of the pattern')}}(a,n),{directive:a,value:n}}ZL.exports=class RobotsTxt extends QL{static get meta(){return{id:"robots-txt",title:lM(cM.title),failureTitle:lM(cM.failureTitle),description:lM(cM.description),requiredArtifacts:["RobotsTxt"]}}static audit(e){const{status:t,content:r}=e.RobotsTxt;if(!t)return{score:0,explanation:lM(cM.explanation)};if(t>=500)return{score:0,displayValue:lM(cM.displayValueHttpBadCode,{statusCode:t})};if(t>=400||""===r)return{score:1,notApplicable:!0};if(null===r)throw new Error(`Status ${t} was valid, but content was null`);const a=function validateRobots(e){const t=[];let r=!1;return e.split(/\r\n|\r|\n/).forEach(((e,a)=>{let n;try{n=parseLine(e)}catch(r){t.push({index:(a+1).toString(),line:e,message:r.message.toString()})}n&&(n.directive===rM?r=!0:!r&&iM.has(n.directive)&&t.push({index:(a+1).toString(),line:e,message:"No user-agent specified"}))})),t
|
1054
|
+
}(r),n=QL.makeTableDetails([{key:"index",itemType:"text",text:"Line #"},{key:"line",itemType:"code",text:"Content"},{key:"message",itemType:"code",text:"Error"}],a,{});let i;return a.length&&(i=lM(cM.displayValueValidationError,{itemCount:a.length})),{score:Number(0===a.length),details:n,displayValue:i}}},ZL.exports.UIStrings=cM;var uM={exports:{}};const dM=kp;function almostEqual(e,t){return Math.abs(e-t)<=10}function mergeTouchingClientRects(e){for(let t=0;t<e.length;t++)for(let r=t+1;r<e.length;r++){const a=e[t],n=e[r],i=almostEqual(a.top,n.top)||almostEqual(a.bottom,n.bottom),o=almostEqual(a.left,n.left)||almostEqual(a.right,n.right);if(dM.rectsTouchOrOverlap(a,n)&&(i||o)){const t=dM.getBoundingRect([a,n]),r=dM.getRectCenterPoint(t);if(!dM.rectContainsPoint(a,r)&&!dM.rectContainsPoint(n,r))continue;return(e=e.filter((e=>e!==a&&e!==n))).push(t),mergeTouchingClientRects(e)}}return e}var mM={getTappableRectsFromClientRects:function getTappableRectsFromClientRects$1(e){
|
1055
|
+
return e=dM.filterOutTinyRects(e),e=mergeTouchingClientRects(e=dM.filterOutRectsContainedByOthers(e))}};const pM=kc,hM=QN,{rectsTouchOrOverlap:gM,getRectOverlapArea:fM,getRectAtCenter:yM,allRectsContainedWithinEachOther:vM,getLargestRect:bM,getBoundingRectWithPadding:wM}=kp,{getTappableRectsFromClientRects:SM}=mM,TM=oi,EM={title:"Tap targets are sized appropriately",failureTitle:"Tap targets are not sized appropriately",description:"Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://web.dev/tap-targets/).",tapTargetHeader:"Tap Target",overlappingTargetHeader:"Overlapping Target",explanationViewportMetaNotOptimized:"Tap targets are too small because there's no viewport meta tag optimized for mobile screens",displayValue:"{decimalProportion, number, percent} appropriately sized tap targets"
|
1056
|
+
},xM=TM.createMessageInstanceIdFn("lighthouse-core/audits/seo/tap-targets.js",EM);function clientRectBelowMinimumSize(e){return e.width<48||e.height<48}function getOverlapFailureForTargetPair(e,t){let r=null;for(const a of e){const e=yM(a,48),n=fM(e,a);for(const a of t){const t=fM(e,a),i=t/n;i<.25||(!r||i>r.overlapScoreRatio)&&(r={overlapScoreRatio:i,tapTargetScore:n,overlappingTargetScore:t})}}return r}class TapTargets extends pM{static get meta(){return{id:"tap-targets",title:xM(EM.title),failureTitle:xM(EM.failureTitle),description:xM(EM.description),requiredArtifacts:["MetaElements","TapTargets"]}}static async audit(e,t){if("desktop"===t.settings.formFactor)return{score:1,notApplicable:!0};if(!(await hM.request(e.MetaElements,t)).isMobileOptimized)return{score:0,explanation:xM(EM.explanationViewportMetaNotOptimized)};const r=function getBoundedTapTargets(e){return e.map((e=>({tapTarget:e,paddedBoundsRect:wM(e.clientRects,48)})))}(e.TapTargets),a=function getAllOverlapFailures(e,t){
|
1057
|
+
const r=[];return e.forEach((e=>{const a=SM(e.tapTarget.clientRects);for(const n of t){if(n===e)continue;if(!gM(e.paddedBoundsRect,n.paddedBoundsRect))continue;if(e.tapTarget.href===n.tapTarget.href&&/https?:\/\//.test(e.tapTarget.href))continue;const t=n.tapTarget.clientRects;if(vM(a,t))continue;const i=getOverlapFailureForTargetPair(a,t);i&&r.push({...i,tapTarget:e.tapTarget,overlappingTarget:n.tapTarget})}})),r}(function getTooSmallTargets(e){return e.filter((e=>e.tapTarget.clientRects.every(clientRectBelowMinimumSize)))}(r),r),n=function getTableItems(e){const t=e.map((e=>{const t=bM(e.tapTarget.clientRects),r=Math.floor(t.width),a=Math.floor(t.height),n=r+"x"+a;return{tapTarget:pM.makeNodeItem(e.tapTarget.node),overlappingTarget:pM.makeNodeItem(e.overlappingTarget.node),tapTargetScore:e.tapTargetScore,overlappingTargetScore:e.overlappingTargetScore,overlapScoreRatio:e.overlapScoreRatio,size:n,width:r,height:a}}));return t.sort(((e,t)=>t.overlapScoreRatio-e.overlapScoreRatio)),t
|
1058
|
+
}(function mergeSymmetricFailures(e){const t=[];return e.forEach(((r,a)=>{const n=e.find((e=>e.tapTarget===r.overlappingTarget&&e.overlappingTarget===r.tapTarget));if(!n)return void t.push(r);const{overlapScoreRatio:i}=r,{overlapScoreRatio:o}=n;(i>o||i===o&&a<e.indexOf(n))&&t.push(r)})),t}(a)),i=[{key:"tapTarget",itemType:"node",text:xM(EM.tapTargetHeader)},{key:"size",itemType:"text",text:xM(TM.UIStrings.columnSize)},{key:"overlappingTarget",itemType:"node",text:xM(EM.overlappingTargetHeader)}],o=pM.makeTableDetails(i,n),s=e.TapTargets.length,c=new Set(a.map((e=>e.tapTarget))).size;let l=1,u=1;c>0&&(u=(s-c)/s,l=.89*u);return{score:l,details:o,displayValue:xM(EM.displayValue,{decimalProportion:u})}}}TapTargets.FINGER_SIZE_PX=48,uM.exports=TapTargets,uM.exports.UIStrings=EM;var _M={exports:{}};const AM=kc,RM=oi,kM=GT,DM=Lo,CM=Fo,IM={title:"Initial server response time was short",failureTitle:"Reduce initial server response time",
|
1059
|
+
description:"Keep the server response time for the main document short because all other requests depend on it. [Learn more](https://web.dev/time-to-first-byte/).",displayValue:"Root document took {timeInMs, number, milliseconds} ms"},NM=RM.createMessageInstanceIdFn("lighthouse-core/audits/server-response-time.js",IM);class ServerResponseTime extends AM{static get meta(){return{id:"server-response-time",title:NM(IM.title),failureTitle:NM(IM.failureTitle),description:NM(IM.description),supportedModes:["timespan","navigation"],requiredArtifacts:["devtoolsLogs","URL","GatherContext"]}}static calculateResponseTime(e){const t=e.timing;return t?t.receiveHeadersEnd-t.sendEnd:0}static async audit(e,t){const r=e.devtoolsLogs[AM.DEFAULT_PASS];let a;if("timespan"===e.GatherContext.gatherMode){const n=await DM.request(r,t),i=CM.findOptionalMainDocument(n,e.URL.finalUrl);if(!i)return{score:null,notApplicable:!0};a=i}else a=await kM.request({devtoolsLog:r,URL:e.URL},t)
|
1060
|
+
;const n=ServerResponseTime.calculateResponseTime(a),i=n<600,o=NM(IM.displayValue,{timeInMs:n}),s=[{key:"url",valueType:"url",label:NM(RM.UIStrings.columnURL)},{key:"responseTime",valueType:"timespanMs",label:NM(RM.UIStrings.columnTimeSpent)}],c=AM.makeOpportunityDetails(s,[{url:a.url,responseTime:n}],n-100);return{numericValue:n,numericUnit:"millisecond",score:Number(i),displayValue:o,details:c}}}_M.exports=ServerResponseTime,_M.exports.UIStrings=IM;var LM={exports:{}};const MM=ji,PM=kc,OM={title:"Registers a service worker that controls page and `start_url`",failureTitle:"Does not register a service worker that controls page and `start_url`",description:"The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more](https://web.dev/service-worker/).",explanationOutOfScope:"This origin has one or more service workers, however the page ({pageUrl}) is not in scope.",
|
1061
|
+
explanationNoManifest:"This page is controlled by a service worker, however no `start_url` was found because no manifest was fetched.",explanationBadManifest:"This page is controlled by a service worker, however no `start_url` was found because manifest failed to parse as valid JSON",explanationBadStartUrl:"This page is controlled by a service worker, however the `start_url` ({startUrl}) is not in the service worker's scope ({scopeUrl})"},FM=oi.createMessageInstanceIdFn("lighthouse-core/audits/service-worker.js",OM);class ServiceWorker extends PM{static get meta(){return{id:"service-worker",title:FM(OM.title),failureTitle:FM(OM.failureTitle),description:FM(OM.description),requiredArtifacts:["URL","ServiceWorker","WebAppManifest"]}}static getVersionsForOrigin(e,t){return e.filter((e=>"activated"===e.status)).filter((e=>new MM(e.scriptURL).origin===t.origin))}static getControllingServiceWorker(e,t,r){const a=[];for(const r of e){const e=t.find((e=>e.registrationId===r.registrationId))
|
1062
|
+
;if(e){const t=new MM(e.scopeURL).href,n=new MM(r.scriptURL).href;a.push({scopeUrl:t,scriptUrl:n})}}return a.filter((e=>r.href.startsWith(e.scopeUrl))).sort(((e,t)=>e.scopeUrl.length-t.scopeUrl.length)).pop()}static checkStartUrl(e,t){if(!e)return FM(OM.explanationNoManifest);if(!e.value)return FM(OM.explanationBadManifest);const r=e.value.start_url.value;return r.startsWith(t)?void 0:FM(OM.explanationBadStartUrl,{startUrl:r,scopeUrl:t})}static audit(e){const t=new MM(e.URL.finalUrl),{versions:r,registrations:a}=e.ServiceWorker,n=ServiceWorker.getVersionsForOrigin(r,t);if(0===n.length)return{score:0};const i=ServiceWorker.getControllingServiceWorker(n,a,t);if(!i)return{score:0,explanation:FM(OM.explanationOutOfScope,{pageUrl:t.href})};const{scriptUrl:o,scopeUrl:s}=i,c={type:"debugdata",scriptUrl:o,scopeUrl:s},l=ServiceWorker.checkStartUrl(e.WebAppManifest,i.scopeUrl);return l?{score:0,details:c,explanation:l}:{score:1,details:c}}}LM.exports=ServiceWorker,LM.exports.UIStrings=OM
|
1063
|
+
;var UM={exports:{}};const jM=kc;var BM=class MultiCheckAudit$2 extends jM{static async audit(e,t){const r=await this.audit_(e,t);return this.createAuditProduct(r)}static createAuditProduct(e){const t={...e,...e.manifestValues,manifestValues:void 0,allChecks:void 0};e.manifestValues?.allChecks&&e.manifestValues.allChecks.forEach((e=>{t[e.id]=e.passing}));const r={type:"debugdata",items:[t]};return e.failures.length>0?{score:0,explanation:`Failures: ${e.failures.join(",\n")}.`,details:r}:{score:1,details:r}}static audit_(e,t){throw new Error("audit_ unimplemented")}};const $M=BM,qM=LA,zM={title:"Configured for a custom splash screen",failureTitle:"Is not configured for a custom splash screen",description:"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more](https://web.dev/splash-screen/)."},VM=oi.createMessageInstanceIdFn("lighthouse-core/audits/splash-screen.js",zM);class SplashScreen extends $M{static get meta(){
|
1064
|
+
return{id:"splash-screen",title:VM(zM.title),failureTitle:VM(zM.failureTitle),description:VM(zM.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors"]}}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const r=["hasName","hasBackgroundColor","hasThemeColor","hasIconsAtLeast512px"];e.allChecks.filter((e=>r.includes(e.id))).forEach((e=>{e.passing||t.push(e.failureText)}))}static async audit_(e,t){const r=[],a=await qM.request(e,t);return SplashScreen.assessManifest(a,r),{failures:r,manifestValues:a}}}UM.exports=SplashScreen,UM.exports.UIStrings=zM;var WM={exports:{}};const HM=BM,GM=LA,YM=Rs,KM={title:"Sets a theme color for the address bar.",failureTitle:"Does not set a theme color for the address bar.",description:"The browser address bar can be themed to match your site. [Learn more](https://web.dev/themed-omnibox/)."
|
1065
|
+
},JM=oi.createMessageInstanceIdFn("lighthouse-core/audits/themed-omnibox.js",KM);class ThemedOmnibox extends HM{static get meta(){return{id:"themed-omnibox",title:JM(KM.title),failureTitle:JM(KM.failureTitle),description:JM(KM.description),supportedModes:["navigation"],requiredArtifacts:["WebAppManifest","InstallabilityErrors","MetaElements"]}}static isValidColor(e){return YM.valueType(e)===YM.TYPES.COLOR}static assessMetaThemecolor(e,t){e?ThemedOmnibox.isValidColor(e.content||"")||t.push("The theme-color meta tag did not contain a valid CSS color"):t.push('No `<meta name="theme-color">` tag found')}static assessManifest(e,t){if(e.isParseFailure&&e.parseFailureReason)return void t.push(e.parseFailureReason);const r=e.allChecks.find((e=>"hasThemeColor"===e.id));r&&!r.passing&&t.push(r.failureText)}static async audit_(e,t){const r=[],a=e.MetaElements.find((e=>"theme-color"===e.name)),n=await GM.request(e,t);return ThemedOmnibox.assessManifest(n,r),ThemedOmnibox.assessMetaThemecolor(a,r),
|
1066
|
+
{failures:r,manifestValues:n,themeColor:a?.content||null}}}WM.exports=ThemedOmnibox,WM.exports.UIStrings=KM;var XM={exports:{}},ZM={exports:{}};const QM=kc,eP=oi,tP=uw,rP=Lo,aP=Rv,{getJavaScriptURLs:nP,getAttributableURLForTask:iP}=Iv,oP={title:"Minimize third-party usage",failureTitle:"Reduce the impact of third-party code",description:"Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).",columnThirdParty:"Third-Party",displayValue:"Third-party code blocked the main thread for {timeInMs, number, milliseconds} ms"},sP=eP.createMessageInstanceIdFn("lighthouse-core/audits/third-party-summary.js",oP);class ThirdPartySummary$1 extends QM{static get meta(){return{id:"third-party-summary",title:sP(oP.title),
|
1067
|
+
failureTitle:sP(oP.failureTitle),description:sP(oP.description),requiredArtifacts:["traces","devtoolsLogs","URL"]}}static getSummaries(e,t,r){const a=new Map,n=new Map,i={mainThreadTime:0,blockingTime:0,transferSize:0};for(const t of e){const e=a.get(t.url)||{...i};e.transferSize+=t.transferSize,a.set(t.url,e)}const o=nP(e);for(const e of t){const t=iP(e,o),n=a.get(t)||{...i},s=e.selfTime*r;n.mainThreadTime+=s,n.blockingTime+=Math.max(s-50,0),a.set(t,n)}const s=new Map;for(const[e,t]of a.entries()){const r=tP.getEntity(e);if(!r){a.delete(e);continue}const o=n.get(r)||{...i};o.transferSize+=t.transferSize,o.mainThreadTime+=t.mainThreadTime,o.blockingTime+=t.blockingTime,n.set(r,o);const c=s.get(r)||[];c.push(e),s.set(r,c)}return{byURL:a,byEntity:n,urls:s}}static makeSubItems(e,t,r){let a=(t.urls.get(e)||[]).map((e=>({url:e,...t.byURL.get(e)}))).filter((e=>e.transferSize>0)).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize));const n={transferSize:0,blockingTime:0
|
1068
|
+
},i=Math.max(4096,r.transferSize/20),o=Math.min(5,a.length);let s=0;for(;s<o;){const e=a[s];if(0===e.blockingTime&&e.transferSize<i)break;s++,n.transferSize+=e.transferSize,n.blockingTime+=e.blockingTime}if(!n.blockingTime&&!n.transferSize)return[];a=a.slice(0,s);const c={url:sP(eP.UIStrings.otherResourcesLabel),transferSize:r.transferSize-n.transferSize,blockingTime:r.blockingTime-n.blockingTime};return c.transferSize>i&&a.push(c),a}static async audit(e,t){const r=t.settings||{},a=e.traces[QM.DEFAULT_PASS],n=e.devtoolsLogs[QM.DEFAULT_PASS],i=await rP.request(n,t),o=tP.getEntity(e.URL.finalUrl),s=await aP.request(a,t),c="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,l=ThirdPartySummary$1.getSummaries(i,s,c),u={wastedBytes:0,wastedMs:0},d=Array.from(l.byEntity.entries()).filter((([e])=>!(o&&o.name===e.name))).map((([e,t])=>(u.wastedBytes+=t.transferSize,u.wastedMs+=t.blockingTime,{...t,entity:{type:"link",text:e.name,url:e.homepage||""},subItems:{type:"subitems",
|
1069
|
+
items:ThirdPartySummary$1.makeSubItems(e,l,t)}}))).sort(((e,t)=>t.blockingTime-e.blockingTime||t.transferSize-e.transferSize)),m=[{key:"entity",itemType:"link",text:sP(oP.columnThirdParty),subItemsHeading:{key:"url",itemType:"url"}},{key:"transferSize",granularity:1,itemType:"bytes",text:sP(eP.UIStrings.columnTransferSize),subItemsHeading:{key:"transferSize"}},{key:"blockingTime",granularity:1,itemType:"ms",text:sP(eP.UIStrings.columnBlockingTime),subItemsHeading:{key:"blockingTime"}}];return d.length?{score:Number(u.wastedMs<=250),displayValue:sP(oP.displayValue,{timeInMs:u.wastedMs}),details:QM.makeTableDetails(m,d,u)}:{score:1,notApplicable:!0}}}ZM.exports=ThirdPartySummary$1,ZM.exports.UIStrings=oP;const cP=kc,lP=oi,uP=uw,dP=Lo,mP=GT,pP=Rv,hP=ZM.exports,gP={title:"Lazy load third-party resources with facades",failureTitle:"Some third-party resources can be lazy loaded with a facade",
|
1070
|
+
description:"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn more](https://web.dev/third-party-facades/).",displayValue:"{itemCount, plural,\n =1 {# facade alternative available}\n other {# facade alternatives available}\n }",columnProduct:"Product",categoryVideo:"{productName} (Video)",categoryCustomerSuccess:"{productName} (Customer Success)",categoryMarketing:"{productName} (Marketing)",categorySocial:"{productName} (Social)"},fP=lP.createMessageInstanceIdFn("lighthouse-core/audits/third-party-facades.js",gP),yP={video:gP.categoryVideo,"customer-success":gP.categoryCustomerSuccess,marketing:gP.categoryMarketing,social:gP.categorySocial};class ThirdPartyFacades extends cP{static get meta(){return{id:"third-party-facades",title:fP(gP.title),failureTitle:fP(gP.failureTitle),description:fP(gP.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL"]}}static condenseItems(e){
|
1071
|
+
e.sort(((e,t)=>t.transferSize-e.transferSize));let t=e.findIndex((e=>e.transferSize<1e3))||1;if((-1===t||t>5)&&(t=5),t>=e.length-1)return;const r=e.splice(t).reduce(((e,t)=>(e.transferSize+=t.transferSize,e.blockingTime+=t.blockingTime,e)));r.transferSize<1e3||(r.url=fP(lP.UIStrings.otherResourcesLabel),e.push(r))}static getProductsWithFacade(e,t){const r=new Map;for(const a of e.keys()){const e=uP.getEntity(a);if(!e||uP.isFirstParty(a,t))continue;const n=uP.getProduct(a);n&&n.facades&&n.facades.length&&(r.has(n.name)||r.set(n.name,{product:n,entity:e}))}return Array.from(r.values())}static async audit(e,t){const r=t.settings,a=e.traces[cP.DEFAULT_PASS],n=e.devtoolsLogs[cP.DEFAULT_PASS],i=await dP.request(n,t),o=await mP.request({devtoolsLog:n,URL:e.URL},t),s=uP.getEntity(o.url),c=await pP.request(a,t),l="simulate"===r.throttlingMethod?r.throttling.cpuSlowdownMultiplier:1,u=hP.getSummaries(i,c,l),d=ThirdPartyFacades.getProductsWithFacade(u.byURL,s),m=[]
|
1072
|
+
;for(const{product:e,entity:t}of d){const r=yP[e.categories[0]];let a;a=r?fP(r,{productName:e.name}):e.name;const n=u.urls.get(t),i=u.byEntity.get(t);if(!n||!i)continue;const o=Array.from(n).map((e=>({url:e,...u.byURL.get(e)})));this.condenseItems(o),m.push({product:a,transferSize:i.transferSize,blockingTime:i.blockingTime,subItems:{type:"subitems",items:o}})}if(!m.length)return{score:1,notApplicable:!0};const p=[{key:"product",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:fP(gP.columnProduct)},{key:"transferSize",itemType:"bytes",subItemsHeading:{key:"transferSize"},granularity:1,text:fP(lP.UIStrings.columnTransferSize)},{key:"blockingTime",itemType:"ms",subItemsHeading:{key:"blockingTime"},granularity:1,text:fP(lP.UIStrings.columnBlockingTime)}];return{score:0,displayValue:fP(gP.displayValue,{itemCount:m.length}),details:cP.makeTableDetails(p,m)}}}XM.exports=ThirdPartyFacades,XM.exports.UIStrings=gP;var vP={exports:{}};const bP=kc,wP=MD,SP=GT,TP=Tu,EP=oi,xP={
|
1073
|
+
title:"Timing budget",description:"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).",columnTimingMetric:"Metric",columnMeasurement:"Measurement"},_P=EP.createMessageInstanceIdFn("lighthouse-core/audits/timing-budget.js",xP);vP.exports=class TimingBudget extends bP{static get meta(){return{id:"timing-budget",title:_P(xP.title),description:_P(xP.description),scoreDisplayMode:bP.SCORING_MODES.INFORMATIVE,supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL","GatherContext"]}}static getRowLabel(e){const t={"first-contentful-paint":EP.UIStrings.firstContentfulPaintMetric,interactive:EP.UIStrings.interactiveMetric,"first-meaningful-paint":EP.UIStrings.firstMeaningfulPaintMetric,"max-potential-fid":EP.UIStrings.maxPotentialFIDMetric,"total-blocking-time":EP.UIStrings.totalBlockingTimeMetric,
|
1074
|
+
"speed-index":EP.UIStrings.speedIndexMetric,"largest-contentful-paint":EP.UIStrings.largestContentfulPaintMetric,"cumulative-layout-shift":EP.UIStrings.cumulativeLayoutShiftMetric};return _P(t[e])}static getMeasurement(e,t){return{"first-contentful-paint":t.firstContentfulPaint,interactive:t.interactive,"first-meaningful-paint":t.firstMeaningfulPaint,"max-potential-fid":t.maxPotentialFID,"total-blocking-time":t.totalBlockingTime,"speed-index":t.speedIndex,"largest-contentful-paint":t.largestContentfulPaint,"cumulative-layout-shift":t.cumulativeLayoutShift}[e]}static tableItems(e,t){let r=[];if(!e.timings)return r;r=e.timings.map((e=>{const r=e.metric,a=this.getRowLabel(r),n=this.getMeasurement(r,t);return{metric:r,label:a,measurement:n,overBudget:n&&n>e.budget?n-e.budget:void 0}})).sort(((e,t)=>(t.overBudget||0)-(e.overBudget||0)));const a=r.find((e=>"cumulative-layout-shift"===e.metric));return a&&("number"==typeof a.measurement&&(a.measurement={type:"numeric",
|
1075
|
+
value:Number(a.measurement),granularity:.01}),"number"==typeof a.overBudget&&(a.overBudget={type:"numeric",value:Number(a.overBudget),granularity:.01})),r}static async audit(e,t){const r=e.GatherContext,a=e.devtoolsLogs[bP.DEFAULT_PASS],n=e.traces[bP.DEFAULT_PASS],i=await SP.request({URL:e.URL,devtoolsLog:a},t),o={trace:n,devtoolsLog:a,gatherContext:r,settings:t.settings},s=(await wP.request(o,t)).metrics,c=TP.getMatchingBudget(t.settings.budgets,i.url);if(!c)return{score:0,notApplicable:!0};const l=[{key:"label",itemType:"text",text:_P(xP.columnTimingMetric)},{key:"measurement",itemType:"ms",text:_P(xP.columnMeasurement)},{key:"overBudget",itemType:"ms",text:_P(EP.UIStrings.columnOverBudget)}];return{details:bP.makeTableDetails(l,this.tableItems(c,s)),score:1}}},vP.exports.UIStrings=xP;var AP={exports:{}};const RP=kc,kP=oi,DP=ji,CP={title:"Image elements have explicit `width` and `height`",failureTitle:"Image elements do not have explicit `width` and `height`",
|
1076
|
+
description:"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn more](https://web.dev/optimize-cls/#images-without-dimensions)"},IP=kP.createMessageInstanceIdFn("lighthouse-core/audits/unsized-images.js",CP);class UnsizedImages extends RP{static get meta(){return{id:"unsized-images",title:IP(CP.title),failureTitle:IP(CP.failureTitle),description:IP(CP.description),requiredArtifacts:["ImageElements"]}}static doesHtmlAttrProvideExplicitSize(e){if(!e)return!1;if(e.startsWith("+"))return!1;return parseInt(e,10)>=0}static isCssPropExplicitlySet(e){return!!e&&!["auto","initial","unset","inherit"].includes(e)}static isSizedImage(e){if(void 0===e.cssEffectiveRules)return!0
|
1077
|
+
;const t=e.attributeWidth,r=e.attributeHeight,a=e.cssEffectiveRules.width,n=e.cssEffectiveRules.height,i=e.cssEffectiveRules.aspectRatio,o=UnsizedImages.doesHtmlAttrProvideExplicitSize(t),s=UnsizedImages.isCssPropExplicitlySet(a),c=UnsizedImages.doesHtmlAttrProvideExplicitSize(r),l=UnsizedImages.isCssPropExplicitlySet(n),u=UnsizedImages.isCssPropExplicitlySet(i),d=o||s,m=c||l;return d&&m||d&&u||m&&u}static isNonNetworkSvg(e){const t="image/svg+xml"===DP.guessMimeType(e.src),r=e.src.slice(0,e.src.indexOf(":")),a=DP.isNonNetworkProtocol(r);return t&&a}static async audit(e){const t=e.ImageElements.filter((e=>!e.isCss&&!e.isInShadowDOM)),r=[];for(const e of t){if("fixed"===e.computedStyles.position||"absolute"===e.computedStyles.position)continue;if(UnsizedImages.isNonNetworkSvg(e))continue;if(UnsizedImages.isSizedImage(e))continue;const t=e.node.boundingRect;0===t.width&&0===t.height||r.push({url:DP.elideDataURI(e.src),node:RP.makeNodeItem(e.node)})}const a=[{key:"node",itemType:"node",
|
1078
|
+
text:""},{key:"url",itemType:"url",text:IP(kP.UIStrings.columnURL)}];return{score:r.length>0?0:1,notApplicable:0===t.length,details:RP.makeTableDetails(a,r)}}}AP.exports=UnsizedImages,AP.exports.UIStrings=CP;var NP={exports:{}};const LP=Ao,MP=Yp;var PP=LP(class UserTimings$1{static async compute_(e,t){const r=await MP.request(e,t),a=[],n={};return r.processEvents.filter((e=>!!e.cat.includes("blink.user_timing")&&("requestStart"!==e.name&&"navigationStart"!==e.name&&"paintNonDefaultBackgroundColor"!==e.name&&void 0===e.args.frame))).forEach((e=>{"R"===e.ph||"I"===e.ph.toUpperCase()?a.push({name:e.name,isMark:!0,args:e.args,startTime:e.ts}):"b"===e.ph.toLowerCase()?n[e.name]=e.ts:"e"===e.ph.toLowerCase()&&a.push({name:e.name,isMark:!1,args:e.args,startTime:n[e.name],endTime:e.ts,duration:e.ts-n[e.name]})})),a.forEach((e=>{e.startTime=(e.startTime-r.timeOriginEvt.ts)/1e3,e.isMark||(e.endTime=(e.endTime-r.timeOriginEvt.ts)/1e3,e.duration=e.duration/1e3)})),a}},null)
|
1079
|
+
;const OP=kc,FP=oi,UP=PP,jP={title:"User Timing marks and measures",description:"Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more](https://web.dev/user-timings/).",displayValue:"{itemCount, plural,\n =1 {1 user timing}\n other {# user timings}\n }",columnType:"Type"},BP=FP.createMessageInstanceIdFn("lighthouse-core/audits/user-timings.js",jP);class UserTimings extends OP{static get meta(){return{id:"user-timings",title:BP(jP.title),description:BP(jP.description),scoreDisplayMode:OP.SCORING_MODES.INFORMATIVE,requiredArtifacts:["traces"]}}static get excludedPrefixes(){return["goog_"]}static excludeEvent(e){return UserTimings.excludedPrefixes.every((t=>!e.name.startsWith(t)))}static audit(e,t){const r=e.traces[OP.DEFAULT_PASS];return UP.request(r,t).then((e=>{const t=e.filter(UserTimings.excludeEvent),r=t.map((e=>({name:e.name,startTime:e.startTime,duration:e.isMark?void 0:e.duration,
|
1080
|
+
timingType:e.isMark?"Mark":"Measure"}))).sort(((e,t)=>e.timingType===t.timingType?e.startTime-t.startTime:"Measure"===e.timingType?-1:1)),a=[{key:"name",itemType:"text",text:BP(FP.UIStrings.columnName)},{key:"timingType",itemType:"text",text:BP(jP.columnType)},{key:"startTime",itemType:"ms",granularity:.01,text:BP(FP.UIStrings.columnStartTime)},{key:"duration",itemType:"ms",granularity:.01,text:BP(FP.UIStrings.columnDuration)}],n=OP.makeTableDetails(a,r);let i;return t.length&&(i=BP(jP.displayValue,{itemCount:t.length})),{score:Number(0===t.length),notApplicable:0===t.length,displayValue:i,details:n}}))}}NP.exports=UserTimings,NP.exports.UIStrings=jP;var $P={exports:{}};const qP=kc,zP=Ib,VP=ji,WP=oi,HP=Lo,GP=GT,YP=Dl,KP=Yp,JP=Xp,XP=eb,ZP=Tk,QP={title:"Preconnect to required origins",description:"Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn more](https://web.dev/uses-rel-preconnect/).",
|
1081
|
+
unusedWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Only use `preconnect` for important origins that the page will certainly request.',crossoriginWarning:'A `<link rel=preconnect>` was found for "{securityOrigin}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.',tooManyPreconnectLinksWarning:"More than 2 `<link rel=preconnect>` connections were found. These should be used sparingly and only to the most important origins."},eO=WP.createMessageInstanceIdFn("lighthouse-core/audits/uses-rel-preconnect.js",QP);class UsesRelPreconnectAudit extends qP{static get meta(){return{id:"uses-rel-preconnect",title:eO(QP.title),description:eO(QP.description),supportedModes:["navigation"],requiredArtifacts:["traces","devtoolsLogs","URL","LinkElements"],scoreDisplayMode:qP.SCORING_MODES.NUMERIC}}static hasValidTiming(e){return!!e.timing&&e.timing.connectEnd>0&&e.timing.connectStart>0}
|
1082
|
+
static hasAlreadyConnectedToOrigin(e){return!!e.timing&&e.timing.dnsEnd-e.timing.dnsStart==0&&e.timing.connectEnd-e.timing.connectStart==0}static socketStartTimeIsBelowThreshold(e,t){return Math.max(0,e.startTime-t.endTime)<15}static async audit(e,t){const r=e.traces[UsesRelPreconnectAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreconnectAudit.DEFAULT_PASS],n=t.settings;let i=0;const o=[],s=await KP.request(r,t),[c,l,u,d,m]=await Promise.all([HP.request(a,t),GP.request({devtoolsLog:a,URL:e.URL},t),YP.request({devtoolsLog:a,settings:n},t),JP.request(s,t),XP.request({trace:r,devtoolsLog:a},t)]),{rtt:p,additionalRttByOrigin:h}=u.getOptions(),f=await ZP.getPessimisticGraph(m,d),y=new Set;f.traverse((e=>{"network"===e.type&&y.add(e.record.url)}));const v=new Map;c.forEach((e=>{
|
1083
|
+
if(!UsesRelPreconnectAudit.hasValidTiming(e)||e.initiator.url===l.url||!e.parsedURL||!e.parsedURL.securityOrigin||l.parsedURL.securityOrigin===e.parsedURL.securityOrigin||!y.has(e.url)||UsesRelPreconnectAudit.hasAlreadyConnectedToOrigin(e)||!UsesRelPreconnectAudit.socketStartTimeIsBelowThreshold(e,l))return;const t=e.parsedURL.securityOrigin,r=v.get(t)||[];r.push(e),v.set(t,r)}));const b=e.LinkElements.filter((e=>"preconnect"===e.rel)),w=new Set(b.map((e=>VP.getOrigin(e.href||""))));let S=[];v.forEach((e=>{const t=e.reduce(((e,t)=>t.startTime<e.startTime?t:e));if(!t.timing)return;const r=t.parsedURL.securityOrigin,a=h.get(r)||0;let n=p+a;"https"===t.parsedURL.scheme&&(n*=2);const s=1e3*t.startTime-1e3*l.endTime+t.timing.dnsStart,c=Math.min(n,s);c<50||(w.has(r)?o.push(eO(QP.crossoriginWarning,{securityOrigin:r})):(i=Math.max(c,i),S.push({url:r,wastedMs:c})))})),S=S.sort(((e,t)=>t.wastedMs-e.wastedMs))
|
1084
|
+
;for(const e of w)e&&(c.some((t=>e===t.parsedURL.securityOrigin))||o.push(eO(QP.unusedWarning,{securityOrigin:e})));if(b.length>=2)return{score:1,warnings:b.length>=3?[...o,eO(QP.tooManyPreconnectLinksWarning)]:o};const T=[{key:"url",valueType:"url",label:eO(WP.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",label:eO(WP.UIStrings.columnWastedMs)}],E=qP.makeOpportunityDetails(T,S,i);return{score:zP.scoreForWastedMs(i),numericValue:i,numericUnit:"millisecond",displayValue:i?eO(WP.UIStrings.displayValueMsSavings,{wastedMs:i}):"",warnings:o,details:E}}}$P.exports=UsesRelPreconnectAudit,$P.exports.UIStrings=QP;var tO={exports:{}};const rO=ji,aO=Ki,nO=kc,iO=Ib,oO=ZT,sO=oi,cO=GT,lO=eb,uO=Dl,dO={title:"Preload key requests",description:"Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn more](https://web.dev/uses-rel-preload/).",
|
1085
|
+
crossoriginWarning:'A preload `<link>` was found for "{preloadURL}" but was not used by the browser. Check that you are using the `crossorigin` attribute properly.'},mO=sO.createMessageInstanceIdFn("lighthouse-core/audits/uses-rel-preload.js",dO);class UsesRelPreloadAudit extends nO{static get meta(){return{id:"uses-rel-preload",title:mO(dO.title),description:mO(dO.description),supportedModes:["navigation"],requiredArtifacts:["devtoolsLogs","traces","URL"],scoreDisplayMode:nO.SCORING_MODES.NUMERIC}}static getURLsToPreload(e,t){const r=new Set;return t.traverse(((t,a)=>{if("network"!==t.type)return;const n=a.slice(1).filter((e=>"network"===e.type));UsesRelPreloadAudit.shouldPreloadRequest(t.record,e,n)&&r.add(t.record.url)})),r}static getURLsFailedToPreload(e){const t=[];e.traverse((e=>"network"===e.type&&t.push(e.record)));const r=t.filter((e=>e.isLinkPreload)),a=new Map;for(const e of r){const t=a.get(e.frameId)||new Set;t.add(e.url),a.set(e.frameId,t)}const n=t.filter((e=>{
|
1086
|
+
const t=a.get(e.frameId);if(!t)return!1;if(!t.has(e.url))return!1;return!(e.fromDiskCache||e.fromMemoryCache||e.fromPrefetchCache)&&!e.isLinkPreload}));return new Set(n.map((e=>e.url)))}static shouldPreloadRequest(e,t,r){const a=t.redirects?t.redirects.length:0;return!e.isLinkPreload&&(!!oO.isCritical(e,t)&&(!aO.isNonNetworkRequest(e)&&(r.length===a+2&&(e.frameId===t.frameId&&rO.rootDomainsMatch(e.url,t.url)))))}static computeWasteWithGraph(e,t,r){if(!e.size)return{wastedMs:0,results:[]};const a=r.simulate(t,{flexibleOrdering:!0}),n=t.cloneWithRelationships(),i=[];let o=null;if(n.traverse((t=>{"network"===t.type&&(t.isMainDocument()?o=t:t.record&&e.has(t.record.url)&&i.push(t))})),!o)throw new Error("Could not find main document node");for(const e of i)e.removeAllDependencies(),e.addDependency(o);const s=r.simulate(n,{flexibleOrdering:!0}),c=Array.from(a.nodeTimings.keys()).reduce(((e,t)=>e.set(t.record,t)),new Map),l=[];for(const e of i){
|
1087
|
+
const t=c.get(e.record),r=s.nodeTimings.get(e),n=a.nodeTimings.get(t);if(!n||!r)throw new Error("Missing preload node");const i=Math.round(n.endTime-r.endTime);i<100||l.push({url:e.record.url,wastedMs:i})}return l.length?{wastedMs:Math.max(...l.map((e=>e.wastedMs))),results:l}:{wastedMs:0,results:l}}static async audit_(e,t){const r=e.traces[UsesRelPreloadAudit.DEFAULT_PASS],a=e.devtoolsLogs[UsesRelPreloadAudit.DEFAULT_PASS],n=e.URL,i={devtoolsLog:a,settings:t.settings},[o,s,c]=await Promise.all([cO.request({devtoolsLog:a,URL:n},t),lO.request({trace:r,devtoolsLog:a},t),uO.request(i,t)]),l=UsesRelPreloadAudit.getURLsToPreload(o,s),{results:u,wastedMs:d}=UsesRelPreloadAudit.computeWasteWithGraph(l,s,c);let m;u.sort(((e,t)=>t.wastedMs-e.wastedMs));const p=UsesRelPreloadAudit.getURLsFailedToPreload(s);p.size&&(m=Array.from(p).map((e=>mO(dO.crossoriginWarning,{preloadURL:e}))));const h=[{key:"url",valueType:"url",label:mO(sO.UIStrings.columnURL)},{key:"wastedMs",valueType:"timespanMs",
|
1088
|
+
label:mO(sO.UIStrings.columnWastedMs)}],f=nO.makeOpportunityDetails(h,u,d);return{score:iO.scoreForWastedMs(d),numericValue:d,numericUnit:"millisecond",displayValue:d?mO(sO.UIStrings.displayValueMsSavings,{wastedMs:d}):"",details:f,warnings:m}}static async audit(){return{score:1,notApplicable:!0,details:nO.makeOpportunityDetails([],[],0)}}}tO.exports=UsesRelPreloadAudit,tO.exports.UIStrings=dO;var pO={exports:{}};
|
1092
1089
|
/**
|
1093
1090
|
* @license Copyright 2020 Google Inc. All Rights Reserved.
|
1094
1091
|
* 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
|
1095
1092
|
* 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.
|
1096
|
-
*/const
|
1097
|
-
description:
|
1098
|
-
key:"sourceMapUrl",itemType:"url",text:
|
1099
|
-
;
|
1100
|
-
displayValue:"{timeInMs, number, milliseconds} ms spent on event '{interactionType}'",eventTarget:"Event target"},
|
1101
|
-
static getPhaseTimes(e){const t=e.args.data,r=e.ts,a=r-1e3*t.timeStamp,n=a+1e3*t.processingStart,i=a+1e3*t.processingEnd;return{inputDelay:{startTs:r,endTs:n},processingDelay:{startTs:n,endTs:i},presentationDelay:{startTs:i,endTs:r+1e3*t.duration}}}static getThreadBreakdownTable(e,t,r,a){const n=
|
1102
|
-
key:"phase",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:"Phase"},{key:"total",itemType:"ms",subItemsHeading:{key:"total",granularity:1,itemType:"ms"},granularity:1,text:"Total time"},{key:null,itemType:"ms",subItemsHeading:{key:"scripting",granularity:1,itemType:"ms"},text:"Script evaluation"},{key:null,itemType:"ms",subItemsHeading:{key:"layout",granularity:1,itemType:"ms"},text:
|
1103
|
-
trace:a,settings:r},i=await
|
1093
|
+
*/const hO=uw,gO=kc,fO=oi,yO={title:"Page has valid source maps",failureTitle:"Missing source maps for large first-party JavaScript",description:"Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps).",columnMapURL:"Map URL",missingSourceMapErrorMessage:"Large JavaScript file is missing a source map",missingSourceMapItemsWarningMesssage:"{missingItems, plural,\n =1 {Warning: missing 1 item in `.sourcesContent`}\n other {Warning: missing # items in `.sourcesContent`}\n }"},vO=fO.createMessageInstanceIdFn("lighthouse-core/audits/valid-source-maps.js",yO);pO.exports=class ValidSourceMaps extends gO{static get meta(){return{id:"valid-source-maps",title:vO(yO.title),failureTitle:vO(yO.failureTitle),
|
1094
|
+
description:vO(yO.description),requiredArtifacts:["ScriptElements","SourceMaps","URL"]}}static isLargeFirstPartyJS(e,t){if(null===e.content)return!1;const r=e.content.length>=512e3,a=!!e.src&&hO.isFirstParty(e.src,hO.getEntity(t));return r&&a}static async audit(e){const{SourceMaps:t}=e,r=new Set;let a=!1;const n=[];for(const i of e.ScriptElements){if(!i.src)continue;const o=t.find((e=>e.scriptUrl===i.src)),s=[];if(!this.isLargeFirstPartyJS(i,e.URL.finalUrl)||o&&o.map||(a=!0,r.add(i.src),s.push({error:vO(yO.missingSourceMapErrorMessage)})),o&&!o.map&&s.push({error:o.errorMessage}),o?.map){const e=o.map.sourcesContent||[];let t=0;for(let r=0;r<o.map.sources.length;r++)(e.length<r||!e[r])&&(t+=1);t>0&&s.push({error:vO(yO.missingSourceMapItemsWarningMesssage,{missingItems:t})})}(o||s.length)&&n.push({scriptUrl:i.src,sourceMapUrl:o?.sourceMapUrl,subItems:{type:"subitems",items:s}})}const i=[{key:"scriptUrl",itemType:"url",subItemsHeading:{key:"error"},text:vO(fO.UIStrings.columnURL)},{
|
1095
|
+
key:"sourceMapUrl",itemType:"url",text:vO(yO.columnMapURL)}];return n.sort(((e,t)=>{const a=r.has(e.scriptUrl),n=r.has(t.scriptUrl);return a&&!n?-1:!a&&n?1:e.subItems.items.length&&!t.subItems.items.length?-1:!e.subItems.items.length&&t.subItems.items.length?1:t.scriptUrl.localeCompare(e.scriptUrl)})),{score:a?0:1,details:gO.makeTableDetails(i,n)}}},pO.exports.UIStrings=yO;var bO={exports:{}};const wO=kc,SO=QN,TO={title:'Has a `<meta name="viewport">` tag with `width` or `initial-scale`',failureTitle:'Does not have a `<meta name="viewport">` tag with `width` or `initial-scale`',description:'A `<meta name="viewport">` not only optimizes your app for mobile screen sizes, but also prevents [a 300 millisecond delay to user input](https://developers.google.com/web/updates/2013/12/300ms-tap-delay-gone-away). [Learn more](https://web.dev/viewport/).',explanationNoTag:'No `<meta name="viewport">` tag found'},EO=oi.createMessageInstanceIdFn("lighthouse-core/audits/viewport.js",TO)
|
1096
|
+
;bO.exports=class Viewport extends wO{static get meta(){return{id:"viewport",title:EO(TO.title),failureTitle:EO(TO.failureTitle),description:EO(TO.description),requiredArtifacts:["MetaElements"]}}static async audit(e,t){const r=await SO.request(e.MetaElements,t);return r.hasViewportTag?{score:Number(r.isMobileOptimized),warnings:r.parserWarnings}:{score:0,explanation:EO(TO.explanationNoTag)}}},bO.exports.UIStrings=TO;var xO={exports:{}};const _O=kc,AO=ah,RO=Yp,kO=oi,DO=Lo,CO=Ev,{taskGroups:IO}=wv,NO=ao,{getExecutionTimingsByURL:LO}=Iv,MO=WD.exports.defaultOptions,PO=vi.exports,OO={title:"Minimizes work during key interaction",failureTitle:"Minimize work during key interaction",description:"This is the thread-blocking work occurring during the Interaction to Next Paint measurement. [Learn more](https://web.dev/inp/).",inputDelay:"Input delay",processingDelay:"Processing delay",presentationDelay:"Presentation delay",
|
1097
|
+
displayValue:"{timeInMs, number, milliseconds} ms spent on event '{interactionType}'",eventTarget:"Event target"},FO=kO.createMessageInstanceIdFn("lighthouse-core/audits/work-during-interaction.js",OO);class WorkDuringInteraction extends _O{static get meta(){return{id:"work-during-interaction",title:FO(OO.title),failureTitle:FO(OO.failureTitle),description:FO(OO.description),scoreDisplayMode:_O.SCORING_MODES.NUMERIC,supportedModes:["timespan"],requiredArtifacts:["traces","devtoolsLogs","TraceElements"]}}static recursivelyClipTasks(e,t,r,a){const n=e.event.ts,i=e.endEvent?.ts??e.event.ts+Number(e.event.dur||0);e.startTime=Math.max(r,Math.min(a,n))/1e3,e.endTime=Math.max(r,Math.min(a,i))/1e3,e.duration=e.endTime-e.startTime;const o=e.children.map((t=>WorkDuringInteraction.recursivelyClipTasks(t,e,r,a))).reduce(((e,t)=>e+t),0);return e.selfTime=e.duration-o,e.duration}static clipTasksByTs(e,t,r){for(const a of e)a.parent||WorkDuringInteraction.recursivelyClipTasks(a,void 0,t,r)}
|
1098
|
+
static getPhaseTimes(e){const t=e.args.data,r=e.ts,a=r-1e3*t.timeStamp,n=a+1e3*t.processingStart,i=a+1e3*t.processingEnd;return{inputDelay:{startTs:r,endTs:n},processingDelay:{startTs:n,endTs:i},presentationDelay:{startTs:i,endTs:r+1e3*t.duration}}}static getThreadBreakdownTable(e,t,r,a){const n=NO.filteredTraceSort(t.traceEvents,(t=>t.pid===e.pid&&t.tid===e.tid)),i=n.reduce(((e,t)=>Math.max(t.ts+(t.dur||0),e)),0),{frames:o}=r,s=CO.getMainThreadTasks(n,o,i),c=WorkDuringInteraction.getPhaseTimes(e),l=[];for(const[e,t]of Object.entries(c)){WorkDuringInteraction.clipTasksByTs(s,t.startTs,t.endTs);const r=LO(s,a),n=[];for(const[e,t]of r){const r=Object.values(t).reduce(((e,t)=>e+t)),a=t[IO.scriptEvaluation.id]||0,i=t[IO.styleLayout.id]||0,o=t[IO.paintCompositeRender.id]||0;n.push({url:e,total:r,scripting:a,layout:i,render:o})}const i=n.filter((e=>e.total>1)).sort(((e,t)=>t.total-e.total));l.push({phase:FO(OO[e]),total:(t.endTs-t.startTs)/1e3,subItems:{type:"subitems",items:i}})}const u=[{
|
1099
|
+
key:"phase",itemType:"text",subItemsHeading:{key:"url",itemType:"url"},text:"Phase"},{key:"total",itemType:"ms",subItemsHeading:{key:"total",granularity:1,itemType:"ms"},granularity:1,text:"Total time"},{key:null,itemType:"ms",subItemsHeading:{key:"scripting",granularity:1,itemType:"ms"},text:"Script evaluation"},{key:null,itemType:"ms",subItemsHeading:{key:"layout",granularity:1,itemType:"ms"},text:IO.styleLayout.label},{key:null,itemType:"ms",subItemsHeading:{key:"render",granularity:1,itemType:"ms"},text:IO.paintCompositeRender.label}];return{table:_O.makeTableDetails(u,l),phases:c}}static getTraceElementTable(e){const t=e.find((e=>"responsiveness"===e.traceEventType));if(!t)return;const r=[{key:"node",itemType:"node",text:FO(OO.eventTarget)}],a=[{node:_O.makeNodeItem(t.node)}];return _O.makeTableDetails(r,a)}static async audit(e,t){const{settings:r}=t;if("simulate"===r.throttlingMethod)return{score:null,notApplicable:!0};const a=e.traces[WorkDuringInteraction.DEFAULT_PASS],n={
|
1100
|
+
trace:a,settings:r},i=await AO.request(n,t);if(null===i)return{score:null,notApplicable:!0};if("FallbackTiming"===i.name)throw new PO(PO.errors.UNSUPPORTED_OLD_CHROME,{featureName:"detailed EventTiming trace events"});const o=[],s=WorkDuringInteraction.getTraceElementTable(e.TraceElements);s&&o.push(s);const c=e.devtoolsLogs[WorkDuringInteraction.DEFAULT_PASS],l=await DO.request(c,t),u=await RO.request(a,t),{table:d,phases:m}=WorkDuringInteraction.getThreadBreakdownTable(i,a,u,l);o.push(d);const p=i.args.data.type;o.push({type:"debugdata",interactionType:p,phases:m});const h=i.args.data.duration,f=FO(OO.displayValue,{timeInMs:h,interactionType:p});return{score:h<MO.p10?1:0,displayValue:f,details:{type:"list",items:o}}}}xO.exports=WorkDuringInteraction,xO.exports.UIStrings=OO;var UO={exports:{}},jO={exports:{}};const BO={GROUPS__METRICS:"Metrics",GROUPS__ADS_PERFORMANCE:"Ad Speed",GROUPS__ADS_BEST_PRACTICES:"Tag Best Practices",NOT_APPLICABLE__DEFAULT:"Audit not applicable",
|
1104
1101
|
NOT_APPLICABLE__INVALID_TIMING:"Invalid timing task data",NOT_APPLICABLE__NO_AD_RELATED_REQ:"No ad-related requests",NOT_APPLICABLE__NO_AD_RENDERED:"No ads rendered",NOT_APPLICABLE__NO_ADS_VIEWPORT:"No ads in viewport",NOT_APPLICABLE__NO_ADS:"No ads requested",NOT_APPLICABLE__NO_BIDS:"No bids detected",NOT_APPLICABLE__NO_EVENT_MATCHING_REQ:"No event matches network records",NOT_APPLICABLE__NO_GPT:"GPT not requested",NOT_APPLICABLE__NO_RECORDS:"No successful network records",NOT_APPLICABLE__NO_VISIBLE_SLOTS:"No visible slots",NOT_APPLICABLE__NO_TAG:"No tag requested",NOT_APPLICABLE__NO_TAGS:"No tags requested",NOT_APPLICABLE__NO_TASKS:"No tasks to compare",NOT_APPLICABLE__NO_VALID_AD_WIDTHS:"No requested ads contain ads of valid width",NOT_APPLICABLE__NO_LAYOUT_SHIFTS:"No layout shift events found",ERRORS__AREA_LARGER_THAN_VIEWPORT:"Calculated ad area is larger than viewport",ERRORS__VIEWPORT_AREA_ZERO:"Viewport area is zero",
|
1105
|
-
WARNINGS__NO_ADS:"No ads were requested when fetching this page.",WARNINGS__NO_AD_RENDERED:"No ads were rendered when rendering this page.",WARNINGS__NO_TAG:"The GPT tag was not requested."}
|
1106
|
-
NoRecords:notApplicableObj(
|
1102
|
+
WARNINGS__NO_ADS:"No ads were requested when fetching this page.",WARNINGS__NO_AD_RENDERED:"No ads were rendered when rendering this page.",WARNINGS__NO_TAG:"The GPT tag was not requested."},$O=oi.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/messages/common-strings.js",BO),notApplicableObj=e=>({notApplicable:!0,score:1,displayValue:$O(e)}),qO={Default:notApplicableObj(BO.NOT_APPLICABLE__DEFAULT),InvalidTiming:notApplicableObj(BO.NOT_APPLICABLE__INVALID_TIMING),NoAdRelatedReq:notApplicableObj(BO.NOT_APPLICABLE__NO_AD_RELATED_REQ),NoAdRendered:notApplicableObj(BO.NOT_APPLICABLE__NO_AD_RENDERED),NoAdsViewport:notApplicableObj(BO.NOT_APPLICABLE__NO_ADS_VIEWPORT),NoAds:notApplicableObj(BO.NOT_APPLICABLE__NO_ADS),NoBids:notApplicableObj(BO.NOT_APPLICABLE__NO_BIDS),NoEventMatchingReq:notApplicableObj(BO.NOT_APPLICABLE__NO_EVENT_MATCHING_REQ),NoGpt:notApplicableObj(BO.NOT_APPLICABLE__NO_GPT),NoLayoutShifts:notApplicableObj(BO.NOT_APPLICABLE__NO_LAYOUT_SHIFTS),
|
1103
|
+
NoRecords:notApplicableObj(BO.NOT_APPLICABLE__NO_RECORDS),NoVisibleSlots:notApplicableObj(BO.NOT_APPLICABLE__NO_VISIBLE_SLOTS),NoTag:notApplicableObj(BO.NOT_APPLICABLE__NO_TAG),NoTags:notApplicableObj(BO.NOT_APPLICABLE__NO_TAGS),NoTasks:notApplicableObj(BO.NOT_APPLICABLE__NO_TASKS),NoValidAdWidths:notApplicableObj(BO.NOT_APPLICABLE__NO_VALID_AD_WIDTHS)},zO={NoAds:$O(BO.WARNINGS__NO_ADS),NoAdRendered:$O(BO.WARNINGS__NO_AD_RENDERED),NoTag:$O(BO.WARNINGS__NO_TAG)},VO={ViewportAreaZero:$O(BO.ERRORS__VIEWPORT_AREA_ZERO)},WO={Metrics:$O(BO.GROUPS__METRICS),AdsPerformance:$O(BO.GROUPS__ADS_PERFORMANCE),AdsBestPractices:$O(BO.GROUPS__ADS_BEST_PRACTICES)};jO.exports={auditNotApplicable:qO,runWarning:zO,auditError:VO,group:WO},jO.exports.UIStrings=BO,function(e){const t=oi,{group:r}=jO.exports,a="lighthouse-plugin-publisher-ads",n={
|
1107
1104
|
categoryDescription:"A Lighthouse plugin to improve ad speed and overall quality that is targeted at sites using GPT or AdSense tag. [Learn more](https://developers.google.com/publisher-ads-audits/reference)"},i=t.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/plugin.js",n);e.exports={audits:[{path:`${a}/audits/ad-blocking-tasks`},{path:`${a}/audits/ad-render-blocking-resources`},{path:`${a}/audits/ad-request-critical-path`},{path:`${a}/audits/bid-request-from-page-start`},{path:`${a}/audits/ad-request-from-page-start`},{path:`${a}/audits/ad-top-of-viewport`},{path:`${a}/audits/ads-in-viewport`},{path:`${a}/audits/async-ad-tags`},{path:`${a}/audits/blocking-load-events`},{path:`${a}/audits/bottleneck-requests`},{path:`${a}/audits/duplicate-tags`},{path:`${a}/audits/first-ad-render`},{path:`${a}/audits/full-width-slots`},{path:`${a}/audits/gpt-bids-parallel`},{path:`${a}/audits/loads-gpt-from-official-source`},{path:`${a}/audits/loads-ad-tag-over-https`},{
|
1108
1105
|
path:`${a}/audits/script-injected-tags`},{path:`${a}/audits/serial-header-bidding`},{path:`${a}/audits/tag-load-time`},{path:`${a}/audits/viewport-ad-density`},{path:`${a}/audits/cumulative-ad-shift`},{path:`${a}/audits/deprecated-api-usage`},{path:`${a}/audits/gpt-errors-overall`},{path:`${a}/audits/total-ad-blocking-time`}],groups:{metrics:{title:r.Metrics},"ads-performance":{title:r.AdsPerformance},"ads-best-practices":{title:r.AdsBestPractices}},category:{title:"Publisher Ads",description:i(n.categoryDescription),auditRefs:[{id:"tag-load-time",weight:5,group:"metrics"},{id:"bid-request-from-page-start",weight:5,group:"metrics"},{id:"ad-request-from-page-start",weight:25,group:"metrics"},{id:"first-ad-render",weight:10,group:"metrics"},{id:"cumulative-ad-shift",weight:5,group:"metrics"},{id:"total-ad-blocking-time",weight:2,group:"metrics"},{id:"gpt-bids-parallel",weight:1,group:"ads-performance"},{id:"serial-header-bidding",weight:1,group:"ads-performance"},{
|
1109
1106
|
id:"bottleneck-requests",weight:1,group:"ads-performance"},{id:"script-injected-tags",weight:1,group:"ads-performance"},{id:"blocking-load-events",weight:1,group:"ads-performance"},{id:"ad-render-blocking-resources",weight:1,group:"ads-performance"},{id:"ad-blocking-tasks",weight:1,group:"ads-performance"},{id:"ad-request-critical-path",weight:0,group:"ads-performance"},{id:"ads-in-viewport",weight:4,group:"ads-best-practices"},{id:"async-ad-tags",weight:2,group:"ads-best-practices"},{id:"loads-ad-tag-over-https",weight:1,group:"ads-best-practices"},{id:"loads-gpt-from-official-source",weight:4,group:"ads-best-practices"},{id:"viewport-ad-density",weight:2,group:"ads-best-practices"},{id:"ad-top-of-viewport",weight:2,group:"ads-best-practices"},{id:"duplicate-tags",weight:1,group:"ads-best-practices"},{id:"deprecated-gpt-api-usage",weight:0,group:"ads-best-practices"},{id:"gpt-errors-overall",weight:0,group:"ads-best-practices"}]}},Object.defineProperty(e.exports,"UIStrings",{
|
1110
|
-
enumerable:!1,get:()=>n})}(
|
1107
|
+
enumerable:!1,get:()=>n})}(UO);var HO={exports:{}},GO=[{label:"Prebid JS",patterns:["^https?://([^.]*.)?prebid[.]org/.*","^https?://acdn[.]adnxs[.]com/prebid/.*"]},{label:"33Across",patterns:["^https?://ssc[.]33across.com/api/.*"]},{label:"AppNexus",patterns:["^https?://ib[.]adnxs[.]com/.*"]},{label:"Amazon Ads",patterns:["^https?://[a-z-_.]*[.]amazon-adsystem[.]com/.*bid.*"]},{label:"AdTechus (AOL)",patterns:["^https?://([^.]*.)?adserver[.]adtechus[.]com/.*"]},{label:"Aardvark",patterns:["^https?://thor[.]rtk[.]io/.*"]},{label:"AdBlade",patterns:["^https?://rtb[.]adblade[.]com/prebidjs/bid.*"]},{label:"AdBund",patterns:["^https?://us-east-engine[.]adbund[.]xyz/prebid/ad/get.*","^https?://us-west-engine[.]adbund[.]xyz/prebid/ad/get.*"]},{label:"AdButler",patterns:["^https?://servedbyadbutler[.]com/adserve.*"]},{label:"Adequant",patterns:["^https?://rex[.]adequant[.]com/rex/c2s_prebid.*"]},{label:"AdForm",patterns:["^https?://adx[.]adform[.]net/adx.*"]},{label:"AdMedia",
|
1111
1108
|
patterns:["^https?://b[.]admedia[.]com/banner/prebid/bidder.*"]},{label:"AdMixer",patterns:["^https?://inv-nets[.]admixer[.]net/prebid[.]aspx.*","^https?://inv-nets[.]admixer[.]net/videoprebid[.]aspx.*"]},{label:"AOL",patterns:["^https?://adserver-us[.]adtech[.]advertising[.]com.*","^https?://adserver-eu[.]adtech[.]advertising[.]com.*","^https?://adserver-as[.]adtech[.]advertising[.]com.*","^https?://adserver[.]adtech[.]de/pubapi/.*"]},{label:"Beachfront",patterns:["^https?://reachms[.]bfmio[.]com/bid[.]json?exchange_id=.*"]},{label:"Bidfluence",patterns:["^https?://cdn[.]bidfluence[.]com/forge[.]js.*"]},{label:"Brightcom",patterns:["^https?://hb[.]iselephant[.]com/auc/ortb.*"]},{label:"C1x",patterns:["^https?://ht-integration[.]c1exchange[.]com:9000/ht.*"]},{label:"CentroBid",patterns:["^https?://t[.]brand-server[.]com/hb.*"]},{label:"Conversant",patterns:["^https?://media[.]msg[.]dotomi[.]com/s2s/.*"]},{label:"Criteo",
|
1112
1109
|
patterns:["^https?://static[.]criteo[.]net/js/ld/publishertag[.]js.*","^https?://([^.]*.)?bidder[.]criteo[.]com/cdb.*","^https?://([^.]*.)?rtax[.]criteo[.]com/delivery/rta.*","^https?://([^.]*.)?rtax[.]eu[.]criteo[.]com/delivery/rta.*"]},{label:"Datablocks",patterns:["^https?://[a-z0-9_.-]*[.]dblks[.]net/.*"]},{label:"Districtm",patterns:["^https?://prebid[.]districtm[.]ca/lib[.]js.*"]},{label:"E-Planning",patterns:["^https?://ads[.]us[.]e-planning[.]net.*"]},{label:"Essens",patterns:["^https?://bid[.]essrtb[.]com/bid/prebid_call.*"]},{label:"Facebook",patterns:["^https?://an[.]facebook[.]com/v2/placementbid[.]json.*"]},{label:"FeatureForward",patterns:["^https?://prmbdr[.]featureforward[.]com/newbidder/.*"]},{label:"Fidelity",patterns:["^https?://x[.]fidelity-media[.]com.*"]},{label:"GetIntent",patterns:["^https?://px[.]adhigh[.]net/rtb/direct_banner.*","^https?://px[.]adhigh[.]net/rtb/direct_vast.*"]},{label:"GumGum",patterns:["^https?://g2[.]gumgum[.]com/hbid/imp.*"]},{
|
1113
1110
|
label:"Hiromedia",patterns:["^https?://hb-rtb[.]ktdpublishers[.]com/bid/get.*"]},{label:"Imonomy",patterns:["^https?://b[.]imonomy[.]com/openrtb/hb/.*"]},{label:"ImproveDigital",patterns:["^https?://ad[.]360yield[.]com/hb.*"]},{label:"IndexExchange",patterns:["^https?://as(-sec)?[.]casalemedia[.]com/(cygnus|headertag).*","^https?://js(-sec)?[.]indexww[.]com/ht/.*"]},{label:"InnerActive",patterns:["^https?://ad-tag[.]inner-active[.]mobi/simpleM2M/requestJsonAd.*"]},{label:"Innity",patterns:["^https?://as[.]innity[.]com/synd/.*"]},{label:"JCM",patterns:["^https?://media[.]adfrontiers[.]com/pq.*"]},{label:"JustPremium",patterns:["^https?://pre[.]ads[.]justpremium[.]com/v/.*"]},{label:"Kargo",patterns:["^https?://krk[.]kargo[.]com/api/v1/bid.*"]},{label:"Komoona",patterns:["^https?://bidder[.]komoona[.]com/v1/GetSBids.*"]},{label:"KruxLink",patterns:["^https?://link[.]krxd[.]net/hb.*"]},{label:"Kumma",patterns:["^https?://cdn[.]kumma[.]com/pb_ortb[.]js.*"]},{label:"Mantis",
|
1114
1111
|
patterns:["^https?://mantodea[.]mantisadnetwork[.]com/website/prebid.*"]},{label:"MarsMedia",patterns:["^https?://bid306[.]rtbsrv[.]com:9306/bidder.*"]},{label:"Media.net",patterns:["^https?://contextual[.]media[.]net/bidexchange.*"]},{label:"MemeGlobal",patterns:["^https?://stinger[.]memeglobal[.]com/api/v1/services/prebid.*"]},{label:"MobFox",patterns:["^https?://my[.]mobfox[.]com/request[.]php.*"]},{label:"NanoInteractive",patterns:["^https?://tmp[.]audiencemanager[.]de/hb.*"]},{label:"OpenX",patterns:["^https?://([^.]*.)?d[.]openx[.]net/w/1[.]0/arj.*","^https?://([^.]*.)?servedbyopenx[.]com/.*"]},{label:"Piximedia",patterns:["^https?://static[.]adserver[.]pm/prebid.*"]},{label:"Platformio",patterns:["^https?://piohbdisp[.]hb[.]adx1[.]com.*"]},{label:"Pollux",patterns:["^https?://adn[.]plxnt[.]com/prebid.*"]},{label:"PubGears",patterns:["^https?://c[.]pubgears[.]com/tags.*"]},{label:"Pubmatic",
|
1115
1112
|
patterns:["^https?://ads[.]pubmatic[.]com/AdServer/js/gshowad[.]js.*","^https?://([^.]*.)?gads.pubmatic[.]com/.*","^https?://hbopenbid.pubmatic[.]com/.*"]},{label:"Pulsepoint",patterns:["^https?://bid[.]contextweb[.]com/header/tag.*"]},{label:"Quantcast",patterns:["^https?://global[.]qc[.]rtb[.]quantserve[.]com:8080/qchb.*"]},{label:"Rhythmone",patterns:["^https?://tag[.]1rx[.]io/rmp/.*"]},{label:"Roxot",patterns:["^https?://r[.]rxthdr[.]com.*"]},{label:"Rubicon",patterns:["^https?://([^.]*.)?(fastlane|optimized-by|anvil)[.]rubiconproject[.]com/a/api.*","^https?://fastlane-adv[.]rubiconproject[.]com/v1/auction/video.*"]},{label:"Sekindo",patterns:["^https?://hb[.]sekindo[.]com/live/liveView[.]php.*"]},{label:"ShareThrough",patterns:["^https?://btlr[.]sharethrough[.]com/header-bid/.*"]},{label:"Smart AdServer",patterns:["^https?://prg[.]smartadserver[.]com/prebid.*"]},{label:"Sonobi",patterns:["^https?://apex[.]go[.]sonobi[.]com/trinity[.]js.*"]},{label:"Sovrn",
|
1116
1113
|
patterns:["^https?://ap[.]lijit[.]com/rtb/bid.*"]},{label:"SpringServe",patterns:["^https?://bidder[.]springserve[.]com/display/hbid.*"]},{label:"StickyAds",patterns:["^https?://cdn[.]stickyadstv[.]com/mustang/mustang[.]min[.]js.*","^https?://cdn[.]stickyadstv[.]com/prime-time/.*"]},{label:"TapSense3",patterns:["^https?://ads04[.]tapsense[.]com/ads/headerad.*"]},{label:"ThoughtLeadr",patterns:["^https?://a[.]thoughtleadr[.]com/v4/.*"]},{label:"TremorBid",patterns:["^https?://([^.]*.)?ads[.]tremorhub[.]com/ad/tag.*"]},{label:"Trion",patterns:["^https?://in-appadvertising[.]com/api/bidRequest.*"]},{label:"TripleLift",patterns:["^https?://tlx[.]3lift[.]com/header/auction.*"]},{label:"TrustX",patterns:["^https?://sofia[.]trustx[.]org/hb.*"]},{label:"UCFunnel",patterns:["^https?://agent[.]aralego[.]com/header.*"]},{label:"Underdog Media",patterns:["^https?://udmserve[.]net/udm/img[.]fetch.*"]},{label:"UnRuly",patterns:["^https?://targeting[.]unrulymedia[.]com/prebid.*"]},{
|
1117
|
-
label:"VertaMedia",patterns:["^https?://rtb[.]vertamedia[.]com/hb/.*"]},{label:"Vertoz",patterns:["^https?://hb[.]vrtzads[.]com/vzhbidder/bid.*"]},{label:"WideOrbig",patterns:["^https?://([^.]*.)?atemda[.]com/JSAdservingMP[.]ashx.*"]},{label:"WideSpace",patterns:["^https?://engine[.]widespace[.]com/map/engine/hb/.*"]},{label:"YieldBot",patterns:["^https?://cdn[.]yldbt[.]com/js/yieldbot[.]intent[.]js.*"]},{label:"YieldMo",patterns:["^https?://ads[.]yieldmo[.]com/exchange/prebid.*"]}];const
|
1118
|
-
this.maxStale=null,this.maxStaleDuration=null,this.minFresh=null,this.immutable=null,this.mustRevalidate=null,this.noCache=null,this.noStore=null,this.noTransform=null,this.onlyIfCached=null,this.private=null,this.proxyRevalidate=null,this.public=null}parse(e){if(!e||0===e.length)return this;const t={},r=e.match(
|
1119
|
-
this.proxyRevalidate=parseBooleanOnly(t[
|
1120
|
-
;return(e.responseHeaders||[]).find((e=>e.name.toLowerCase()===r))}var
|
1121
|
-
return isAdSenseTag(e=toURL$2(e))||isAdSenseImplTag(e)}function isAdSenseAdRequest(e){if(!e)return!1;const t=new
|
1122
|
-
if(!e)return!1;return"/gampad/ads"===new
|
1123
|
-
isAdSenseImplTag,isAdSenseAdRequest,isAdSenseIframe,isGptTag:isGptTag$2,isGptImplTag:isGptImplTag$4,isGptIframe:isGptIframe$1,isAdTag:function isAdTag$3(e){return isAdSenseTag(e)||isGptTag$2(e)||isAMPTag(e)},isAdScript:isAdScript$2,isAdRequest:function isAdRequest$5(e){return isAdSenseAdRequest(e)||isGptAdRequest$1(e)||isAMPAdRequest(e)},isAdIframe:function isAdIframe$3(e){return isAdSenseIframe(e)||isGptIframe$1(e)},isImplTag:function isImplTag$3(e){return isAdSenseTag(e)||isGptImplTag$4(e)||isAMPImplTag(e)},containsAnySubstring:function containsAnySubstring$1(e,t){return t.some((t=>e.includes(t)))},hasImpressionPath:function hasImpressionPath(e){return"/pcs/view"===e.pathname||"/pagead/adview"===e.pathname},getHeaderBidder:getHeaderBidder$2,isBidRelatedRequest:isBidRelatedRequest$1,isBidRequest:function isBidRequest$4(e){return isBidRelatedRequest$1(e)&&function isPossibleBidRequest(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&!
|
1124
|
-
isStaticRequest:function isStaticRequest$1(e){return["parser","preload","other"].includes(e.initiator.type)},toURL:toURL$2,trimUrl:function trimUrl$1(e){const t=new
|
1125
|
-
function isAdTask(e){return!!function getCpuNodeUrls(e){const t=new Set;for(const{args:r}of e.childEvents)r.data&&r.data.url&&t.add(r.data.url);return Array.from(t)}(e).find((e=>
|
1126
|
-
const t=e.record.frameId,r=AdLanternMetric$6.getPessimisticGraph(e),a=r.cloneWithRelationships((e=>{if(e.type===
|
1127
|
-
const a=new Map,n=await
|
1128
|
-
getBidStartTime:function getBidStartTime$1(e){const t=e.find(
|
1129
|
-
;class LanternAdRequestTime extends
|
1130
|
-
static async getSimulationGraph(e,t,r){const a=await
|
1131
|
-
return"simulate"==r.settings.throttlingMethod?this.computeSimulatedResult(e,t,r):this.computeObservedResult(e,t,r)}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var
|
1132
|
-
columnScript:"Attributable URL",columnStartTime:"Start",columnDuration:"Duration"},
|
1133
|
-
if(e.startTime>i||e.duration<r)continue;const t=
|
1134
|
-
description:"Render-blocking resources slow down tag load times. Consider loading critical JS/CSS inline or loading scripts asynchronously or loading the tag earlier in the head. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).",failureDisplayValue:"Up to {timeInMs, number, seconds} s tag load time improvement",columnUrl:"Resource",columnStartTime:"Start",columnDuration:"Duration"},
|
1135
|
-
requiredArtifacts:["LinkElements","ScriptElements","devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[
|
1136
|
-
...AdRenderBlockingResources.makeTableDetails(
|
1137
|
-
;for(let n=t.initiator.stack;n;n=n.parent)for(const{url:i}of n.callFrames){if(a.has(i))continue;a.add(i);const o=e.requestsByUrl.get(i);if(o&&(linkGraph(e,o,r),"Script"==o.resourceType)){const a=n.callFrames[0].url,i=e.requestsByUrl.get(a);i&&addInitiatedRequests(i,t,e,r)}}return linkGraph(e,t.initiatorRequest||null,r),r}function buildNetworkSummary(e,t){const r=new Map;for(const t of e)r.set(t.url,t);const a=t.filter((e=>e.name.startsWith("XHR"))).filter((e=>!!(e.args.data||{}).url)),n=new Map;for(const e of a){const t=e.args.data||{},r=n.get(t.url)||new Set;for(const{url:e}of t.stackTrace||[])r.add(e);n.set(t.url,r)}return{requestsByUrl:r,xhrEdges:n,allRecords:e}}var
|
1138
|
-
const e=o.pop();e&&!r.has(e)&&(r.add(e),o.push(...e.getDependencies()))}const s=new Set;for(o.push(...e.getDependents());o.length;){const e=o.pop();if(e&&!s.has(e)){if(s.add(e),r.has(e))for(const e of o)r.add(e);o.push(...e.getDependents())}}for(const e of r)e.type===
|
1139
|
-
;const u=new Set(["Script","XHR","Fetch","EventStream","Document",void 0]),d=Array.from(i).filter((e=>e.endTime<o.startTime)).filter((e=>u.has(e.resourceType))).filter((e=>"text/css"!=e.mimeType)),m=await
|
1140
|
-
;return function computeSelfTimes(e){if(!e.length)return[];let t=
|
1141
|
-
},
|
1142
|
-
;const s=function computeIdleTimes(e){let t=1/0;const r=[];for(let a=0;a<e.length;){const{startTime:n,endTime:i}=e[a];for(n-t>150&&r.push(n-t),t=i;++a<e.length&&e[a].startTime<t;)t=Math.max(t,e[a].endTime)}return r}(n),c=Math.max(...s),l=s.reduce(((e,t)=>e+t),0);return{numericValue:i,numericUnit:"unitless",score:o?0:1,displayValue:
|
1143
|
-
;class BidRequestTime extends
|
1144
|
-
},rj
|
1145
|
-
;const
|
1146
|
-
p10:6500,median:1e4},provided:{p10:1900,median:3500}}}static async audit(e,t){const r={trace:e.traces[
|
1147
|
-
description:"Over 10% of ads are never viewed because users scroll past them before they become viewable. By moving ad slots away from the very top of the viewport, users are more likely to see ads before scrolling away. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-top-of-viewport).",failureDisplayValue:"A scroll of {valueInPx, number} px would hide half of your topmost ad",columnSlot:"Top Slot ID"},
|
1148
|
-
midpoint:e.clientRect.top+e.clientRect.height/2,id:e.id})));if(!r.length)return
|
1149
|
-
const r=!(e.right<t.left||t.right<e.left),a=!(e.bottom<t.top||t.bottom<e.top);return r&&a},toClientRect:function toClientRect$1([e,t,r,a]){return{left:e,top:t,width:r,height:a,right:e+r,bottom:t+a}}};const{auditNotApplicable:
|
1150
|
-
},Rj
|
1151
|
-
;for(const a of e)t(a)&&r++;return r},bucket:function bucket$1(e,t){const r=new Map;for(const a of e){const e=t(a);if(null!=e){const t=r.get(e)||[];t.push(a),r.set(e,t)}}return r},flatten:function flatten(e){const t=[];for(const r of e)t.push(...r);return t}};const
|
1152
|
-
id:"async-ad-tags",title
|
1153
|
-
failureTitle:"Avoid waiting on load events",description:"Waiting on load events increases ad latency. To speed up ads, eliminate the following load event handlers. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/blocking-load-events).",displayValue:"{timeInMs, number, seconds} s blocked",columnEvent:"Event Name",columnTime:"Event Time",columnScript:"Script",columnBlockedUrl:"Blocked URL",columnFunctionName:"Function"},
|
1154
|
-
function findTraceEventOfCallFrame(e,t){return t.find((t=>"FunctionCall"==t.name&&t.args.data&&t.args.data.functionName==e.functionName&&t.args.data.scriptId==e.scriptId&&t.args.data.url==e.url&&Math.abs(t.args.data.lineNumber==e.lineNumber)<2&&Math.abs(t.args.data.columnNumber==e.columnNumber)<2))}function findEventIntervals(e,t){let r={};const a=[];for(const n of t)n.name==`${e}EventStart`?r={start:n.ts,end:1/0,eventName:e}:n.name==`${e}EventEnd`&&(r.end=n.ts,a.push(r));return a}function quantifyBlockedTime(e,t,r){const a=t.find((t=>t.url==e.url)),n=t.find((t=>t.url==e.blockedUrl));if(!a||!n)return 0;const i=r.get(a),o=r.get(n);return i&&o?o.startTime-i.endTime:0}class BlockingLoadEvents extends
|
1155
|
-
const r=e.traces[
|
1156
|
-
|
1157
|
-
key:"duration",itemType:"ms",text:
|
1158
|
-
;const
|
1159
|
-
itemType:"text",text:
|
1160
|
-
;const
|
1161
|
-
description:"This metric measures the time for the first ad iframe to render from page navigation. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/first-ad-render).",displayValue:"{timeInMs, number, seconds} s"},
|
1162
|
-
const i=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"];return{numericValue:n,numericUnit:"millisecond",score:
|
1163
|
-
failureTitle:
|
1164
|
-
description:"To optimize ad loading, bid requests should not wait on GPT to load. This issue can often be fixed by making sure that bid requests do not wait on `googletag.pubadsReady` or `googletag.cmd.push`. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-bids-parallel).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},
|
1165
|
-
;const o=n.filter(
|
1166
|
-
},
|
1167
|
-
description:'For privacy and security, always load GPT/AdSense over HTTPS. Insecure pages should explicitly request the ad script securely. GPT Example: `<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">` AdSense Example: `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">`. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-ad-tag-over-https).'},
|
1168
|
-
type:"debugdata",numAdTagHttpReqs:n.length-i.length,numAdTagHttpsReqs:i.length};if(!n.length){const e=
|
1169
|
-
},
|
1170
|
-
const r=await async function findStaticallyLoadableTags(e,t){const r=e.devtoolsLogs[
|
1171
|
-
;const
|
1172
|
-
return
|
1173
|
-
;e&&a.push(Object.assign({},e,{url:n.url,type:t}))}return a}(s.get(
|
1174
|
-
static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=
|
1175
|
-
scoreDisplayMode:
|
1176
|
-
description:"The ads to page-height ratio can impact user experience and ultimately user retention. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/viewport-ad-density).",displayValue:"{adDensity, number, percent} ads to page-height ratio"},
|
1177
|
-
const r=new Set([...e.map((e=>e.clientRect.left)),...e.map((e=>e.clientRect.right))].map((e=>Math.min(Math.max(1,e),t.innerWidth-1))));e=e.sort(((e,t)=>e.clientRect.top!==t.clientRect.top?e.clientRect.top-t.clientRect.top:e.clientRect.bottom-t.clientRect.bottom));let a=0;for(const t of r){let r=0,n=0;for(const a of e){if(t<a.clientRect.left||t>a.clientRect.right)continue;if(a.isPositionFixed){r+=a.clientRect.height;continue}const e=a.clientRect.bottom-Math.max(n,a.clientRect.top);e>0&&(r+=e),n=Math.max(n,a.clientRect.bottom)}a=Math.max(a,r)}return a}(r,t),n=Math.max(...r.map((e=>e.clientRect.top+e.clientRect.height/2)))+t.innerHeight,i=Math.min(1,a/n);return{score:i>.3?0:1,numericValue:i,numericUnit:"unitless",displayValue:
|
1178
|
-
title:"Cumulative ad shift",failureTitle:"Reduce ad-related layout shift",description:"Measures layout shifts that were caused by ads or happened near ads. Reducing cumulative ad-related layout shift will improve user experience. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/cumulative-ad-shift)."},
|
1179
|
-
const t=r.clientRect;if((e.top>=t.top||a.top>=t.bottom)&&
|
1180
|
-
const r=e.traces[
|
1181
|
-
displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},
|
1182
|
-
key:"description",itemType:"code",text:
|
1183
|
-
requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[
|
1184
|
-
title:"Total ad JS blocking time",failureTitle:"Reduce ad JS blocking time",description:"Ad-related scripts are blocking the main thread. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/total-ad-blocking-time).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnName:"Name",columnBlockingTime:"Blocking Time"},
|
1185
|
-
const r=e.traces[
|
1186
|
-
if(globalThis.isDevtools||globalThis.isLightrider)return!0;try{return require.resolve("lighthouse-logger"),!1}catch(e){return!0}}const mergeOptionsOfItems=function(e){const t=[];for(const r of e){const e=r.path&&t.find((e=>e.path===r.path));e?e.options=Object.assign({},e.options,r.options):t.push(r)}return t};const
|
1187
|
-
;const
|
1114
|
+
label:"VertaMedia",patterns:["^https?://rtb[.]vertamedia[.]com/hb/.*"]},{label:"Vertoz",patterns:["^https?://hb[.]vrtzads[.]com/vzhbidder/bid.*"]},{label:"WideOrbig",patterns:["^https?://([^.]*.)?atemda[.]com/JSAdservingMP[.]ashx.*"]},{label:"WideSpace",patterns:["^https?://engine[.]widespace[.]com/map/engine/hb/.*"]},{label:"YieldBot",patterns:["^https?://cdn[.]yldbt[.]com/js/yieldbot[.]intent[.]js.*"]},{label:"YieldMo",patterns:["^https?://ads[.]yieldmo[.]com/exchange/prebid.*"]}];const YO=/([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?/g,KO="max-age",JO="s-maxage",XO="max-stale",ZO="min-fresh",QO="immutable",eF="must-revalidate",tF="no-cache",rF="no-store",aF="no-transform",nF="only-if-cached",iF="private",oF="proxy-revalidate",sF="public";function parseBooleanOnly(e){return null===e}function parseDuration(e){if(!e)return null;const t=parseInt(e,10);return!Number.isFinite(t)||t<0?null:t}class CacheControl{constructor(){this.maxAge=null,this.sharedMaxAge=null,
|
1115
|
+
this.maxStale=null,this.maxStaleDuration=null,this.minFresh=null,this.immutable=null,this.mustRevalidate=null,this.noCache=null,this.noStore=null,this.noTransform=null,this.onlyIfCached=null,this.private=null,this.proxyRevalidate=null,this.public=null}parse(e){if(!e||0===e.length)return this;const t={},r=e.match(YO)||[];return Array.prototype.forEach.call(r,(e=>{const r=e.split("=",2),[a]=r;let n=null;r.length>1&&(n=r[1].trim()),t[a.toLowerCase()]=n})),this.maxAge=parseDuration(t[KO]),this.sharedMaxAge=parseDuration(t[JO]),this.maxStale=parseBooleanOnly(t[XO]),this.maxStaleDuration=parseDuration(t[XO]),this.maxStaleDuration&&(this.maxStale=!0),this.minFresh=parseDuration(t[ZO]),this.immutable=parseBooleanOnly(t[QO]),this.mustRevalidate=parseBooleanOnly(t[eF]),this.noCache=parseBooleanOnly(t[tF]),this.noStore=parseBooleanOnly(t[rF]),this.noTransform=parseBooleanOnly(t[aF]),this.onlyIfCached=parseBooleanOnly(t[nF]),this.private=parseBooleanOnly(t[iF]),
|
1116
|
+
this.proxyRevalidate=parseBooleanOnly(t[oF]),this.public=parseBooleanOnly(t[sF]),this}format(){const e=[];return"number"==typeof this.maxAge&&e.push(`${KO}=${this.maxAge}`),"number"==typeof this.sharedMaxAge&&e.push(`${JO}=${this.sharedMaxAge}`),this.maxStale&&("number"==typeof this.maxStaleDuration?e.push(`${XO}=${this.maxStaleDuration}`):e.push(XO)),"number"==typeof this.minFresh&&e.push(`${ZO}=${this.minFresh}`),this.immutable&&e.push(QO),this.mustRevalidate&&e.push(eF),this.noCache&&e.push(tF),this.noStore&&e.push(rF),this.noTransform&&e.push(aF),this.onlyIfCached&&e.push(nF),this.private&&e.push(iF),this.proxyRevalidate&&e.push(oF),this.public&&e.push(sF),e.join(", ")}}var cF={CacheControl,parse:function parse(e){return(new CacheControl).parse(e)},format:function format$2(e){return e instanceof CacheControl?e.format():CacheControl.prototype.format.call(e)}};const lF=QS.exports,{parse:uF}=cF;function getHeader(e,t){const r=t.toLowerCase()
|
1117
|
+
;return(e.responseHeaders||[]).find((e=>e.name.toLowerCase()===r))}var dF={isCacheable:function isCacheable$2(e){if(!lF.isCacheableAsset(e))return!1;const t=getHeader(e,"cache-control");if(t){try{const e=uF(t.value);if(e.noStore||e.noCache||0===e.maxAge)return!1}catch(e){}return!0}return!!getHeader(e,"expires")||!!getHeader(e,"last-modified")}};const mF=GO,pF=uw,{isCacheable:hF}=dF,{URL:gF}=Hn;function toURL$2(e){let t;try{t="string"==typeof e?new gF(e):e}catch(e){t=new gF("http://_")}return t}function isGoogleAds$2(e){return e=toURL$2(e),/(^|\.)(doubleclick.net|google(syndication|tagservices).com)$/.test(e.hostname)}function isAdSenseTag(e){const t="pagead2.googlesyndication.com"===(e=toURL$2(e)).host,r=["/pagead/js/adsbygoogle.js","/pagead/show_ads.js"].includes(e.pathname);return t&&r}function isAdSenseImplTag(e){const t="pagead2.googlesyndication.com"===(e=toURL$2(e)).host,r=/(^\/pagead\/js\/.*\/show_ads_impl.*?\.js)/.test(e.pathname);return t&&r}function isAdSense$1(e){
|
1118
|
+
return isAdSenseTag(e=toURL$2(e))||isAdSenseImplTag(e)}function isAdSenseAdRequest(e){if(!e)return!1;const t=new gF(e.url);return"/pagead/ads"===t.pathname&&"googleads.g.doubleclick.net"===t.host}function isAdSenseIframe(e){return/(^aswift_\d+)/.test(e.id)}function isGptTag$2(e){const{host:t,pathname:r}=toURL$2(e),a=["www.googletagservices.com","pagead2.googlesyndication.com","securepubads.g.doubleclick.net"].includes(t),n=["/tag/js/gpt.js","/tag/js/gpt_mobile.js"].includes(r);return a&&n}function isAMPTag(e){const{host:t,pathname:r}=toURL$2(e),a=["cdn.ampproject.org"].includes(t),n=["/v0/amp-ad-0.1.js"].includes(r);return a&&n}function isGptImplTag$4(e){return isGoogleAds$2(e)&&/(^\/gpt\/pubads_impl([a-z_]*)((?<!rendering)_)\d+\.js)/.test(toURL$2(e).pathname)}function isAMPImplTag(e){return/^\/[a-z_]*\/\d+\/v0\/amp-ad-network-doubleclick-impl-0.1.js/.test(toURL$2(e).pathname)}function isGpt$3(e){return isGptTag$2(e=toURL$2(e))||isGptImplTag$4(e)}function isGptAdRequest$1(e){
|
1119
|
+
if(!e)return!1;return"/gampad/ads"===new gF(e.url).pathname&&"XHR"===e.resourceType&&isGoogleAds$2(e.url)}function isAMPAdRequest(e){if(!e)return!1;const t=new gF(e.url);return"/gampad/ads"===t.pathname&&"securepubads.g.doubleclick.net"===t.host&&"Fetch"===e.resourceType}function isGptIframe$1(e){return/(^google_ads_iframe_)/.test(e.id)}function isAdScript$2(e){return isAdSense$1(e)||isGpt$3(e)||function isAMP(e){return isAMPTag(e)||isAMPImplTag(e)}(e)}function getHeaderBidder$2(e){for(const t of mF)for(const r of t.patterns)if(new RegExp(r).test(e))return t.label}function isBidRelatedRequest$1(e){return!!getHeaderBidder$2("string"==typeof e?e:e.url)}var fF={isGoogleAds:isGoogleAds$2,isGptAdRequest:isGptAdRequest$1,isImpressionPing:function isImpressionPing$3(e){const{host:t,pathname:r}=toURL$2(e);return["securepubads.g.doubleclick.net","googleads4.g.doubleclick.net"].includes(t)&&["/pcs/view","/pagead/adview"].includes(r)},isGpt:isGpt$3,isAdSense:isAdSense$1,isAdSenseTag,
|
1120
|
+
isAdSenseImplTag,isAdSenseAdRequest,isAdSenseIframe,isGptTag:isGptTag$2,isGptImplTag:isGptImplTag$4,isGptIframe:isGptIframe$1,isAdTag:function isAdTag$3(e){return isAdSenseTag(e)||isGptTag$2(e)||isAMPTag(e)},isAdScript:isAdScript$2,isAdRequest:function isAdRequest$5(e){return isAdSenseAdRequest(e)||isGptAdRequest$1(e)||isAMPAdRequest(e)},isAdIframe:function isAdIframe$3(e){return isAdSenseIframe(e)||isGptIframe$1(e)},isImplTag:function isImplTag$3(e){return isAdSenseTag(e)||isGptImplTag$4(e)||isAMPImplTag(e)},containsAnySubstring:function containsAnySubstring$1(e,t){return t.some((t=>e.includes(t)))},hasImpressionPath:function hasImpressionPath(e){return"/pcs/view"===e.pathname||"/pagead/adview"===e.pathname},getHeaderBidder:getHeaderBidder$2,isBidRelatedRequest:isBidRelatedRequest$1,isBidRequest:function isBidRequest$4(e){return isBidRelatedRequest$1(e)&&function isPossibleBidRequest(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&!hF(e)}(e)},
|
1121
|
+
isStaticRequest:function isStaticRequest$1(e){return["parser","preload","other"].includes(e.initiator.type)},toURL:toURL$2,trimUrl:function trimUrl$1(e){const t=new gF(e),r=t.pathname.length>60?t.pathname.substr(0,60)+"...":t.pathname;return t.origin+r},getNameOrTld:function getNameOrTld$2(e){const t=getHeaderBidder$2(e);if(t)return t;if(isGpt$3(e))return"GPT";if(isAdSense$1(e))return"AdSense";if(isAMPTag(e))return"AMP tag";const r=pF.getEntity(e);if(r)return r.name;const{host:a}=new gF(e),[n=""]=a.match(/([^.]*(\.[a-z]{2,3}){1,2})$/)||[];return n||a},isAMPTag,isAMPAdRequest,isAdRelated:function isAdRelated$3(e){const t="string"==typeof e?e:e.url;if(isAdScript$2(t)||getHeaderBidder$2(t))return!0;const r=pF.getEntity(t);return!!r&&r.categories.includes("ad")}};const yF=Zc,vF=sb,{isBidRelatedRequest:bF,isImpressionPing:wF,isGoogleAds:SF,isGptAdRequest:TF,isGptTag:EF,isGptImplTag:xF,toURL:_F}=fF;function getFrame(e){return e.args.frame||e.args.data&&e.args.data.frame||null}
|
1122
|
+
function isAdTask(e){return!!function getCpuNodeUrls(e){const t=new Set;for(const{args:r}of e.childEvents)r.data&&r.data.url&&t.add(r.data.url);return Array.from(t)}(e).find((e=>bF(e)||SF(_F(e))))}function addEdge(e,t){e===t||e.endTime>t.startTime||e.addDependent(t)}function addEdges(e){const t=[],r=[];e.traverse((e=>{e.type===yF.TYPES.NETWORK&&(EF(e.record.url)&&"Script"===e.record.resourceType?r.push(e):TF(e.record)&&t.push(e))})),e.traverse((e=>{if(e.type===yF.TYPES.NETWORK){if(xF(e.record.url)){const t=e;for(const e of r)addEdge(e,t)}if(bF(e.record)){const r=e;for(const e of t)addEdge(r,e)}if(wF(e.record.url)){const r=e;for(const e of t){addEdge(e,r);for(const t of e.getDependents())addEdge(t,r)}}}}))}class AdLanternMetric$6 extends vF{static get COEFFICIENTS(){return{intercept:0,optimistic:1,pessimistic:0}}static getPessimisticGraph(e){const t=e.cloneWithRelationships((e=>!0));return addEdges(t),t}static getOptimisticGraph(e){
|
1123
|
+
const t=e.record.frameId,r=AdLanternMetric$6.getPessimisticGraph(e),a=r.cloneWithRelationships((e=>{if(e.type===yF.TYPES.CPU)return function isLongTask(e){return e.event.dur>5e4}(e)||isAdTask(e)||!!getFrame(e.event)&&getFrame(e.event)!==t;if(e.hasRenderBlockingPriority())return!0;const r=e.record.url;return bF(r)||SF(_F(r))}));return addEdges(r),a}static getEstimateFromSimulation(e,t){throw new Error("getEstimateFromSimulation not implemented by "+this.name)}static findTiming(e,t){let r={startTime:1/0,endTime:-1/0,duration:0};for(const[a,n]of e.entries())t(a,n)&&r.startTime>n.startTime&&(r=n);return r}static findNetworkTiming(e,t){return this.findTiming(e,(e=>e.type===yF.TYPES.NETWORK&&t(e.record)))}}var AF=AdLanternMetric$6;const RF=AF,kF=Dl,DF=Lo,CF=eb,{isAdRequest:IF,isBidRequest:NF,isImplTag:LF,isImpressionPing:MF}=fF,{URL:PF}=Hn;function getPageStartTime$4(e,t=-1){const r=e.find((e=>200==e.statusCode));return r?r.startTime:t}async function getTimingsByRecord$5(e,t,r){
|
1124
|
+
const a=new Map,n=await DF.request(t,r);if("simulate"==r.settings.throttlingMethod){const n=await CF.request({trace:e,devtoolsLog:t},r),i=RF.getOptimisticGraph(n),o=await kF.request({devtoolsLog:t,settings:r.settings},r),{nodeTimings:s}=o.simulate(i,{});for(const[{record:e},t]of s.entries())e&&a.set(e,t)}else{const e=getPageStartTime$4(n);for(const t of n)a.set(t,{startTime:1e3*(t.startTime-e),endTime:1e3*(t.endTime-e),duration:1e3*(t.endTime-t.startTime)})}return a}function getScriptUrl$1(e){if(e.args.data&&["EvaluateScript","FunctionCall"].includes(e.name))return e.args.data.url?e.args.data.url:e.args.data.stackTrace?e.args.data.stackTrace[0].url:void 0}var OF={getTagEndTime:function getTagEndTime$1(e){const t=e.find((e=>LF(new PF(e.url))));return t?t.endTime:-1},getImpressionStartTime:function getImpressionStartTime$1(e){const t=e.find((e=>MF(e.url)));return t?t.startTime:-1},getAdStartTime:function getAdStartTime$2(e){const t=e.find(IF);return t?t.startTime:-1},
|
1125
|
+
getBidStartTime:function getBidStartTime$1(e){const t=e.find(NF);return t?t.startTime:-1},getPageStartTime:getPageStartTime$4,getPageResponseTime:function getPageResponseTime(e,t=-1){const r=e.find((e=>200==e.statusCode));return r?r.responseReceivedTime:t},getScriptUrl:getScriptUrl$1,getTimingsByRecord:getTimingsByRecord$5,getScriptEvaluationTimes:async function getScriptEvaluationTimes$1(e,t,r){const a=1e3*getPageStartTime$4(await DF.request(t,r)),n=new Map;for(const t of e.traceEvents){const e=getScriptUrl$1(t);if(!e)continue;const r=t.ts/1e3-a;(!n.has(e)||n.get(e)>r)&&n.set(e,r)}if("simulate"!==r.settings.throttlingMethod)return n;const i=await getTimingsByRecord$5(e,t,r),o=new Map;for(const[e,t]of i.entries()){const i=n.get(e.url);if(!i)continue;if(o.has(e.url))continue;const s=1e3*e.startTime-a,c=t.endTime,l=r.settings.throttling.cpuSlowdownMultiplier*(i-s);o.set(e.url,c+l)}return o}};const FF=AF,UF=Ew,jF=Ao,{getAdStartTime:BF,getPageStartTime:$F}=OF,{isAdRequest:qF}=fF
|
1126
|
+
;class LanternAdRequestTime extends FF{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:FF.findNetworkTiming(r,qF).startTime,nodeTimings:r}}}LanternAdRequestTime=jF(LanternAdRequestTime);class AdRequestTime$1 extends UF{static async computeSimulatedMetric(e,t){return LanternAdRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,r=$F(t),a=1e3*(BF(t)-r);return Promise.resolve({timing:a})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var zF=AdRequestTime$1=jF(AdRequestTime$1);var VF={getAttributableUrl:function getAttributableUrl$3(e,t=new Set){const r=e.attributableURLs.find((e=>t.has(e))),a=e.attributableURLs[0],n=r||a;if(n)return n;let i=50,o="";for(const r of e.children){const e=getAttributableUrl$3(r,t);e&&r.duration>i&&(o=e,i=r.duration)}return o}};const WF=AF,HF=Zc,GF=Ew,{getAttributableUrl:YF}=VF,KF=Dl,JF=Rv,XF=Ao,ZF=Lo,QF=eb;class LongTasks$2 extends GF{
|
1127
|
+
static async getSimulationGraph(e,t,r){const a=await QF.request({trace:e,devtoolsLog:t},r);return WF.getOptimisticGraph(a)}static async computeSimulatedResult(e,t,r){const a=await this.getSimulationGraph(e,t,r),n=await KF.request({devtoolsLog:t,settings:r.settings},r),{nodeTimings:i}=n.simulate(a,{}),o=[];for(const[e,t]of i.entries())e.type!==HF.TYPES.CPU||t.duration<100||o.push({event:e.event,startTime:t.startTime,endTime:t.endTime,duration:t.duration,selfTime:t.duration,attributableURLs:Array.from(e.getEvaluateScriptURLs()),children:[],parent:e.parent,unbounded:e.unbounded,group:e.group});return o}static async computeObservedResult(e,t,r){const a=await JF.request(e,r),n=await ZF.request(t,r),i=new Set(n.filter((e=>"Script"===e.resourceType)).map((e=>e.url)));return a.filter((e=>function isLong(e,t){if(e.duration<50)return!1;const r=YF(e,t);if(!r)return!1;if(e.parent)return r!=YF(e.parent,t);return!0}(e,i)))}static async compute_({trace:e,devtoolsLog:t},r){
|
1128
|
+
return"simulate"==r.settings.throttlingMethod?this.computeSimulatedResult(e,t,r):this.computeObservedResult(e,t,r)}static async request(e,t){throw Error("Not implemented -- class not decorated")}}var eU=LongTasks$2=XF(LongTasks$2),tU=getAugmentedNamespace(Object.freeze({__proto__:null,Audit:kc}));const rU=zF,aU=oi,nU=eU,{auditNotApplicable:iU}=jO.exports,{Audit:oU}=tU,{getAttributableUrl:sU}=VF,{isAdScript:cU}=fF,{URL:lU}=Hn,uU={title:"No long tasks blocking ad-related network requests",failureTitle:"Avoid long tasks that block ad-related network requests",description:"Tasks blocking the main thread can delay ad requests and cause a poor user experience. Consider removing long blocking tasks or moving them off of the main thread. These tasks can be especially detrimental to performance on less powerful devices. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-blocking-tasks).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",
|
1129
|
+
columnScript:"Attributable URL",columnStartTime:"Start",columnDuration:"Duration"},dU=aU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks.js",uU),mU=[{key:"script",itemType:"url",text:dU(uU.columnScript)},{key:"startTime",itemType:"ms",text:dU(uU.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:dU(uU.columnDuration),granularity:1}];class AdBlockingTasks extends oU{static get meta(){return{id:"ad-blocking-tasks",title:dU(uU.title),failureTitle:dU(uU.failureTitle),description:dU(uU.description),requiredArtifacts:["traces","devtoolsLogs"]}}static async audit(e,t){const r="simulate"==t.settings.throttlingMethod?200:100,a={trace:e.traces[oU.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[oU.DEFAULT_PASS],settings:t.settings};let n=[];try{n=await nU.request(a,t)}catch(e){return iU.InvalidTiming}if(!n.length)return iU.NoTasks;const{timing:i}=await rU.request(a,t);if(!(i>0))return iU.NoAdRelatedReq;const o=[];for(const e of n){
|
1130
|
+
if(e.startTime>i||e.duration<r)continue;const t=sU(e);if(t&&cU(new lU(t)))continue;const a=t&&new lU(t),n=a&&a.origin+a.pathname||"Other";o.push({script:n,rawUrl:t,startTime:e.startTime,endTime:e.endTime,duration:e.duration,isTopLevel:!e.parent})}let s=Array.from(o);s.length>10&&(s=o.filter((e=>"Other"!==e.script&&e.isTopLevel)).sort(((e,t)=>t.duration-e.duration)).splice(0,10).sort(((e,t)=>e.startTime-t.startTime)));const c=s.reduce(((e,t)=>t.isTopLevel?e+t.duration:e),0),l=s.length>0;return{score:l?0:1,numericValue:c,numericUnit:"millisecond",displayValue:l?dU(uU.failureDisplayValue,{timeInMs:c}):"",details:AdBlockingTasks.makeTableDetails(mU,s)}}}HO.exports=AdBlockingTasks,HO.exports.UIStrings=uU;var pU={exports:{}};const hU=oi,gU=Lo,{auditNotApplicable:fU}=jO.exports,{Audit:yU}=tU,{getTimingsByRecord:vU}=OF,{isAdTag:bU}=fF,{URL:wU}=Hn,SU={title:"Minimal render-blocking resources found",failureTitle:"Avoid render-blocking resources",
|
1131
|
+
description:"Render-blocking resources slow down tag load times. Consider loading critical JS/CSS inline or loading scripts asynchronously or loading the tag earlier in the head. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/blocking-resources).",failureDisplayValue:"Up to {timeInMs, number, seconds} s tag load time improvement",columnUrl:"Resource",columnStartTime:"Start",columnDuration:"Duration"},TU=hU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources.js",SU),EU=[{key:"url",itemType:"url",text:TU(SU.columnUrl)},{key:"startTime",itemType:"ms",text:TU(SU.columnStartTime),granularity:1},{key:"duration",itemType:"ms",text:TU(SU.columnDuration),granularity:1}];class AdRenderBlockingResources extends yU{static get meta(){return{id:"ad-render-blocking-resources",title:TU(SU.title),failureTitle:TU(SU.failureTitle),scoreDisplayMode:"binary",description:TU(SU.description),
|
1132
|
+
requiredArtifacts:["LinkElements","ScriptElements","devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[yU.DEFAULT_PASS],a=e.traces[yU.DEFAULT_PASS],n=await gU.request(r,t),i=n.find((e=>bU(new wU(e.url))));if(!i)return fU.NoTag;const o=await vU(a,r,t),s=new Set;for(const t of e.LinkElements)t.href&&"stylesheet"==t.rel&&s.add(t.href);for(const t of e.ScriptElements)!t.src||t.defer||t.async||s.add(t.src);const c=n.filter((e=>e.endTime<i.startTime)).filter((e=>e!=i.initiatorRequest)).filter((e=>e.initiator.type="parser")).filter((e=>s.has(e.url))).map((e=>Object.assign({url:e.url},o.get(e))));c.sort(((e,t)=>e.endTime-t.endTime));const l=o.get(i)||{startTime:1/0},u=c.map((e=>e.startTime)),d=c.map((e=>e.endTime)),m=Math.min(...u),p=Math.min(Math.max(...d),l.startTime)-m;let h="";c.length>0&&p>0&&(h=TU(SU.failureDisplayValue,{timeInMs:p}));return{score:c.length>0&&p>100?0:1,numericValue:c.length,numericUnit:"unitless",displayValue:h,details:{opportunity:p,
|
1133
|
+
...AdRenderBlockingResources.makeTableDetails(EU,c)}}}}pU.exports=AdRenderBlockingResources,pU.exports.UIStrings=SU;var xU={exports:{}};var _U={assert:function assert$2(e){if(null==e)throw new Error("Expected not to be null");return e}};const AU=Zc,RU=Lo,{assert:kU}=_U,{getNameOrTld:DU,trimUrl:CU}=fF,{getNetworkInitiators:IU}=eb,{getTimingsByRecord:NU}=OF,{isAdRequest:LU,isAdSense:MU,isGpt:PU,isBidRequest:OU,isAdRelated:FU}=fF;function isXhrCritical(e,t,r){const a=t.xhrEdges.get(e.url);if(!a)return!1;for(const{url:e}of r)if(a.has(e))return!0;return!1}function addInitiatedRequests(e,t,r,a){const n=r.allRecords.filter((e=>null!=e.resourceType)).filter((e=>["Script","XHR"].includes(e.resourceType||"")&&e.endTime<t.startTime)).filter((t=>t.initiatorRequest==e||IU(t).includes(e.url)));for(const e of n){"XHR"==e.resourceType&&isXhrCritical(e,r,a)&&linkGraph(r,e,a)}}function linkGraph(e,t,r=new Set){if(!t||r.has(t))return r;r.add(t);const a=new Set
|
1134
|
+
;for(let n=t.initiator.stack;n;n=n.parent)for(const{url:i}of n.callFrames){if(a.has(i))continue;a.add(i);const o=e.requestsByUrl.get(i);if(o&&(linkGraph(e,o,r),"Script"==o.resourceType)){const a=n.callFrames[0].url,i=e.requestsByUrl.get(a);i&&addInitiatedRequests(i,t,e,r)}}return linkGraph(e,t.initiatorRequest||null,r),r}function buildNetworkSummary(e,t){const r=new Map;for(const t of e)r.set(t.url,t);const a=t.filter((e=>e.name.startsWith("XHR"))).filter((e=>!!(e.args.data||{}).url)),n=new Map;for(const e of a){const t=e.args.data||{},r=n.get(t.url)||new Set;for(const{url:e}of t.stackTrace||[])r.add(e);n.set(t.url,r)}return{requestsByUrl:r,xhrEdges:n,allRecords:e}}var UU={getTransitiveClosure:function getTransitiveClosure(e,t){const r=new Set,a=function findTargetRequest(e,t){let r=null;return e.traverse((e=>{e.type!==AU.TYPES.CPU&&t(e.record)&&(r&&r.startTime<e.startTime||(r=e))})),r}(e,t),n=[],i=[];if(null==a)return{requests:n,traceEvents:i};const o=[a];for(;o.length;){
|
1135
|
+
const e=o.pop();e&&!r.has(e)&&(r.add(e),o.push(...e.getDependencies()))}const s=new Set;for(o.push(...e.getDependents());o.length;){const e=o.pop();if(e&&!s.has(e)){if(s.add(e),r.has(e))for(const e of o)r.add(e);o.push(...e.getDependents())}}for(const e of r)e.type===AU.TYPES.NETWORK?e.endTime<kU(a).startTime&&n.push(e.record):e.type===AU.TYPES.CPU&&e.event.ts<1e6*kU(a).startTime&&i.push(e.event,...e.childEvents);return{requests:n,traceEvents:i}},getCriticalGraph:function getCriticalGraph$1(e,t,r){const a=buildNetworkSummary(e,t),n=new Set;return linkGraph(a,r,n),n},computeAdRequestWaterfall:async function computeAdRequestWaterfall$4(e,t,r){const a=await RU.request(t,r),n=a.find(LU)||a.find(OU)||a.find(FU);if(null==n)return Promise.resolve([]);const i=new Set,o=kU(n),s=a.filter((e=>PU(e.url)||MU(e.url))),c=a.filter((e=>OU(e)&&e.endTime<=o.startTime)),l=buildNetworkSummary(a,e.traceEvents);for(const e of[o,...c,...s])linkGraph(l,e,i)
|
1136
|
+
;const u=new Set(["Script","XHR","Fetch","EventStream","Document",void 0]),d=Array.from(i).filter((e=>e.endTime<o.startTime)).filter((e=>u.has(e.resourceType))).filter((e=>"text/css"!=e.mimeType)),m=await NU(e,t,r),p=function computeSummaries(e){e.sort(((e,t)=>e.nameOrTld!=t.nameOrTld?e.nameOrTld<t.nameOrTld?-1:1:e.type!=t.type?e.type<t.type?-1:1:e.startTime!=t.startTime?e.startTime<t.startTime?-1:1:e.endTime-t.endTime));const t=[];for(let n=0;n<e.length;n++){const i=e[n];let o;for(;n<e.length&&(o=e[n+1],o&&(r=o,a=i,!(Math.max(r.startTime,a.startTime)>Math.min(r.endTime,a.endTime)||r.type&&a.type&&r.type!=a.type||"Script"==r.type||r.nameOrTld!=a.nameOrTld)));)i.endTime=Math.max(i.endTime,o.endTime),i.duration=i.endTime-i.startTime,n++;t.push(i)}var r,a;return t.sort(((e,t)=>e.startTime-t.startTime)),t}(d.map((e=>{const{startTime:t,endTime:r}=m.get(e)||e;return{startTime:t,endTime:r,duration:r-t,selfTime:0,url:CU(e.url),nameOrTld:DU(e.url),type:e.resourceType,record:e}})))
|
1137
|
+
;return function computeSelfTimes(e){if(!e.length)return[];let t=kU(e[0]);t.selfTime=t.duration;let r=t.startTime;for(const a of e){if(a.endTime<r||a==t)continue;const e=Math.max(r,a.startTime),n=Math.min(t.endTime,a.endTime);e<n&&(t.selfTime-=n-e),r=Math.max(r,n),a.endTime>t.endTime&&(a.selfTime=a.endTime-e,t=a)}}(p),p}};const jU=oi,{auditNotApplicable:BU}=jO.exports,{Audit:$U}=tU,{computeAdRequestWaterfall:qU}=UU,zU={title:"Ad request waterfall",failureTitle:"Reduce critical path for ad loading",description:"Consider reducing the number of resources, loading multiple resources simultaneously, or loading resources earlier to improve ad speed. Requests that block ad loading can be found below. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-critical-path).",displayValue:"{serialResources, plural, =1 {1 serial resource} other {# serial resources}}",columnUrl:"Request",columnType:"Type",columnStartTime:"Start",columnEndTime:"End"
|
1138
|
+
},VU=jU.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-critical-path.js",zU),WU=[{key:"nameOrTld",itemType:"text",text:VU(zU.columnType)},{key:"url",itemType:"url",text:VU(zU.columnUrl)},{key:"startTime",itemType:"ms",text:VU(zU.columnStartTime),granularity:1},{key:"endTime",itemType:"ms",text:VU(zU.columnEndTime),granularity:1}];class AdRequestCriticalPath extends $U{static get meta(){return{id:"ad-request-critical-path",title:VU(zU.title),failureTitle:VU(zU.failureTitle),description:VU(zU.description),scoreDisplayMode:"informative",requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.traces[$U.DEFAULT_PASS],a=e.devtoolsLogs[$U.DEFAULT_PASS],n=(await qU(r,a,t)).filter((e=>e.startTime>0&&e.startTime<e.endTime));if(!n.length)return BU.NoAds;const i=function computeDepth(e){let t=0,r=0;for(const{startTime:a,endTime:n}of e)a>=t?(++r,t=n):t=Math.min(t,n);return r}(n),o=i>3;for(const e of n)delete e.record
|
1139
|
+
;const s=function computeIdleTimes(e){let t=1/0;const r=[];for(let a=0;a<e.length;){const{startTime:n,endTime:i}=e[a];for(n-t>150&&r.push(n-t),t=i;++a<e.length&&e[a].startTime<t;)t=Math.max(t,e[a].endTime)}return r}(n),c=Math.max(...s),l=s.reduce(((e,t)=>e+t),0);return{numericValue:i,numericUnit:"unitless",score:o?0:1,displayValue:VU(zU.displayValue,{serialResources:i}),details:{size:n.length,depth:i,maxIdleTime:c,totalIdleTime:l,...AdRequestCriticalPath.makeTableDetails(WU,n)}}}}xU.exports=AdRequestCriticalPath,xU.exports.UIStrings=zU;var HU={exports:{}};const GU=AF,YU=Ew,KU=Ao,{getAdStartTime:JU,getBidStartTime:XU,getPageStartTime:ZU}=OF,{isAdRequest:QU,isBidRequest:ej}=fF;class LanternBidRequestTime extends GU{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e,a=GU.findNetworkTiming(r,ej).startTime;return a>GU.findNetworkTiming(r,QU).startTime?{timeInMs:-1,nodeTimings:r}:{timeInMs:a,nodeTimings:r}}}LanternBidRequestTime=KU(LanternBidRequestTime)
|
1140
|
+
;class BidRequestTime extends YU{static async computeSimulatedMetric(e,t){return LanternBidRequestTime.request(e,t)}static async computeObservedMetric(e){const{networkRecords:t}=e,r=ZU(t),a=XU(t);if(JU(t)<a)return{timing:-1};return{timing:1e3*(a-r)}}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const tj=BidRequestTime=KU(BidRequestTime),rj=oi,{auditNotApplicable:aj}=jO.exports,{Audit:nj}=tU,ij={title:"First bid request time",failureTitle:"Reduce time to send the first bid request",description:"This metric measures the elapsed time from the start of page load until the first bid request is made. Delayed bid requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bid-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"
|
1141
|
+
},oj=rj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start.js",ij);HU.exports=class BidRequestFromPageStart extends nj{static get meta(){return{id:"bid-request-from-page-start",title:oj(ij.title),failureTitle:oj(ij.failureTitle),description:oj(ij.description),scoreDisplayMode:nj.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const r={trace:e.traces[nj.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[nj.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await tj.request(r,t);return n>0?{numericValue:n,numericUnit:"millisecond",score:nj.computeLogNormalScore(a,n),displayValue:oj(ij.displayValue,{timeInMs:n})}:aj.NoBids}},HU.exports.UIStrings=ij;var sj={exports:{}}
|
1142
|
+
;const cj=zF,lj=oi,{auditNotApplicable:uj,runWarning:dj}=jO.exports,{Audit:mj}=tU,pj={title:"First ad request time",failureTitle:"Reduce time to send the first ad request",description:"This metric measures the elapsed time from the start of page load until the first ad request is made. Delayed ad requests will decrease impressions and viewability, and have a negative impact on ad revenue. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-request-from-page-start).",displayValue:"{timeInMs, number, seconds} s"},hj=lj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start.js",pj);sj.exports=class AdRequestFromPageStart extends mj{static get meta(){return{id:"ad-request-from-page-start",title:hj(pj.title),failureTitle:hj(pj.failureTitle),description:hj(pj.description),scoreDisplayMode:mj.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{
|
1143
|
+
p10:6500,median:1e4},provided:{p10:1900,median:3500}}}static async audit(e,t){const r={trace:e.traces[mj.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[mj.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await cj.request(r,t);if(!(n>0)){const e=uj.NoAds;return e.runWarnings=[dj.NoAds],e}return{numericValue:n,numericUnit:"millisecond",score:mj.computeLogNormalScore(a,n),displayValue:hj(pj.displayValue,{timeInMs:n})}}},sj.exports.UIStrings=pj;var gj={exports:{}};const fj=oi,{auditNotApplicable:yj}=jO.exports,{Audit:vj}=tU,{isAdIframe:bj}=fF,wj={title:"No ad found at the very top of the viewport",failureTitle:"Move the top ad further down the page",
|
1144
|
+
description:"Over 10% of ads are never viewed because users scroll past them before they become viewable. By moving ad slots away from the very top of the viewport, users are more likely to see ads before scrolling away. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ad-top-of-viewport).",failureDisplayValue:"A scroll of {valueInPx, number} px would hide half of your topmost ad",columnSlot:"Top Slot ID"},Sj=fj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport.js",wj),Tj=[{key:"slot",itemType:"text",text:Sj(wj.columnSlot)}];class AdTopOfViewport extends vj{static get meta(){return{id:"ad-top-of-viewport",title:Sj(wj.title),failureTitle:Sj(wj.failureTitle),description:Sj(wj.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter(bj).filter((e=>e.clientRect.width*e.clientRect.height>1&&!e.isPositionFixed)).map((e=>({
|
1145
|
+
midpoint:e.clientRect.top+e.clientRect.height/2,id:e.id})));if(!r.length)return yj.NoVisibleSlots;const a=r.reduce(((e,t)=>e.midpoint<t.midpoint?e:t)),n=a.midpoint<t.innerHeight;if(!n)return yj.NoAdsViewport;const i=n&&a.midpoint<100?0:1;return{score:i,numericValue:a.midpoint,numericUnit:"unitless",displayValue:i?"":Sj(wj.failureDisplayValue,{valueInPx:a.midpoint}),details:AdTopOfViewport.makeTableDetails(Tj,i?[]:[{slot:a.id}])}}}gj.exports=AdTopOfViewport,gj.exports.UIStrings=wj;var Ej={exports:{}};function isBoxInViewport$1(e,t){const{innerWidth:r,innerHeight:a}=t,{left:n,top:i,right:o,bottom:s}=e;return n<o&&i<s&&n<r&&i<a&&0<o&&0<s}var xj={boxViewableArea:function boxViewableArea(e,t){if(!isBoxInViewport$1(e,t))return 0;const{innerWidth:r,innerHeight:a}=t,{left:n,top:i,right:o,bottom:s}=e;return(Math.min(o,r)-Math.max(n,0))*(Math.min(s,a)-Math.max(i,0))},isBoxInViewport:isBoxInViewport$1,overlaps:function overlaps$1(e,t){
|
1146
|
+
const r=!(e.right<t.left||t.right<e.left),a=!(e.bottom<t.top||t.bottom<e.top);return r&&a},toClientRect:function toClientRect$1([e,t,r,a]){return{left:e,top:t,width:r,height:a,right:e+r,bottom:t+a}}};const{auditNotApplicable:_j}=jO.exports,{Audit:Aj}=tU,Rj=oi,{isBoxInViewport:kj}=xj,{isGptIframe:Dj}=fF,Cj={title:"Few or no ads loaded outside viewport",failureTitle:"Avoid loading ads until they are nearly on-screen",description:"Too many ads loaded outside the viewport lowers viewability rates and impacts user experience. Consider loading ads below the fold lazily as the user scrolls down. Consider using GPT's [Lazy Loading API](https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableLazyLoad). [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/ads-in-viewport).",failureDisplayValue:"{hiddenAds, plural, =1 {1 ad} other {# ads}} out of view",columnSlot:"Slots Outside Viewport"
|
1147
|
+
},Ij=Rj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/ads-in-viewport.js",Cj),Nj=[{key:"slot",itemType:"text",text:Ij(Cj.columnSlot)}];class AdsInViewport extends Aj{static get meta(){return{id:"ads-in-viewport",title:Ij(Cj.title),failureTitle:Ij(Cj.failureTitle),description:Ij(Cj.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter((e=>Dj(e)&&e.clientRect.height*e.clientRect.width>1));if(!r.length)return _j.NoVisibleSlots;const a=r.filter((e=>!kj(e.clientRect,t))).map((e=>({slot:e.id}))).sort(((e,t)=>e.slot.localeCompare(t.slot)));return{numericValue:(r.length-a.length)/r.length,numericUnit:"unitless",score:a.length>3?0:1,displayValue:a.length?Ij(Cj.failureDisplayValue,{hiddenAds:a.length}):"",details:AdsInViewport.makeTableDetails(Nj,a)}}}Ej.exports=AdsInViewport,Ej.exports.UIStrings=Cj;var Lj={exports:{}};var Mj={count:function count(e,t){let r=0
|
1148
|
+
;for(const a of e)t(a)&&r++;return r},bucket:function bucket$1(e,t){const r=new Map;for(const a of e){const e=t(a);if(null!=e){const t=r.get(e)||[];t.push(a),r.set(e,t)}}return r},flatten:function flatten(e){const t=[];for(const r of e)t.push(...r);return t}};const Pj=Mj,Oj=oi,Fj=GT,Uj=Lo,{auditNotApplicable:jj}=jO.exports,{Audit:Bj}=tU,{isAdTag:$j,isStaticRequest:qj}=fF,{URL:zj}=Hn,Vj={title:"Ad tag is loaded asynchronously",failureTitle:"Load ad tag asynchronously",description:"Loading the ad tag synchronously blocks content rendering until the tag is fetched and loaded. Consider using the `async` attribute to load gpt.js and/or adsbygoogle.js asynchronously. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/async-ad-tags)."},Wj=Oj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/async-ad-tags.js",Vj);function isAsync(e){return"Low"==e.priority||qj(e)}Lj.exports=class AsyncAdTags extends Bj{static get meta(){return{
|
1149
|
+
id:"async-ad-tags",title:Wj(Vj.title),failureTitle:Wj(Vj.failureTitle),description:Wj(Vj.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[Bj.DEFAULT_PASS],a=await Uj.request(r,t),n=await Fj.request({URL:e.URL,devtoolsLog:r},t),i=a.filter((e=>$j(new zj(e.url)))).filter((e=>e.frameId===n.frameId));if(!i.length)return jj.NoTag;const o=Pj.count(i,isAsync)-i.length;return{score:Number(0===o),numericValue:o,numericUnit:"unitless"}}},Lj.exports.UIStrings=Vj;var Hj={exports:{}};const Gj=on.default,Yj=Ao,Kj=Yp,Jj=Xp;Gj.warn("trace-of-tab","trace-of-tab is deprecated, use processed-trace / processed-navigation instead");var Xj=Yj(class TraceOfTab$1{static async compute_(e,t){const r=await Kj.request(e,t),a=await Jj.request(r,t);return{...r,...a}}},null);const Zj=oi,Qj=Lo,eB=Xj,{auditNotApplicable:tB}=jO.exports,{Audit:rB}=tU,{computeAdRequestWaterfall:aB}=UU,{getTimingsByRecord:nB}=OF,iB={title:"Ads not blocked by load events",
|
1150
|
+
failureTitle:"Avoid waiting on load events",description:"Waiting on load events increases ad latency. To speed up ads, eliminate the following load event handlers. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/blocking-load-events).",displayValue:"{timeInMs, number, seconds} s blocked",columnEvent:"Event Name",columnTime:"Event Time",columnScript:"Script",columnBlockedUrl:"Blocked URL",columnFunctionName:"Function"},oB=Zj.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/blocking-load-events.js",iB),sB=[{key:"eventName",itemType:"text",text:oB(iB.columnEvent)},{key:"time",itemType:"ms",text:oB(iB.columnTime),granularity:1},{key:"url",itemType:"url",text:oB(iB.columnScript)},{key:"functionName",itemType:"text",text:oB(iB.columnFunctionName)}];function findOriginalCallFrame(e){const{record:t}=e;let r=t&&t.initiator&&t.initiator.stack;if(r){for(;r.parent;)r=r.parent;return r.callFrames[r.callFrames.length-1]}}
|
1151
|
+
function findTraceEventOfCallFrame(e,t){return t.find((t=>"FunctionCall"==t.name&&t.args.data&&t.args.data.functionName==e.functionName&&t.args.data.scriptId==e.scriptId&&t.args.data.url==e.url&&Math.abs(t.args.data.lineNumber==e.lineNumber)<2&&Math.abs(t.args.data.columnNumber==e.columnNumber)<2))}function findEventIntervals(e,t){let r={};const a=[];for(const n of t)n.name==`${e}EventStart`?r={start:n.ts,end:1/0,eventName:e}:n.name==`${e}EventEnd`&&(r.end=n.ts,a.push(r));return a}function quantifyBlockedTime(e,t,r){const a=t.find((t=>t.url==e.url)),n=t.find((t=>t.url==e.blockedUrl));if(!a||!n)return 0;const i=r.get(a),o=r.get(n);return i&&o?o.startTime-i.endTime:0}class BlockingLoadEvents extends rB{static get meta(){return{id:"blocking-load-events",title:oB(iB.title),failureTitle:oB(iB.failureTitle),description:oB(iB.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){
|
1152
|
+
const r=e.traces[rB.DEFAULT_PASS],a=e.devtoolsLogs[rB.DEFAULT_PASS],n=await Qj.request(a,t),{timings:i,processEvents:o}=await eB.request(r,t),s=await nB(r,a,t),c=(await aB(r,a,t)).sort(((e,t)=>e.startTime-t.startTime));if(!c.length)return tB.NoAdRelatedReq;const l=[...findEventIntervals("domContentLoaded",o),...findEventIntervals("load",o)],u=[],d=new Set;for(const e of c){const t=findOriginalCallFrame(e);if(!t)continue;const r=JSON.stringify(t);if(d.has(r))continue;d.add(r);const a=findTraceEventOfCallFrame(t,o);if(!a)continue;const c=l.find((e=>e.start<=a.ts&&a.ts<=e.end));if(c){const r=Object.assign({eventName:c.eventName,blockedUrl:e.url,time:i[c.eventName],blockedTime:1/0},t);r.blockedTime=quantifyBlockedTime(r,n,s),u.push(r)}}const m=u.length>0;let p=0;return m&&(p=Math.min(...u.map((e=>e.blockedTime)))),{numericValue:u.length,numericUnit:"unitless",score:m?0:1,displayValue:m&&p?oB(iB.displayValue,{timeInMs:p}):"",details:BlockingLoadEvents.makeTableDetails(sB,u)}}}
|
1153
|
+
Hj.exports=BlockingLoadEvents,Hj.exports.UIStrings=iB;var cB={exports:{}};const lB=oi,{auditNotApplicable:uB}=jO.exports,{Audit:dB}=tU,{computeAdRequestWaterfall:mB}=UU,{isAdScript:pB,toURL:hB}=fF,gB={title:"No bottleneck requests found",failureTitle:"Avoid bottleneck requests",description:"Speed up, load earlier, parallelize, or eliminate the following requests and their dependencies in order to speed up ad loading. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/bottleneck-requests).",displayValue:"{blockedTime, number, seconds} s spent blocked on requests",columnUrl:"Blocking Request",columnInitiatorUrl:"Initiator Request",columnStartTime:"Start",columnSelfTime:"Exclusive Time",columnDuration:"Total Time"},fB=lB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/bottleneck-requests.js",gB),yB=[{key:"url",itemType:"url",text:fB(gB.columnUrl)},{key:"selfTime",itemType:"ms",text:fB(gB.columnSelfTime),granularity:1},{
|
1154
|
+
key:"duration",itemType:"ms",text:fB(gB.columnDuration),granularity:1}];class BottleneckRequests extends dB{static get meta(){return{id:"bottleneck-requests",title:fB(gB.title),failureTitle:fB(gB.failureTitle),description:fB(gB.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.traces[dB.DEFAULT_PASS],a=e.devtoolsLogs[dB.DEFAULT_PASS],n=(await mB(r,a,t)).filter((e=>e.startTime>0));if(!n.length)return uB.NoAdRelatedReq;const cost=e=>3*e.selfTime+e.duration,i=n.filter((e=>!pB(hB(e.url))&&(e.selfTime>250||e.duration>1e3))).sort(((e,t)=>cost(t)-cost(e))).slice(0,5),o=i.reduce(((e,t)=>e+t.selfTime),0)/1e3,s=1e3*o>1e3;for(const e of i)delete e.record;return{numericValue:i.length,numericUnit:"unitless",score:s?0:1,displayValue:s?fB(gB.displayValue,{blockedTime:o}):"",details:BottleneckRequests.makeTableDetails(yB,i)}}}cB.exports=BottleneckRequests,cB.exports.UIStrings=gB;var vB={exports:{}}
|
1155
|
+
;const bB=oi,wB=GT,SB=Lo,TB=Ki,{auditNotApplicable:EB}=jO.exports,{Audit:xB}=tU,{containsAnySubstring:_B}=fF,{URL:AB}=Hn,RB={title:"No duplicate tags found",failureTitle:"Load tags only once",description:"Loading a tag more than once in the same page is redundant and adds overhead without benefit. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/duplicate-tags).",failureDisplayValue:"{duplicateTags, plural, =1 {1 duplicate tag} other {# duplicate tags}}",columnScript:"Script",columnNumReqs:"Duplicate Requests",columnFrameId:"Frame ID"},kB=bB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/duplicate-tags.js",RB),DB=["googletagservices.com/tag/js/gpt.js","securepubads.g.doubleclick.net/tag/js/gpt.js","pagead2.googlesyndication.com/pagead/js/adsbygoogle.js","pagead2.googlesyndication.com/pagead/js/show_ads.js","cdn.ampproject.org/v0/amp-ad-0.1.js"],CB=[{key:"script",itemType:"url",text:kB(RB.columnScript)},{key:"numReqs",
|
1156
|
+
itemType:"text",text:kB(RB.columnNumReqs)}];class DuplicateTags extends xB{static get meta(){return{id:"duplicate-tags",title:kB(RB.title),failureTitle:kB(RB.failureTitle),description:kB(RB.description),requiredArtifacts:["devtoolsLogs","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[xB.DEFAULT_PASS],a=await SB.request(r,t),n=await wB.request({URL:e.URL,devtoolsLog:r},t),i=a.filter((e=>e.frameId===n.frameId)).filter((e=>_B(e.url,DB))).filter((e=>e.resourceType===TB.TYPES.Script));if(!i.length)return EB.NoTags;const o=new Map;for(const e of i){const t=new AB(e.url).pathname,r=o.get(t)||0;o.set(t,r+1)}const s=[];for(const[e,t]of o)t>1&&s.push({script:e,numReqs:t});return{numericValue:s.length,numericUnit:"unitless",score:s.length?0:1,details:DuplicateTags.makeTableDetails(CB,s),displayValue:s.length?kB(RB.failureDisplayValue,{duplicateTags:s.length}):""}}}vB.exports=DuplicateTags,vB.exports.UIStrings=RB;var IB={exports:{}}
|
1157
|
+
;const NB=AF,LB=Ew,MB=Ao,{getPageStartTime:PB,getImpressionStartTime:OB}=OF,{isImpressionPing:FB}=fF;class LanternAdRenderTime extends NB{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:NB.findNetworkTiming(r,(e=>!!e.url&&FB(new URL(e.url)))).startTime,nodeTimings:r}}}LanternAdRenderTime=MB(LanternAdRenderTime);class AdRenderTime extends LB{static async computeSimulatedMetric(e,t){return LanternAdRenderTime.request(e,t)}static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=PB(r),n=1e3*(OB(r)-a);return Promise.resolve({timing:n})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const UB=AdRenderTime=MB(AdRenderTime),jB=oi,{auditNotApplicable:BB,runWarning:$B}=jO.exports,{Audit:qB}=tU,zB={title:"Latency of first ad render",failureTitle:"Reduce time to render first ad",
|
1158
|
+
description:"This metric measures the time for the first ad iframe to render from page navigation. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/first-ad-render).",displayValue:"{timeInMs, number, seconds} s"},VB=jB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/first-ad-render.js",zB);IB.exports=class FirstAdRender extends qB{static get meta(){return{id:"first-ad-render",title:VB(zB.title),failureTitle:VB(zB.failureTitle),description:VB(zB.description),scoreDisplayMode:qB.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:12900,median:22e3},provided:{p10:2750,median:3700}}}static async audit(e,t){const r=e.traces[qB.DEFAULT_PASS],a={devtoolsLog:e.devtoolsLogs[qB.DEFAULT_PASS],trace:r,settings:t.settings},{timing:n}=await UB.request(a,t);if(!(n>0)){const e=BB.NoAdRendered;return e.runWarnings=[$B.NoAdRendered],e}
|
1159
|
+
const i=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"];return{numericValue:n,numericUnit:"millisecond",score:qB.computeLogNormalScore(i,n),displayValue:VB(zB.displayValue,{timeInMs:n})}}},IB.exports.UIStrings=zB;var WB={exports:{}};const HB=oi,GB=Lo,{auditNotApplicable:YB}=jO.exports,{Audit:KB}=tU,{isAdRequest:JB}=fF,{URL:XB}=Hn,ZB={title:"Ad slots effectively use horizontal space",failureTitle:"Increase the width of ad slots",description:"Ad slots that utilize most of the page width generally experience increased click-through rate over smaller ad sizes. We recommend leaving no more than 25% of the viewport width unutilized on mobile devices.",failureDisplayValue:"{percentUnused, number, percent} of viewport width is underutilized"},QB=HB.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/full-width-slots.js",ZB);WB.exports=class FullWidthSlots extends KB{static get meta(){return{id:"full-width-slots",title:QB(ZB.title),
|
1160
|
+
failureTitle:QB(ZB.failureTitle),description:QB(ZB.description),requiredArtifacts:["ViewportDimensions","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[KB.DEFAULT_PASS],a=await GB.request(r,t),n=e.ViewportDimensions.innerWidth,i=a.filter(JB).map((e=>new XB(e.url)));if(!i.length)return YB.NoAds;const o=i.map((e=>e.searchParams.get("prev_iu_szs")||e.searchParams.get("sz"))).join("|").split(/[|,]/).map((e=>parseInt(e.split("x")[0]))).filter((e=>e<=n&&e>1));if(!o.length)return YB.NoValidAdWidths;const s=1-Math.max(...o)/n,c=s>.25?0:1;return{score:c,numericValue:s,numericUnit:"unitless",displayValue:c?"":QB(ZB.failureDisplayValue,{percentUnused:s})}}},WB.exports.UIStrings=ZB;var e$={exports:{}};const t$=Lo,{assert:r$}=_U,{auditNotApplicable:a$}=jO.exports,{Audit:n$}=tU,{getCriticalGraph:i$}=UU,{getTimingsByRecord:o$}=OF,{isGptImplTag:s$,isBidRequest:c$,getHeaderBidder:l$}=fF,u$={title:"GPT and bids loaded in parallel",failureTitle:"Load GPT and bids in parallel",
|
1161
|
+
description:"To optimize ad loading, bid requests should not wait on GPT to load. This issue can often be fixed by making sure that bid requests do not wait on `googletag.pubadsReady` or `googletag.cmd.push`. [Learn More](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-bids-parallel).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},d$=[{key:"bidder",itemType:"text",text:u$.columnBidder},{key:"url",itemType:"url",text:u$.columnUrl},{key:"startTime",itemType:"ms",text:u$.columnStartTime},{key:"duration",itemType:"ms",text:u$.columnDuration}];class GptBidsInParallel extends n${static get meta(){return{id:"gpt-bids-parallel",title:u$.title,failureTitle:u$.failureTitle,description:u$.description,requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){const r=e.devtoolsLogs[n$.DEFAULT_PASS],a=e.traces[n$.DEFAULT_PASS],n=await t$.request(r,t),i=n.find((e=>s$(e.url)));if(!i)return a$.NoGpt
|
1162
|
+
;const o=n.filter(c$).filter((e=>e.frameId==i.frameId));if(!o.length)return a$.NoBids;const s=await o$(a,r,t),c=[],l=new Set;for(const e of o)if(i$(n,a.traceEvents,e).has(i)){const{startTime:t,endTime:r}=s.get(e)||e,a=r$(l$(e.url));if(l.has(a))continue;l.add(a),c.push({bidder:a,url:e.url,startTime:t,duration:r-t})}const u=c.length>0;return{numericValue:c.length,numericUnit:"unitless",score:u?0:1,details:u?GptBidsInParallel.makeTableDetails(d$,c):void 0}}}e$.exports=GptBidsInParallel,e$.exports.UIStrings=u$;var m$={exports:{}};const p$=oi,h$=Lo,{auditNotApplicable:g$}=jO.exports,{Audit:f$}=tU,{isGptTag:y$}=fF,{URL:v$}=Hn,b$={title:"GPT tag is loaded from an official source",failureTitle:"Load GPT from an official source",description:"Load GPT from 'securepubads.g.doubleclick.net' for standard integrations or from 'pagead2.googlesyndication.com' for limited ads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-gpt-from-official-source)."
|
1163
|
+
},w$=p$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source.js",b$);m$.exports=class LoadsGptFromOfficalSource extends f${static get meta(){return{id:"loads-gpt-from-official-source",title:w$(b$.title),failureTitle:w$(b$.failureTitle),description:w$(b$.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[f$.DEFAULT_PASS],a=(await h$.request(r,t)).map((e=>new v$(e.url))).find(y$);if(!a)return g$.NoGpt;const n=["securepubads.g.doubleclick.net","pagead2.googlesyndication.com"].includes(a.host);return{score:Number(n),numericValue:Number(!n),numericUnit:"unitless"}}},m$.exports.UIStrings=b$;var S$={exports:{}};const T$=oi,E$=Lo,{auditNotApplicable:x$}=jO.exports,{Audit:_$}=tU,{isAdTag:A$}=fF,{URL:R$}=Hn,k$={title:"Ad tag is loaded over HTTPS",failureTitle:"Load ad tag over HTTPS",
|
1164
|
+
description:'For privacy and security, always load GPT/AdSense over HTTPS. Insecure pages should explicitly request the ad script securely. GPT Example: `<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js">` AdSense Example: `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">`. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/loads-ad-tag-over-https).'},D$=T$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https.js",k$);S$.exports=class LoadsAdTagOverHttps extends _${static get meta(){return{id:"loads-ad-tag-over-https",title:D$(k$.title),failureTitle:D$(k$.failureTitle),description:D$(k$.description),requiredArtifacts:["devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[_$.DEFAULT_PASS],a=await E$.request(r,t);if(!a.find((e=>200==e.statusCode)))return x$.NoRecords;const n=a.filter((e=>A$(new R$(e.url)))),i=n.filter((e=>e.isSecure)),o={
|
1165
|
+
type:"debugdata",numAdTagHttpReqs:n.length-i.length,numAdTagHttpsReqs:i.length};if(!n.length){const e=x$.NoTag;return e.details=o,e}return{numericValue:o.numAdTagHttpReqs,score:o.numAdTagHttpReqs?0:1,details:o}}},S$.exports.UIStrings=k$;var C$={exports:{}};const I$=Mj,N$=oi,L$=eb,{auditNotApplicable:M$}=jO.exports,{Audit:P$}=tU,{computeAdRequestWaterfall:O$}=UU,{getScriptEvaluationTimes:F$}=OF,U$={title:"Ad scripts are loaded statically",failureTitle:"Load ad scripts statically",description:"Load the following scripts directly with `<script async src=...>` instead of injecting scripts with JavaScript. Doing so allows the browser to preload scripts sooner. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/script-injected-tags).",failureDisplayValue:"Load {tags, plural, =1 {1 script} other {# scripts}} statically",columnUrl:"Script",columnLoadTime:"Load Time"
|
1166
|
+
},j$=N$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/script-injected-tags.js",U$),B$=[{key:"url",itemType:"url",text:j$(U$.columnUrl)},{key:"loadTime",itemType:"ms",granularity:1,text:j$(U$.columnLoadTime)}],$$=[/amazon-adsystem\.com\/aax2\/apstag.js/,/js-sec\.indexww\.com\/ht\/p\/.*\.js/,/pubads\.g\.doubleclick\.net\/tag\/js\/gpt\.js/,/static\.criteo\.net\/js\/.*\/publishertag\.js/,/www\.googletagservices\.com\/tag\/js\/gpt\.js/,/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js/,/cdn\.ampproject\.org\/v0\/amp-ad-\d+\.\d+\.js/];function initiatedByInlineScript(e){if("script"!==e.initiator.type)return!1;const t=L$.getNetworkInitiators(e);return 1===t.length&&t[0]===e.documentURL}class StaticAdTags extends P${static get meta(){return{id:"script-injected-tags",title:j$(U$.title),failureTitle:j$(U$.failureTitle),description:j$(U$.description),requiredArtifacts:["devtoolsLogs","traces"]}}static async audit(e,t){
|
1167
|
+
const r=await async function findStaticallyLoadableTags(e,t){const r=e.devtoolsLogs[P$.DEFAULT_PASS],a=e.traces[P$.DEFAULT_PASS],n=[],i=await O$(a,r,t);for(const{record:e}of i)e&&"Script"===e.resourceType&&(initiatedByInlineScript(e)||$$.find((t=>e.url.match(t))))&&n.push(e);return n}(e,t);if(!r.length)return M$.NoTag;const a=new Set,n=[],i=e.devtoolsLogs[P$.DEFAULT_PASS],o=e.traces[P$.DEFAULT_PASS],s=await F$(o,i,t);for(const e of r){if(a.has(e.url))continue;a.add(e.url);const t=r.filter((t=>t.url===e.url));if(0===I$.count(t,(e=>"parser"===e.initiator.type&&!e.isLinkPreload))){const t=s.get(e.url)||0;if(t<400)continue;n.push({url:e.url,loadTime:t})}}n.sort(((e,t)=>e.loadTime-t.loadTime));const c=n.length>0;return{displayValue:c?j$(U$.failureDisplayValue,{tags:n.length}):"",score:Number(!c),numericValue:n.length,numericUnit:"unitless",details:StaticAdTags.makeTableDetails(B$,n)}}}C$.exports=StaticAdTags,C$.exports.UIStrings=U$;var q$={exports:{}}
|
1168
|
+
;const z$=zF,V$=oi,W$=GT,H$=Lo,{auditNotApplicable:G$}=jO.exports,{Audit:Y$}=tU,{bucket:K$}=Mj,{getTimingsByRecord:J$}=OF,{isCacheable:X$}=dF,{isGoogleAds:Z$,getHeaderBidder:Q$}=fF,{URL:tq}=Hn,rq={title:"Header bidding is parallelized",failureTitle:"Parallelize bid requests",description:"Send header bidding requests simultaneously, rather than serially, to retrieve bids more quickly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/serial-header-bidding).",columnBidder:"Bidder",columnUrl:"URL",columnStartTime:"Start",columnDuration:"Duration"},aq=V$.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/serial-header-bidding.js",rq),nq=[{key:"bidder",itemType:"text",text:aq(rq.columnBidder)},{key:"url",itemType:"url",text:aq(rq.columnUrl)},{key:"startTime",itemType:"ms",text:aq(rq.columnStartTime)},{key:"duration",itemType:"ms",text:aq(rq.columnDuration)}],iq="ad",oq="bid",sq="unknown";function checkRecordType(e){
|
1169
|
+
return Z$(new tq(e.url))?iq:Q$(e.url)?oq:sq}function isPossibleBid(e){return(null==e.resourceSize||e.resourceSize>0)&&"Image"!=e.resourceType&&e.endTime-e.startTime>=.05&&!X$(e)}function clearQueryString(e){const t=new tq(e);return t.search="",t.toString()}class SerialHeaderBidding extends Y${static get meta(){return{id:"serial-header-bidding",title:aq(rq.title),failureTitle:aq(rq.failureTitle),description:aq(rq.description),requiredArtifacts:["devtoolsLogs","traces","URL"]}}static async audit(e,t){const r=e.devtoolsLogs[Y$.DEFAULT_PASS],a=e.traces[Y$.DEFAULT_PASS],n=await H$.request(r,t);if(!n.length)return G$.NoRecords;const i=await W$.request({URL:e.URL,devtoolsLog:r},t),o=n.filter(isPossibleBid).filter((e=>e.frameId==i.frameId)),s=K$(o,checkRecordType);if(!s.has(oq))return G$.NoBids;const c={trace:a,devtoolsLog:r,settings:t.settings},{timing:l}=await z$.request(c,t),u=await J$(a,r,t),d=function constructRecords(e,t,r){const a=[];for(const n of e){const e=r.get(n)
|
1170
|
+
;e&&a.push(Object.assign({},e,{url:n.url,type:t}))}return a}(s.get(oq)||[],oq,u);let m,p=[];for(const e of d)l>0&&e.endTime>l||(e.bidder=Q$(e.url),e.url=clearQueryString(e.url),m&&e.startTime>=m.endTime&&(p.push(m),p.push(e)),(!m||e.endTime<m.endTime||e.startTime>=m.endTime)&&(m=e));p=Array.from(new Set(p));const h=p.length>1;return{numericValue:Number(h),numericUnit:"unitless",score:h?0:1,details:h?SerialHeaderBidding.makeTableDetails(nq,p):void 0}}}q$.exports=SerialHeaderBidding,q$.exports.UIStrings=rq;var cq={exports:{}};const lq=AF,uq=Ew,dq=Ao,{getPageStartTime:mq,getTagEndTime:pq}=OF,{isImplTag:hq}=fF,{URL:gq}=Hn;class LanternTagLoadTime extends lq{static getEstimateFromSimulation(e,t){const{nodeTimings:r}=e;return{timeInMs:lq.findNetworkTiming(r,(e=>!!e.url&&hq(new gq(e.url)))).endTime,nodeTimings:r}}}LanternTagLoadTime=dq(LanternTagLoadTime);class TagLoadTime$1 extends uq{static async computeSimulatedMetric(e,t){return LanternTagLoadTime.request(e,t)}
|
1171
|
+
static async computeObservedMetric(e,t){const{networkRecords:r}=e,a=mq(r),n=1e3*(pq(r)-a);return Promise.resolve({timing:n})}static async request(e,t){throw Error("Not implemented -- class not decorated")}}const fq=TagLoadTime$1=dq(TagLoadTime$1),yq=oi,{auditNotApplicable:vq,runWarning:bq}=jO.exports,{Audit:wq}=tU,Sq={title:"Tag load time",failureTitle:"Reduce tag load time",description:"This metric measures the time for the ad tag's implementation script (pubads_impl.js for GPT; adsbygoogle.js for AdSense) to load after the page loads. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/tag-load-time).",displayValue:"{timeInMs, number, seconds} s"},Tq=yq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/tag-load-time.js",Sq);cq.exports=class TagLoadTime extends wq{static get meta(){return{id:"tag-load-time",title:Tq(Sq.title),failureTitle:Tq(Sq.failureTitle),description:Tq(Sq.description),
|
1172
|
+
scoreDisplayMode:wq.SCORING_MODES.NUMERIC,requiredArtifacts:["devtoolsLogs","traces"]}}static get defaultOptions(){return{simulate:{p10:4350,median:8e3},provided:{p10:1200,median:2e3}}}static async audit(e,t){const r={trace:e.traces[wq.DEFAULT_PASS],devtoolsLog:e.devtoolsLogs[wq.DEFAULT_PASS],settings:t.settings},a=t.options["provided"==t.settings.throttlingMethod?"provided":"simulate"],{timing:n}=await fq.request(r,t);if(!(n>0)){const e=vq.NoTag;return e.runWarnings=[bq.NoTag],e}return{numericValue:n,numericUnit:"millisecond",score:wq.computeLogNormalScore(a,n),displayValue:Tq(Sq.displayValue,{timeInMs:n})}}},cq.exports.UIStrings=Sq;var Eq={exports:{}};const xq=oi,{auditNotApplicable:_q,auditError:Aq}=jO.exports,{Audit:Rq}=tU,{isAdIframe:kq}=fF,Dq={title:"Ads to page-height ratio is within recommended range",failureTitle:"Reduce ads to page-height ratio",
|
1173
|
+
description:"The ads to page-height ratio can impact user experience and ultimately user retention. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/viewport-ad-density).",displayValue:"{adDensity, number, percent} ads to page-height ratio"},Cq=xq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/viewport-ad-density.js",Dq);Eq.exports=class ViewportAdDensity extends Rq{static get meta(){return{id:"viewport-ad-density",title:Cq(Dq.title),failureTitle:Cq(Dq.failureTitle),description:Cq(Dq.description),requiredArtifacts:["ViewportDimensions","IFrameElements"]}}static audit(e){const t=e.ViewportDimensions,r=e.IFrameElements.filter((e=>kq(e)&&e.clientRect.width*e.clientRect.height>1));if(!r.length)return _q.NoVisibleSlots;if(t.innerHeight<=0)throw new Error(Aq.ViewportAreaZero);const a=function computeAdLength(e,t){
|
1174
|
+
const r=new Set([...e.map((e=>e.clientRect.left)),...e.map((e=>e.clientRect.right))].map((e=>Math.min(Math.max(1,e),t.innerWidth-1))));e=e.sort(((e,t)=>e.clientRect.top!==t.clientRect.top?e.clientRect.top-t.clientRect.top:e.clientRect.bottom-t.clientRect.bottom));let a=0;for(const t of r){let r=0,n=0;for(const a of e){if(t<a.clientRect.left||t>a.clientRect.right)continue;if(a.isPositionFixed){r+=a.clientRect.height;continue}const e=a.clientRect.bottom-Math.max(n,a.clientRect.top);e>0&&(r+=e),n=Math.max(n,a.clientRect.bottom)}a=Math.max(a,r)}return a}(r,t),n=Math.max(...r.map((e=>e.clientRect.top+e.clientRect.height/2)))+t.innerHeight,i=Math.min(1,a/n);return{score:i>.3?0:1,numericValue:i,numericUnit:"unitless",displayValue:Cq(Dq.displayValue,{adDensity:i})}}},Eq.exports.UIStrings=Dq;var Iq={exports:{}};const Nq=oi,{auditNotApplicable:Lq}=jO.exports,{Audit:Mq}=tU,{getScriptUrl:Pq}=OF,{isAdIframe:Oq,isAdRelated:Fq,isImplTag:Uq}=fF,{overlaps:jq,toClientRect:Bq}=xj,$q={
|
1175
|
+
title:"Cumulative ad shift",failureTitle:"Reduce ad-related layout shift",description:"Measures layout shifts that were caused by ads or happened near ads. Reducing cumulative ad-related layout shift will improve user experience. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/cumulative-ad-shift)."},qq=Nq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift.js",$q);Iq.exports=class CumulativeAdShift extends Mq{static get meta(){return{id:"cumulative-ad-shift",title:qq($q.title),failureTitle:qq($q.failureTitle),description:qq($q.description),scoreDisplayMode:Mq.SCORING_MODES.NUMERIC,requiredArtifacts:["traces","IFrameElements"]}}static get defaultOptions(){return{p10:.05,median:.25}}static isAdExpansion(e,t){if(!e.args||!e.args.data)return!1;for(const r of e.args.data.impacted_nodes||[]){const e=Bq(r.old_rect||[]),a=Bq(r.new_rect||[]);if(!(e.top>a.top||e.height!==a.height))for(const r of t){
|
1176
|
+
const t=r.clientRect;if((e.top>=t.top||a.top>=t.bottom)&&jq(e,t))return!0}}return!1}static isAttributableToTask(e,t){if(!e.args||!e.args.data)return!1;return!!t.find((t=>t.ts<e.ts&&e.ts-t.ts<5e4))}static compute(e,t,r,a){let n=0,i=0,o=0,s=0,c=0,l=0;for(const u of e)u.args&&u.args.data&&u.args.data.is_main_frame&&(n+=u.args.data.score,i++,(this.isAdExpansion(u,r)||this.isAttributableToTask(u,t))&&(o+=u.args.data.score,s++,u.ts<a&&(c+=u.args.data.score,l++)));return{cumulativeShift:n,numShifts:i,cumulativeAdShift:o,numAdShifts:s,cumulativePreImplTagAdShift:c,numPreImplTagAdShifts:l}}static getLayoutShiftEventsByWindow(e){let t=0,r=[],a=0,n=[];for(const i of e){if("LayoutShift"!==i.name||!i.args||!i.args.data)continue;if(n.length){const e=n[0],o=n[n.length-1];(o.ts-e.ts>5e6||i.ts-o.ts>1e6)&&(a>t&&(r=n,t=a),n=[],a=0)}n.push(i);const e=i.args.data;a+=e.weighted_score_delta||e.score||0}return r.length||(r=n),r}static async audit(e,t){
|
1177
|
+
const r=e.traces[Mq.DEFAULT_PASS],a=this.getLayoutShiftEventsByWindow(r.traceEvents);if(!a.length)return Lq.NoLayoutShifts;const n=r.traceEvents.filter((e=>Fq(Pq(e)||""))),i=n.find((e=>Uq(Pq(e)||"")))||{ts:1/0},o=e.IFrameElements.filter(Oq),s=this.compute(a,n,o,i.ts),c=s.cumulativeAdShift;return o.length||c?{numericValue:c,numericUnit:"unitless",score:Mq.computeLogNormalScore({p10:t.options.p10,median:t.options.median},c),displayValue:c.toLocaleString(t.settings.locale),details:s}:Lq.NoAdRendered}},Iq.exports.UIStrings=$q;var zq={exports:{}};const Vq=oi,Wq=Lo,{auditNotApplicable:Hq}=jO.exports,{Audit:Gq}=tU,{isGpt:Yq,isGptImplTag:Kq}=fF,Jq={title:"Deprecated GPT API Usage",failureTitle:"Avoid deprecated GPT APIs",description:"Deprecated GPT API methods should be avoided to ensure your page is tagged correctly. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/deprecated-gpt-api-usage).",
|
1178
|
+
displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},Xq=Vq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/deprecated-api-usage.js",Jq);zq.exports=class DeprecatedApiUsage extends Gq{static get meta(){return{id:"deprecated-gpt-api-usage",title:Xq(Jq.title),failureTitle:Xq(Jq.failureTitle),description:Xq(Jq.description),scoreDisplayMode:"informative",requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[Gq.DEFAULT_PASS];if(!(await Wq.request(r,t)).find((e=>Kq(e.url))))return Hq.NoGpt;const a=e.ConsoleMessages.filter((e=>"warning"===e.level||"error"===e.level)).filter((e=>e.url&&Yq(e.url))).filter((e=>e.text.toLowerCase().includes("deprecated")||e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),n=[{key:"url",itemType:"url",text:Xq(Vq.UIStrings.columnURL)},{
|
1179
|
+
key:"description",itemType:"code",text:Xq(Vq.UIStrings.columnDescription)}],i=Gq.makeTableDetails(n,a),o=a.length;return{score:Number(0===o),details:i,displayValue:Xq(Jq.displayValue,{numErrors:o})}}},zq.exports.UIStrings=Jq;var Zq={exports:{}};const Qq=oi,ez=Lo,{auditNotApplicable:tz}=jO.exports,{Audit:rz}=tU,{isGpt:az,isGptImplTag:nz}=fF,iz={title:"GPT Errors",failureTitle:"Fix GPT errors",description:"Fix GPT errors to ensure your page is tagged as intended. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/gpt-errors-overall).",displayValue:"{numErrors, plural, =1 {1 error} other {# errors}} found"},oz=Qq.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/gpt-errors-overall.js",iz);Zq.exports=class GptErrorsOverall extends rz{static get meta(){return{id:"gpt-errors-overall",title:oz(iz.title),failureTitle:oz(iz.failureTitle),description:oz(iz.description),scoreDisplayMode:"informative",
|
1180
|
+
requiredArtifacts:["ConsoleMessages","devtoolsLogs"]}}static async audit(e,t){const r=e.devtoolsLogs[rz.DEFAULT_PASS];if(!(await ez.request(r,t)).find((e=>nz(e.url))))return tz.NoGpt;const a=e.ConsoleMessages.filter((e=>"error"===e.level||"warning"===e.level)).filter((e=>e.url&&az(e.url))).filter((e=>!e.text.toLowerCase().includes("deprecated")&&!e.text.toLowerCase().includes("discouraged"))).map((e=>({source:e.source,description:e.text,url:e.url,timestamp:e.timestamp}))).sort(((e,t)=>(e.timestamp||0)-(t.timestamp||0))),n=[{key:"url",itemType:"url",text:oz(Qq.UIStrings.columnURL)},{key:"description",itemType:"code",text:oz(Qq.UIStrings.columnDescription)}],i=rz.makeTableDetails(n,a),o=a.length;return{score:Number(0===o),details:i,displayValue:oz(iz.displayValue,{numErrors:o})}}},Zq.exports.UIStrings=iz;var sz={exports:{}};const cz=oi,lz=eU,uz=Lo,{auditNotApplicable:dz}=jO.exports,{Audit:mz}=tU,{getAttributableUrl:pz}=VF,{isAdRelated:hz,getNameOrTld:gz}=fF,fz={
|
1181
|
+
title:"Total ad JS blocking time",failureTitle:"Reduce ad JS blocking time",description:"Ad-related scripts are blocking the main thread. [Learn more](https://developers.google.com/publisher-ads-audits/reference/audits/total-ad-blocking-time).",failureDisplayValue:"{timeInMs, number, seconds} s blocked",columnName:"Name",columnBlockingTime:"Blocking Time"},yz=cz.createMessageInstanceIdFn("node_modules/lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time.js",fz),vz=[{key:"name",itemType:"text",text:yz(fz.columnName)},{key:"blockingTime",itemType:"ms",text:yz(fz.columnBlockingTime),granularity:1}];class TotalAdBlockingTime extends mz{static get meta(){return{id:"total-ad-blocking-time",title:yz(fz.title),failureTitle:yz(fz.failureTitle),description:yz(fz.description),requiredArtifacts:["traces","devtoolsLogs"]}}static get defaultOptions(){return{simulate:{p10:290,median:600},provided:{p10:150,median:350}}}static async audit(e,t){
|
1182
|
+
const r=e.traces[mz.DEFAULT_PASS],a=e.devtoolsLogs[mz.DEFAULT_PASS];if(!(await uz.request(a,t)).find((e=>hz(e.url))))return dz.NoAdRelatedReq;const n={trace:r,devtoolsLog:a,settings:t.settings};let i=[];try{i=await lz.request(n,t)}catch(e){return dz.InvalidTiming}let o=0;const s=new Map;for(const e of i){const t=pz(e);if(!t||!hz(t))continue;if(e.parent)continue;const r=e.duration-50;o+=r;const a=gz(t),n=s.get(a)||0;s.set(a,n+r)}const c=[];for(const[e,t]of s.entries())c.push({name:e,blockingTime:t});c.sort(((e,t)=>t.blockingTime-e.blockingTime));const l=t.options[t.settings.throttlingMethod]||t.options.provided;return{score:mz.computeLogNormalScore(l,o),numericValue:o,numericUnit:"millisecond",displayValue:yz(fz.failureDisplayValue,{timeInMs:o}),details:TotalAdBlockingTime.makeTableDetails(vz,c)}}}sz.exports=TotalAdBlockingTime,sz.exports.UIStrings=fz;const bz=bn,wz=la,Sz=mn,Tz=Tu,Ez=xu,xz=pu,_z=oi,Az=Su;function isBundledEnvironment(){
|
1183
|
+
if(globalThis.isDevtools||globalThis.isLightrider)return!0;try{return require.resolve("lighthouse-logger"),!1}catch(e){return!0}}const mergeOptionsOfItems=function(e){const t=[];for(const r of e){const e=r.path&&t.find((e=>e.path===r.path));e?e.options=Object.assign({},e.options,r.options):t.push(r)}return t};const Rz=function _mergeConfigFragment(e,t,r=!1){if(null==e)return t;if(void 0===t)return e;if(Array.isArray(t)){if(r)return t;if(!Array.isArray(e))throw new TypeError("Expected array but got "+typeof e);const a=e.slice();return t.forEach((e=>{a.some((t=>wz(t,e)))||a.push(e)})),a}if("object"==typeof t){if("object"!=typeof e)throw new TypeError("Expected object but got "+typeof e);if(Array.isArray(e))throw new TypeError("Expected object but got Array");return Object.keys(t).forEach((a=>{const n=r||"settings"===a&&"object"==typeof e[a];e[a]=_mergeConfigFragment(e[a],t[a],n)})),e}return t}
|
1184
|
+
;const kz=new Map([["../gather/gatherers/accessibility",ku],["../gather/gatherers/anchor-elements",Lu],["../gather/gatherers/cache-contents",Pu],["../gather/gatherers/console-messages",Fu],["../gather/gatherers/css-usage",$u],["../gather/gatherers/devtools-log-compat",Vu],["../gather/gatherers/devtools-log",Ws],["../gather/gatherers/dobetterweb/doctype",Hu],["../gather/gatherers/dobetterweb/domstats",Ku],["../gather/gatherers/dobetterweb/optimized-images",nd],["../gather/gatherers/dobetterweb/password-inputs-with-prevented-paste",sd],["../gather/gatherers/dobetterweb/response-compression",gm],["../gather/gatherers/dobetterweb/tags-blocking-first-paint",bm],["../gather/gatherers/full-page-screenshot",_m],["../gather/gatherers/global-listeners",Rm],["../gather/gatherers/iframe-elements",Cm],["../gather/gatherers/image-elements",Fm],["../gather/gatherers/inputs",Bm],["../gather/gatherers/inspector-issues",Vm],["../gather/gatherers/installability-errors",$s],["../gather/gatherers/js-usage",Hm],["../gather/gatherers/link-elements",ip],["../gather/gatherers/main-document-content",dp],["../gather/gatherers/meta-elements",hp],["../gather/gatherers/network-user-agent",Ys],["../gather/gatherers/script-elements",Tp],["../gather/gatherers/seo/embedded-content",_p],["../gather/gatherers/seo/font-size",Im.exports],["../gather/gatherers/seo/robots-txt",Rp],["../gather/gatherers/seo/tap-targets",Lp],["../gather/gatherers/service-worker",Op],["../gather/gatherers/source-maps",jp],["../gather/gatherers/stacks",Xs],["../gather/gatherers/trace-compat",qp],["../gather/gatherers/trace-elements",hh],["../gather/gatherers/trace",oo],["../gather/gatherers/viewport-dimensions",fh],["../gather/gatherers/web-app-manifest",Us],["../audits/accessibility/accesskeys",yh.exports],["../audits/accessibility/aria-allowed-attr",_h.exports],["../audits/accessibility/aria-command-name",Dh.exports],["../audits/accessibility/aria-hidden-body",Lh.exports],["../audits/accessibility/aria-hidden-focus",Fh.exports],["../audits/accessibility/aria-input-field-name",$h.exports],["../audits/accessibility/aria-meter-name",Wh.exports],["../audits/accessibility/aria-progressbar-name",Kh.exports],["../audits/accessibility/aria-required-attr",Qh.exports],["../audits/accessibility/aria-required-children",ag.exports],["../audits/accessibility/aria-required-parent",sg.exports],["../audits/accessibility/aria-roles",dg.exports],["../audits/accessibility/aria-toggle-field-name",gg.exports],["../audits/accessibility/aria-tooltip-name",bg.exports],["../audits/accessibility/aria-treeitem-name",Eg.exports],["../audits/accessibility/aria-valid-attr-value",Rg.exports],["../audits/accessibility/aria-valid-attr",Ig.exports],["../audits/accessibility/button-name",Pg.exports],["../audits/accessibility/bypass",jg.exports],["../audits/accessibility/color-contrast",zg.exports],["../audits/accessibility/definition-list",Gg.exports],["../audits/accessibility/dlitem",Xg.exports],["../audits/accessibility/document-title",tf.exports],["../audits/accessibility/duplicate-id-active",of.exports],["../audits/accessibility/duplicate-id-aria",uf.exports],["../audits/accessibility/form-field-multiple-labels",hf.exports],["../audits/accessibility/frame-title",vf.exports],["../audits/accessibility/heading-order",Tf.exports],["../audits/accessibility/html-has-lang",Af.exports],["../audits/accessibility/html-lang-valid",Cf.exports],["../audits/accessibility/image-alt",Mf.exports],["../audits/accessibility/input-image-alt",Uf.exports],["../audits/accessibility/label",qf.exports],["../audits/accessibility/link-name",Hf.exports],["../audits/accessibility/list",Jf.exports],["../audits/accessibility/listitem",ey.exports],["../audits/accessibility/manual/custom-controls-labels",sy],["../audits/accessibility/manual/custom-controls-roles",ly],["../audits/accessibility/manual/focus-traps",dy],["../audits/accessibility/manual/focusable-controls",py],["../audits/accessibility/manual/interactive-element-affordance",gy],["../audits/accessibility/manual/logical-tab-order",yy],["../audits/accessibility/manual/managed-focus",by],["../audits/accessibility/manual/offscreen-content-hidden",Sy],["../audits/accessibility/manual/use-landmarks",Ey],["../audits/accessibility/manual/visual-order-follows-dom",_y],["../audits/accessibility/meta-refresh",Ay.exports],["../audits/accessibility/meta-viewport",Cy.exports],["../audits/accessibility/object-alt",My.exports],["../audits/accessibility/tabindex",Uy.exports],["../audits/accessibility/td-headers-attr",qy.exports],["../audits/accessibility/th-has-data-cells",Hy.exports],["../audits/accessibility/valid-lang",Jy.exports],["../audits/accessibility/video-caption",ev.exports],["../audits/apple-touch-icon",nv.exports],["../audits/autocomplete",cv.exports],["../audits/bootup-time",yv.exports],["../audits/byte-efficiency/duplicated-javascript",Bv.exports],["../audits/byte-efficiency/efficient-animated-content",Jb.exports],["../audits/byte-efficiency/legacy-javascript",rw.exports],["../audits/byte-efficiency/modern-image-formats",mw.exports],["../audits/byte-efficiency/offscreen-images",vw.exports],["../audits/byte-efficiency/render-blocking-resources",zw.exports],["../audits/byte-efficiency/total-byte-weight",dS.exports],["../audits/byte-efficiency/unminified-css",vS.exports],["../audits/byte-efficiency/unminified-javascript",kS.exports],["../audits/byte-efficiency/unused-css-rules",PS.exports],["../audits/byte-efficiency/unused-javascript",$S.exports],["../audits/byte-efficiency/uses-long-cache-ttl",QS.exports],["../audits/byte-efficiency/uses-optimized-images",lT.exports],["../audits/byte-efficiency/uses-responsive-images-snapshot",gT.exports],["../audits/byte-efficiency/uses-responsive-images",fT.exports],["../audits/byte-efficiency/uses-text-compression",LT.exports],["../audits/content-width",jT.exports],["../audits/critical-request-chains",zT.exports],["../audits/csp-xss",aE.exports],["../audits/deprecations",tx.exports],["../audits/diagnostics",fx],["../audits/dobetterweb/charset",yx.exports],["../audits/dobetterweb/doctype",_x.exports],["../audits/dobetterweb/dom-size",Dx.exports],["../audits/dobetterweb/geolocation-on-start",Mx.exports],["../audits/dobetterweb/inspector-issues",qx.exports],["../audits/dobetterweb/js-libraries",Hx.exports],["../audits/dobetterweb/no-document-write",Xx.exports],["../audits/dobetterweb/no-vulnerable-libraries",r_.exports],["../audits/dobetterweb/notification-on-start",p_.exports],["../audits/dobetterweb/password-inputs-can-be-pasted-into",v_.exports],["../audits/dobetterweb/uses-http2",E_.exports],["../audits/dobetterweb/uses-passive-event-listeners",U_.exports],["../audits/errors-in-console",z_.exports],["../audits/final-screenshot",rA],["../audits/font-display",aA.exports],["../audits/full-page-screenshot",gA],["../audits/image-aspect-ratio",fA.exports],["../audits/image-size-responsive",TA.exports],["../audits/installable-manifest",kA.exports],["../audits/is-on-https",UA.exports],["../audits/largest-contentful-paint-element",HA.exports],["../audits/layout-shift-elements",XA.exports],["../audits/lcp-lazy-loaded",rR.exports],["../audits/long-tasks",sR.exports],["../audits/main-thread-tasks",SR],["../audits/mainthread-work-breakdown",TR.exports],["../audits/manual/pwa-cross-browser",DR.exports],["../audits/manual/pwa-each-page-has-url",LR.exports],["../audits/manual/pwa-page-transitions",FR.exports],["../audits/maskable-icon",$R.exports],["../audits/metrics",UD],["../audits/metrics/cumulative-layout-shift",jD.exports],["../audits/metrics/experimental-interaction-to-next-paint",WD.exports],["../audits/metrics/first-contentful-paint-3g",eC],["../audits/metrics/first-contentful-paint",tC.exports],["../audits/metrics/first-meaningful-paint",sC.exports],["../audits/metrics/interactive",pC.exports],["../audits/metrics/largest-contentful-paint",bC.exports],["../audits/metrics/max-potential-fid",AC.exports],["../audits/metrics/speed-index",NC.exports],["../audits/metrics/total-blocking-time",UC.exports],["../audits/network-requests",YC],["../audits/network-rtt",KC.exports],["../audits/network-server-latency",rI.exports],["../audits/no-unload-listeners",lI.exports],["../audits/non-composited-animations",gI.exports],["../audits/oopif-iframe-test-audit",{
|
1188
1185
|
meta:{id:"oopif-iframe-test-audit",title:"IFrame Elements",failureTitle:"IFrame Elements",description:"Audit to force the inclusion of IFrameElements artifact",requiredArtifacts:["IFrameElements"]},audit:()=>({score:1})
|
1189
|
-
}],["../audits/performance-budget",
|
1190
|
-
;function requireWrapper(e){return
|
1191
|
-
var
|
1192
|
-
;const a=requireWrapper(isBundledEnvironment()?r:resolveModulePath(r,t,"plugin")),n=
|
1193
|
-
;return n.forEach((e=>
|
1194
|
-
throw new Error("Invalid expanded Gatherer: "+JSON.stringify(a))},resolveModulePath,resolveSettings:function resolveSettings$2(e={},t){const r=
|
1195
|
-
Timing:"",PageLoadError:""});class Config$1{constructor(e,t){const r={msg:"Create config",id:"lh:init:config"};
|
1196
|
-
;const i=
|
1197
|
-
;for(const e of t.requiredArtifacts)if(!a.has(e))throw new Error(`${e} gatherer, required by audit ${t.id}, was not found in config.`)}const n=new Set;e.forEach((e=>{const t=e.passName;if(n.has(t))throw new Error(`Passes must have unique names (repeated passName: ${t}.`);n.add(t)}))}(this.passes,this.audits),
|
1198
|
-
;const{defaultPassConfig:t}=
|
1199
|
-
static filterCategoriesAndAudits(e,t){if(!e)return{categories:null,requestedAuditNames:new Set};if(t.onlyAudits&&t.skipAudits)throw new Error("Cannot set both skipAudits and onlyAudits");const r={},a=!!t.onlyCategories,n=!!t.onlyAudits,i=t.onlyCategories||[],o=t.onlyAudits||[],s=t.skipAudits||[];i.forEach((t=>{e[t]||
|
1200
|
-
}else n&&(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));c.auditRefs=c.auditRefs.filter((e=>!s.includes(e.id))),c.auditRefs.length&&(r[t]=c,c.auditRefs.forEach((e=>l.add(e.id))))}));return t.skipAudits&&t.skipAudits.includes("full-page-screenshot")||!t.onlyCategories&&!t.skipAudits||l.add("full-page-screenshot"),{categories:r,requestedAuditNames:l}}static getGatherersRequestedByAudits(e){if(!e)return new Set;const t=new Set;for(const r of e){const{requiredArtifacts:e,__internalOptionalArtifacts:a}=r.implementation.meta;e.forEach((e=>t.add(e))),a&&a.forEach((e=>t.add(e)))}return t}static generatePassesNeededByGatherers(e,t){if(!e)return null;const r=t.has("traces");return e.map((e=>{if(e.gatherers=e.gatherers.filter((e=>{const r=e.instance;return t.has(r.name)})),e.recordTrace&&!r){const t=e.passName||"unknown pass";
|
1201
|
-
})).filter((e=>!!e.recordTrace||("defaultPass"===e.passName||e.gatherers.length>0)))}static requireAudits(e,t){const r={msg:"Requiring audits",id:"lh:config:requireAudits"};
|
1202
|
-
beforePass(e){}pass(e){}afterPass(e,t){}};const
|
1203
|
-
method:r,params:a[0],sessionId:n}),t.call(e,r,...a)},e.emit[
|
1204
|
-
})),i=this._session.send(e,...t);return Promise.race([i,n]).finally((()=>{a&&clearTimeout(a)}))}async dispose(){this._session.removeAllListeners(),await this._session.detach()}_getConnection(){const e=this._session.connection();if(!e)throw new Error("Connection has been closed.");return e}}var
|
1205
|
-
this._executionContext=void 0,this._fetcher=void 0,this.defaultSession=
|
1206
|
-
stopInstrumentation:"stopSensitiveInstrumentation",getArtifact:"stopInstrumentation"};async function collectArtifactDependencies(e,t){if(!e.dependencies)return{};const r=Object.entries(e.dependencies).map((async([e,r])=>{const a=t[r.id];if(void 0===a)throw new Error(`"${r.id}" did not run`);if(a instanceof Error)throw createDependencyError(r,a);const n=Promise.resolve().then((()=>a)).catch((e=>Promise.reject(createDependencyError(r,e))));return[e,await n]}));return Object.fromEntries(await Promise.all(r))}var
|
1207
|
-
const{driver:t,artifactDefinitions:r,artifactState:a,baseArtifacts:n,phase:i,gatherMode:o,computedCache:s,settings:c,url:l}=e,u=
|
1208
|
-
Inputs:"",FullPageScreenshot:"",GlobalListeners:"",IFrameElements:"",ImageElements:"",InstallabilityErrors:"",InspectorIssues:"",JsUsage:"",LinkElements:"",MainDocumentContent:"",MetaElements:"",NetworkUserAgent:"",OptimizedImages:"",PasswordInputsWithPreventedPaste:"",ResponseCompression:"",RobotsTxt:"",ServiceWorker:"",ScriptElements:"",SourceMaps:"",Stacks:"",TagsBlockingFirstPaint:"",TapTargets:"",TraceElements:"",ViewportDimensions:"",WebAppManifest:"",devtoolsLogs:"",traces:""};for(const e of Object.keys(
|
1209
|
-
gatherer:"seo/embedded-content"},{id:
|
1210
|
-
id:
|
1211
|
-
artifacts:[
|
1212
|
-
;for(const t of Object.keys(
|
1213
|
-
return e?e.filter((e=>e.gatherer.instance.meta.supportedModes.includes(t))):null}function filterNavigationsByAvailableArtifacts(e,t){if(!e)return e;const r=new Set(t.map((e=>e.id)).concat(
|
1214
|
-
function filterCategoriesByAvailableAudits(e,t){if(!e)return e;const r=new Map(t.map((e=>[e.implementation.meta.id,e.implementation.meta]))),a=Object.entries(e).map((([e,t])=>{const a={...t,auditRefs:t.auditRefs.filter((e=>r.has(e.id)))},n=a.auditRefs.length<t.auditRefs.length,i=a.auditRefs.every((e=>{const t=r.get(e.id);return!!t&&t.scoreDisplayMode===
|
1215
|
-
;!function warnOnUnknownOnlyCategories(e,t){if(t)for(const r of t)e?.[r]||
|
1216
|
-
;const
|
1217
|
-
;i||
|
1218
|
-
}));return
|
1219
|
-
;const a=new Map,n=
|
1220
|
-
;await a.connect();const n=new Map,i=await a.url(),o={config:r,computedCache:n};return{artifacts:await
|
1221
|
-
}),c=
|
1222
|
-
;async function _setup({driver:e,config:t,requestor:r,options:a}){await e.connect(),a?.skipAboutBlank||await
|
1223
|
-
navigationError:void 0,warnings:o}}catch(e){if(!(e instanceof
|
1224
|
-
;
|
1225
|
-
await async function _cleanupNavigation({driver:e}){await
|
1226
|
-
;
|
1227
|
-
const r=a.config||t.config,{gatherMode:n}=e.GatherContext,{config:s}=
|
1228
|
-
;return this._gatherSteps.some((e=>"navigation"===e.artifacts.GatherContext.gatherMode))&&void 0===a.disableStorageReset&&(a.disableStorageReset=!0),r.settingsOverrides=a,t.configContext=r,t}_addGatherStep(e,t){const r=t?.stepName,a={artifacts:e.artifacts,name:r||this._getDefaultStepName(e.artifacts),config:t.config,configContext:t.configContext};this._gatherSteps.push(a),this._gatherStepRunnerOptions.set(a,e.runnerOptions)}async navigate(e,t){if(this.currentTimespan)throw new Error("Timespan already in progress");const r=this._getNextNavigationOptions(t),a=await
|
1229
|
-
this._addGatherStep(r,t),r}async snapshot(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await
|
1230
|
-
},
|
1231
|
-
plugins:["lighthouse-plugin-publisher-ads"],settings:r}},self.listenForStatus=function listenForStatus(e){Log.events.addListener("status",e),Log.events.addListener("warning",e)},self.registerLocaleData=Vn.registerLocaleData,self.lookupLocale=function lookupCanonicalLocale(e){return oi.lookupLocale(e,Vn.getCanonicalLocales())}):global.runBundledLighthouse=
|
1186
|
+
}],["../audits/performance-budget",SI.exports],["../audits/predictive-perf",VI],["../audits/preload-fonts",WI.exports],["../audits/preload-lcp-image",QI.exports],["../audits/redirects",lN.exports],["../audits/resource-summary",bN.exports],["../audits/screenshot-thumbnails",NN],["../audits/script-treemap-data",FN],["../audits/seo/canonical",UN.exports],["../audits/seo/crawlable-anchors",VN.exports],["../audits/seo/font-size",YN.exports],["../audits/seo/hreflang",iL.exports],["../audits/seo/http-status-code",pL.exports],["../audits/seo/is-crawlable",bL.exports],["../audits/seo/link-text",kL.exports],["../audits/seo/manual/structured-data",ML.exports],["../audits/seo/meta-description",UL.exports],["../audits/seo/plugins",qL.exports],["../audits/seo/robots-txt",ZL.exports],["../audits/seo/tap-targets",uM.exports],["../audits/server-response-time",_M.exports],["../audits/service-worker",LM.exports],["../audits/splash-screen",UM.exports],["../audits/themed-omnibox",WM.exports],["../audits/third-party-facades",XM.exports],["../audits/third-party-summary",ZM.exports],["../audits/timing-budget",vP.exports],["../audits/unsized-images",AP.exports],["../audits/user-timings",NP.exports],["../audits/uses-rel-preconnect",$P.exports],["../audits/uses-rel-preload",tO.exports],["../audits/valid-source-maps",pO.exports],["../audits/viewport",bO.exports],["../audits/work-during-interaction",xO.exports],["lighthouse-plugin-publisher-ads",UO.exports],["lighthouse-plugin-publisher-ads/audits/ad-blocking-tasks",HO.exports],["lighthouse-plugin-publisher-ads/audits/ad-render-blocking-resources",pU.exports],["lighthouse-plugin-publisher-ads/audits/ad-request-critical-path",xU.exports],["lighthouse-plugin-publisher-ads/audits/bid-request-from-page-start",HU.exports],["lighthouse-plugin-publisher-ads/audits/ad-request-from-page-start",sj.exports],["lighthouse-plugin-publisher-ads/audits/ad-top-of-viewport",gj.exports],["lighthouse-plugin-publisher-ads/audits/ads-in-viewport",Ej.exports],["lighthouse-plugin-publisher-ads/audits/async-ad-tags",Lj.exports],["lighthouse-plugin-publisher-ads/audits/blocking-load-events",Hj.exports],["lighthouse-plugin-publisher-ads/audits/bottleneck-requests",cB.exports],["lighthouse-plugin-publisher-ads/audits/duplicate-tags",vB.exports],["lighthouse-plugin-publisher-ads/audits/first-ad-render",IB.exports],["lighthouse-plugin-publisher-ads/audits/full-width-slots",WB.exports],["lighthouse-plugin-publisher-ads/audits/gpt-bids-parallel",e$.exports],["lighthouse-plugin-publisher-ads/audits/loads-gpt-from-official-source",m$.exports],["lighthouse-plugin-publisher-ads/audits/loads-ad-tag-over-https",S$.exports],["lighthouse-plugin-publisher-ads/audits/script-injected-tags",C$.exports],["lighthouse-plugin-publisher-ads/audits/serial-header-bidding",q$.exports],["lighthouse-plugin-publisher-ads/audits/tag-load-time",cq.exports],["lighthouse-plugin-publisher-ads/audits/viewport-ad-density",Eq.exports],["lighthouse-plugin-publisher-ads/audits/cumulative-ad-shift",Iq.exports],["lighthouse-plugin-publisher-ads/audits/deprecated-api-usage",zq.exports],["lighthouse-plugin-publisher-ads/audits/gpt-errors-overall",Zq.exports],["lighthouse-plugin-publisher-ads/audits/total-ad-blocking-time",sz.exports]])
|
1187
|
+
;function requireWrapper(e){return kz.get(e)||function commonjsRequire(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(e)}function resolveModulePath(e,t,r){try{return require.resolve(e)}catch(e){}try{return require.resolve(e,{paths:[process.cwd()]})}catch(e){}const a=bz.resolve(process.cwd(),e);try{return require.resolve(a)}catch(e){}const n="Unable to locate "+(r?`${r}: `:"")+`\`${e}\`.\n Tried to require() from these locations:\n lighthouse-core/config\n ${a}`;if(!t)throw new Error(n);const i=bz.resolve(t,e);try{return require.resolve(i)}catch(e){}try{return require.resolve(e,{paths:[t]})}catch(e){}throw new Error(n+`\n ${i}`)}function shallowClone(e){return"object"==typeof e?Object.assign(Object.create(Object.getPrototypeOf(e)),e):e}function deepClone$2(e){return JSON.parse(JSON.stringify(e))}
|
1188
|
+
var Dz={deepClone:deepClone$2,deepCloneConfigJson:function deepCloneConfigJson$2(e){const t=deepClone$2(e);if(Array.isArray(t.passes)&&Array.isArray(e.passes))for(let r=0;r<t.passes.length;r++){t.passes[r].gatherers=(e.passes[r].gatherers||[]).map((e=>shallowClone(e)))}return Array.isArray(e.audits)&&(t.audits=e.audits.map((e=>shallowClone(e)))),Array.isArray(e.artifacts)&&(t.artifacts=e.artifacts.map((e=>({...e,gatherer:shallowClone(e.gatherer)})))),t},mergeConfigFragment:Rz,mergeConfigFragmentArrayByKey:function mergeConfigFragmentArrayByKey$1(e,t,r){const a=new Map,n=e||[];for(let e=0;e<n.length;e++){const t=n[e];a.set(r(t),{index:e,item:t})}for(const e of t||[]){const t=a.get(r(e));if(t){const r=t.item,a="object"==typeof e&&"object"==typeof r?Rz(r,e,!0):e;n[t.index]=a}else n.push(e)}return n},mergeOptionsOfItems,mergePlugins:function mergePlugins$2(e,t,r){const a=e.plugins||[],n=new Set([...a,...r?.plugins||[]]);for(const r of n){Az.assertValidPluginName(e,r)
|
1189
|
+
;const a=requireWrapper(isBundledEnvironment()?r:resolveModulePath(r,t,"plugin")),n=Ez.parsePlugin(a,r);e=Rz(e,n)}return e},resolveAuditsToDefns:function resolveAuditsToDefns$2(e,t){if(!e)return null;const r=xz.getAuditList(),a=e.map((e=>{const a=function expandAuditShorthand(e){if("string"==typeof e)return{path:e,options:{}};if("implementation"in e&&"function"==typeof e.implementation.audit)return e;if("path"in e&&"string"==typeof e.path)return e;if("audit"in e&&"function"==typeof e.audit)return{implementation:e,options:{}};throw new Error("Invalid Audit type "+JSON.stringify(e))}(e);let n;return n="implementation"in a?a.implementation:function requireAudit(e,t,r){const a=`${e}.js`;let n=`../audits/${e}`;if(!t.find((e=>e===a)))if(isBundledEnvironment())n=e;else{const t=resolveModulePath(e,r,"audit");n=bz.relative("lighthouse-core/config",t)}return requireWrapper(n)}(a.path,r,t),{implementation:n,path:a.path,options:a.options||{}}})),n=mergeOptionsOfItems(a)
|
1190
|
+
;return n.forEach((e=>Az.assertValidAudit(e))),n},resolveGathererToDefn:function resolveGathererToDefn$2(e,t,r){const a=function expandGathererShorthand(e){if("string"==typeof e)return{path:e};if("implementation"in e||"instance"in e)return e;if("path"in e){if("string"!=typeof e.path)throw new Error("Invalid Gatherer type "+JSON.stringify(e));return e}if("function"==typeof e)return{implementation:e};if(e&&"function"==typeof e.beforePass)return{instance:e};throw new Error("Invalid Gatherer type "+JSON.stringify(e))}(e);if(a.instance)return{instance:a.instance,implementation:a.implementation,path:a.path};if(a.implementation){return{instance:new(0,a.implementation),implementation:a.implementation,path:a.path}}if(a.path){return function requireGatherer(e,t,r){const a=t.find((t=>t===`${e}.js`));let n=`../gather/gatherers/${e}`;a||(n=resolveModulePath(e,r,"gatherer"));const i=requireWrapper(n);return{instance:new i,implementation:i,path:e}}(a.path,t,r)}
|
1191
|
+
throw new Error("Invalid expanded Gatherer: "+JSON.stringify(a))},resolveModulePath,resolveSettings:function resolveSettings$2(e={},t){const r=_z.lookupLocale(t?.locale||e.locale),{defaultSettings:a}=Sz,n=Rz(deepClone$2(a),e,!0),i=Rz(n,function cleanFlagsForSettings(e={}){const t={};for(const r of Object.keys(e))r in Sz.defaultSettings&&(t[r]=e[r]);return t}(t),!0);return i.budgets&&(i.budgets=Tz.initializeBudget(i.budgets)),i.locale=r,!0===i.emulatedUserAgent&&(i.emulatedUserAgent=Sz.userAgents[i.formFactor]),Az.assertValidSettings(i),i}};const Cz=gu.exports,Iz=mn,Nz=Vn,Lz=Su,Mz=on.default,Pz=bn,Oz=pu,{mergePlugins:Fz,mergeConfigFragment:Uz,resolveSettings:jz,resolveAuditsToDefns:Bz,resolveGathererToDefn:$z,deepClone:qz,deepCloneConfigJson:zz}=Dz,Vz=Object.keys({fetchTime:"",LighthouseRunWarnings:"",HostFormFactor:"",HostUserAgent:"",NetworkUserAgent:"",BenchmarkIndex:"",WebAppManifest:"",GatherContext:"",InstallabilityErrors:"",Stacks:"",traces:"",devtoolsLogs:"",settings:"",URL:"",
|
1192
|
+
Timing:"",PageLoadError:""});class Config$1{constructor(e,t){const r={msg:"Create config",id:"lh:init:config"};Mz.time(r,"verbose");let a=t?.configPath;if(e||(e=Cz,a=Pz.resolve("lighthouse-core/config","./default-config.js")),a&&!Pz.isAbsolute(a))throw new Error("configPath must be an absolute path.");if((e=zz(e)).extends){if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");e=Config$1.extendConfigJSON(zz(Cz),e)}const n=a?Pz.dirname(a):void 0;e=Fz(e,n,t),t&&function assertValidFlags(e){if("devtools"===e.channel&&e.internalDisableDeviceScreenEmulation&&(e.formFactor=e.emulatedFormFactor,e.emulatedFormFactor=e.internalDisableDeviceScreenEmulation=void 0),e.emulatedFormFactor||e.internalDisableDeviceScreenEmulation)throw new Error("Invalid emulation flag. Emulation configuration changed in LH 7.0. See https://github.com/GoogleChrome/lighthouse/blob/master/docs/emulation.md")}(t)
|
1193
|
+
;const i=jz(e.settings||{},t),o=Config$1.augmentPassesWithDefaults(e.passes);Config$1.adjustDefaultPassForThrottling(i,o);const s=Config$1.requireGatherers(o,n);this.settings=i,this.passes=s,this.audits=Config$1.requireAudits(e.audits,n),this.categories=e.categories||null,this.groups=e.groups||null,Config$1.filterConfigIfNeeded(this),function assertValidPasses(e,t){if(!Array.isArray(e))return;const r=Config$1.getGatherersRequestedByAudits(t),a=new Set(Vz);e.forEach(((e,t)=>{0===t&&"fatal"!==e.loadFailureMode&&(Mz.warn(`"${e.passName}" is the first pass but was marked as non-fatal. The first pass will always be treated as loadFailureMode=fatal.`),e.loadFailureMode="fatal"),e.gatherers.forEach((e=>{const t=e.instance;if(a.add(t.name),!r.has(t.name)){const e=`${t.name} gatherer requested, however no audit requires it.`;Mz.warn("config",e)}}))}));for(const e of t||[]){const t=e.implementation.meta
|
1194
|
+
;for(const e of t.requiredArtifacts)if(!a.has(e))throw new Error(`${e} gatherer, required by audit ${t.id}, was not found in config.`)}const n=new Set;e.forEach((e=>{const t=e.passName;if(n.has(t))throw new Error(`Passes must have unique names (repeated passName: ${t}.`);n.add(t)}))}(this.passes,this.audits),Lz.assertValidCategories(this.categories,this.audits,this.groups),Mz.timeEnd(r)}getPrintString(){const e=qz(this);if(e.passes)for(const t of e.passes)for(const e of t.gatherers)e.implementation=void 0,e.instance=void 0;if(e.audits)for(const t of e.audits)t.implementation=void 0,0===Object.keys(t.options).length&&(t.options=void 0);return Nz.replaceIcuMessages(e,e.settings.locale),JSON.stringify(e,null,2)}static extendConfigJSON(e,t){if(t.passes&&e.passes){for(const r of t.passes){const t=r.passName||Iz.defaultPassConfig.passName,a=e.passes.find((e=>e.passName===t));a?Uz(a,r):e.passes.push(r)}delete t.passes}return Uz(e,t)}static augmentPassesWithDefaults(e){if(!e)return null
|
1195
|
+
;const{defaultPassConfig:t}=Iz;return e.map((e=>Uz(qz(t),e)))}static adjustDefaultPassForThrottling(e,t){if(!t||"devtools"!==e.throttlingMethod&&"provided"!==e.throttlingMethod)return;const r=t.find((e=>"defaultPass"===e.passName));if(!r)return;const a=Iz.nonSimulatedPassConfigOverrides;r.pauseAfterFcpMs=Math.max(a.pauseAfterFcpMs,r.pauseAfterFcpMs),r.pauseAfterLoadMs=Math.max(a.pauseAfterLoadMs,r.pauseAfterLoadMs),r.cpuQuietThresholdMs=Math.max(a.cpuQuietThresholdMs,r.cpuQuietThresholdMs),r.networkQuietThresholdMs=Math.max(a.networkQuietThresholdMs,r.networkQuietThresholdMs)}static filterConfigIfNeeded(e){const t=e.settings;if(!t.onlyCategories&&!t.onlyAudits&&!t.skipAudits)return;const{categories:r,requestedAuditNames:a}=Config$1.filterCategoriesAndAudits(e.categories,t),n=e.audits&&e.audits.filter((e=>a.has(e.implementation.meta.id))),i=Config$1.getGatherersRequestedByAudits(n),o=Config$1.generatePassesNeededByGatherers(e.passes,i);e.categories=r,e.audits=n,e.passes=o}
|
1196
|
+
static filterCategoriesAndAudits(e,t){if(!e)return{categories:null,requestedAuditNames:new Set};if(t.onlyAudits&&t.skipAudits)throw new Error("Cannot set both skipAudits and onlyAudits");const r={},a=!!t.onlyCategories,n=!!t.onlyAudits,i=t.onlyCategories||[],o=t.onlyAudits||[],s=t.skipAudits||[];i.forEach((t=>{e[t]||Mz.warn("config",`unrecognized category in 'onlyCategories': ${t}`)}));const c=new Set(o.concat(s));for(const t of c){const r=Object.keys(e).find((r=>!!e[r].auditRefs.find((e=>e.id===t))));if(r)o.includes(t)&&i.includes(r)&&Mz.warn("config",`${t} in 'onlyAudits' is already included by ${r} in 'onlyCategories'`);else{const e=s.includes(t)?"skipAudits":"onlyAudits";Mz.warn("config",`unrecognized audit in '${e}': ${t}`)}}const l=new Set(o);s.forEach((e=>l.delete(e))),Object.keys(e).forEach((t=>{const c=qz(e[t]);if(a&&n)i.includes(t)||(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));else if(a){if(!i.includes(t))return
|
1197
|
+
}else n&&(c.auditRefs=c.auditRefs.filter((e=>o.includes(e.id))));c.auditRefs=c.auditRefs.filter((e=>!s.includes(e.id))),c.auditRefs.length&&(r[t]=c,c.auditRefs.forEach((e=>l.add(e.id))))}));return t.skipAudits&&t.skipAudits.includes("full-page-screenshot")||!t.onlyCategories&&!t.skipAudits||l.add("full-page-screenshot"),{categories:r,requestedAuditNames:l}}static getGatherersRequestedByAudits(e){if(!e)return new Set;const t=new Set;for(const r of e){const{requiredArtifacts:e,__internalOptionalArtifacts:a}=r.implementation.meta;e.forEach((e=>t.add(e))),a&&a.forEach((e=>t.add(e)))}return t}static generatePassesNeededByGatherers(e,t){if(!e)return null;const r=t.has("traces");return e.map((e=>{if(e.gatherers=e.gatherers.filter((e=>{const r=e.instance;return t.has(r.name)})),e.recordTrace&&!r){const t=e.passName||"unknown pass";Mz.warn("config",`Trace not requested by an audit, dropping trace in ${t}`),e.recordTrace=!1}return e
|
1198
|
+
})).filter((e=>!!e.recordTrace||("defaultPass"===e.passName||e.gatherers.length>0)))}static requireAudits(e,t){const r={msg:"Requiring audits",id:"lh:config:requireAudits"};Mz.time(r,"verbose");const a=Bz(e,t);return Mz.timeEnd(r),a}static requireGatherers(e,t){if(!e)return null;const r={msg:"Requiring gatherers",id:"lh:config:requireGatherers"};Mz.time(r,"verbose");const a=Oz.getGathererList(),n=e.map((e=>{const r=e.gatherers.map((e=>$z(e,a,t))),n=Array.from(new Map(r.map((e=>[e.instance.name,e]))).values());return n.forEach((e=>function assertValidGatherer(e,t){if(t=t||e.name||"gatherer","function"!=typeof e.beforePass)throw new Error(`${t} has no beforePass() method.`);if("function"!=typeof e.pass)throw new Error(`${t} has no pass() method.`);if("function"!=typeof e.afterPass)throw new Error(`${t} has no afterPass() method.`)}(e.instance,e.path))),Object.assign(e,{gatherers:n})}));return Mz.timeEnd(r),n}}var Wz=Config$1;var Hz=class Gatherer{get name(){return this.constructor.name}
|
1199
|
+
beforePass(e){}pass(e){}afterPass(e,t){}};const Gz=pu,Yz=on.default,Kz=hu,Jz=Wz,Xz=ji;async function lighthouse(e,t={},r,a){t.logLevel=t.logLevel||"error",Yz.setLevel(t.logLevel);const n={config:generateConfig(r,t),computedCache:new Map},i=a||new Kz(t.port,t.hostname),o=await Gz.gather((()=>{const t=Xz.normalizeUrl(e);return Gz._gatherArtifactsFromBrowser(t,n,i)}),n);return Gz.audit(o,n)}function generateConfig(e,t){return new Jz(e,t)}lighthouse.generateConfig=generateConfig,lighthouse.getAuditList=Gz.getAuditList,lighthouse.traceCategories=To.traceCategories,lighthouse.Audit=kc,lighthouse.Gatherer=Hz,lighthouse.NetworkRecords=Lo;var Zz=lighthouse;const Qz=vi.exports,eV=Symbol("monkeypatch");class ProtocolSession$1{constructor(e){this._session=e,this._targetInfo=void 0,this._nextProtocolTimeout=void 0,this._callbackMap=new WeakMap;const t=e.emit;t[eV]||(e.emit=(r,...a)=>{const n=this._targetInfo&&"iframe"===this._targetInfo.type?this._targetInfo.targetId:void 0;return t.call(e,"*",{
|
1200
|
+
method:r,params:a[0],sessionId:n}),t.call(e,r,...a)},e.emit[eV]=!0)}setTargetInfo(e){this._targetInfo=e}hasNextProtocolTimeout(){return void 0!==this._nextProtocolTimeout}getNextProtocolTimeout(){return this._nextProtocolTimeout||3e4}setNextProtocolTimeout(e){this._nextProtocolTimeout=e}on(e,t){this._session.on(e,t)}once(e,t){this._session.once(e,t)}addSessionAttachedListener(e){const listener=t=>e(new ProtocolSession$1(t));this._callbackMap.set(e,listener),this._getConnection().on("sessionattached",listener)}removeSessionAttachedListener(e){const t=this._callbackMap.get(e);t&&this._getConnection().off("sessionattached",t)}addProtocolMessageListener(e){this._session.on("*",e)}removeProtocolMessageListener(e){this._session.off("*",e)}off(e,t){this._session.off(e,t)}sendCommand(e,...t){const r=this.getNextProtocolTimeout();let a;this._nextProtocolTimeout=void 0;const n=new Promise(((t,n)=>{r!==1/0&&(a=setTimeout(n,r,new Qz(Qz.errors.PROTOCOL_TIMEOUT,{protocolMethod:e})))
|
1201
|
+
})),i=this._session.send(e,...t);return Promise.race([i,n]).finally((()=>{a&&clearTimeout(a)}))}async dispose(){this._session.removeAllListeners(),await this._session.detach()}_getConnection(){const e=this._session.connection();if(!e)throw new Error("Connection has been closed.");return e}}var tV=ProtocolSession$1;const rV=on.default,aV=tV,nV=yi,iV=gi,throwNotConnectedFn=()=>{throw new Error("Session not connected")},oV={setTargetInfo:throwNotConnectedFn,hasNextProtocolTimeout:throwNotConnectedFn,getNextProtocolTimeout:throwNotConnectedFn,setNextProtocolTimeout:throwNotConnectedFn,on:throwNotConnectedFn,once:throwNotConnectedFn,off:throwNotConnectedFn,addProtocolMessageListener:throwNotConnectedFn,removeProtocolMessageListener:throwNotConnectedFn,addSessionAttachedListener:throwNotConnectedFn,removeSessionAttachedListener:throwNotConnectedFn,sendCommand:throwNotConnectedFn,dispose:throwNotConnectedFn};var sV=class Driver$3{constructor(e){this._page=e,this._session=void 0,
|
1202
|
+
this._executionContext=void 0,this._fetcher=void 0,this.defaultSession=oV}get executionContext(){return this._executionContext?this._executionContext:throwNotConnectedFn()}get fetcher(){return this._fetcher?this._fetcher:throwNotConnectedFn()}async url(){return this._page.url()}async connect(){if(this._session)return;const e={msg:"Connecting to browser",id:"lh:driver:connect"};rV.time(e);const t=await this._page.target().createCDPSession();this._session=this.defaultSession=new aV(t),this._executionContext=new nV(this._session),this._fetcher=new iV(this._session,this._executionContext),rV.timeEnd(e)}async disconnect(){this._session&&await this._session.dispose()}};const cV=on.default;function createDependencyError(e,t){return new Error(`Dependency "${e.id}" failed with exception: ${t.message}`)}const lV={startInstrumentation:void 0,startSensitiveInstrumentation:"startInstrumentation",stopSensitiveInstrumentation:"startSensitiveInstrumentation",
|
1203
|
+
stopInstrumentation:"stopSensitiveInstrumentation",getArtifact:"stopInstrumentation"};async function collectArtifactDependencies(e,t){if(!e.dependencies)return{};const r=Object.entries(e.dependencies).map((async([e,r])=>{const a=t[r.id];if(void 0===a)throw new Error(`"${r.id}" did not run`);if(a instanceof Error)throw createDependencyError(r,a);const n=Promise.resolve().then((()=>a)).catch((e=>Promise.reject(createDependencyError(r,e))));return[e,await n]}));return Object.fromEntries(await Promise.all(r))}var uV={getEmptyArtifactState:function getEmptyArtifactState$3(){return{startInstrumentation:{},startSensitiveInstrumentation:{},stopSensitiveInstrumentation:{},stopInstrumentation:{},getArtifact:{}}},awaitArtifacts:async function awaitArtifacts$3(e){const t={};for(const[r,a]of Object.entries(e.getArtifact)){const e=await a.catch((e=>e));void 0!==e&&(t[r]=e)}return t},collectPhaseArtifacts:async function collectPhaseArtifacts$3(e){
|
1204
|
+
const{driver:t,artifactDefinitions:r,artifactState:a,baseArtifacts:n,phase:i,gatherMode:o,computedCache:s,settings:c,url:l}=e,u=lV[i],d=u&&a[u]||{};for(const e of r){cV["getArtifact"===i?"log":"verbose"](`artifacts:${i}`,e.id);const r=e.gatherer.instance,u=(d[e.id]||Promise.resolve()).then((async()=>{const u="getArtifact"===i?await collectArtifactDependencies(e,a.getArtifact):{};return r[i]({url:l,gatherMode:o,driver:t,baseArtifacts:n,dependencies:u,computedCache:s,settings:c})}));await u.catch((()=>{})),a[i][e.id]=u}},collectArtifactDependencies};const dV=gu.exports,mV=yu,{deepClone:pV}=Dz,hV={performance:[{id:"uses-responsive-images-snapshot",weight:0},{id:"experimental-interaction-to-next-paint",weight:0,group:"metrics",acronym:"INP",relevantAudits:mV.inpRelevantAudits},{id:"work-during-interaction",weight:0}]};const gV={DevtoolsLog:"",Trace:"",Accessibility:"",AnchorElements:"",CacheContents:"",ConsoleMessages:"",CSSUsage:"",Doctype:"",DOMStats:"",EmbeddedContent:"",FontSize:"",
|
1205
|
+
Inputs:"",FullPageScreenshot:"",GlobalListeners:"",IFrameElements:"",ImageElements:"",InstallabilityErrors:"",InspectorIssues:"",JsUsage:"",LinkElements:"",MainDocumentContent:"",MetaElements:"",NetworkUserAgent:"",OptimizedImages:"",PasswordInputsWithPreventedPaste:"",ResponseCompression:"",RobotsTxt:"",ServiceWorker:"",ScriptElements:"",SourceMaps:"",Stacks:"",TagsBlockingFirstPaint:"",TapTargets:"",TraceElements:"",ViewportDimensions:"",WebAppManifest:"",devtoolsLogs:"",traces:""};for(const e of Object.keys(gV))gV[e]=e;var fV={artifacts:[{id:gV.DevtoolsLog,gatherer:"devtools-log"},{id:gV.Trace,gatherer:"trace"},{id:gV.Accessibility,gatherer:"accessibility"},{id:gV.AnchorElements,gatherer:"anchor-elements"},{id:gV.CacheContents,gatherer:"cache-contents"},{id:gV.ConsoleMessages,gatherer:"console-messages"},{id:gV.CSSUsage,gatherer:"css-usage"},{id:gV.Doctype,gatherer:"dobetterweb/doctype"},{id:gV.DOMStats,gatherer:"dobetterweb/domstats"},{id:gV.EmbeddedContent,
|
1206
|
+
gatherer:"seo/embedded-content"},{id:gV.FontSize,gatherer:"seo/font-size"},{id:gV.Inputs,gatherer:"inputs"},{id:gV.GlobalListeners,gatherer:"global-listeners"},{id:gV.IFrameElements,gatherer:"iframe-elements"},{id:gV.ImageElements,gatherer:"image-elements"},{id:gV.InstallabilityErrors,gatherer:"installability-errors"},{id:gV.InspectorIssues,gatherer:"inspector-issues"},{id:gV.JsUsage,gatherer:"js-usage"},{id:gV.LinkElements,gatherer:"link-elements"},{id:gV.MainDocumentContent,gatherer:"main-document-content"},{id:gV.MetaElements,gatherer:"meta-elements"},{id:gV.NetworkUserAgent,gatherer:"network-user-agent"},{id:gV.OptimizedImages,gatherer:"dobetterweb/optimized-images"},{id:gV.PasswordInputsWithPreventedPaste,gatherer:"dobetterweb/password-inputs-with-prevented-paste"},{id:gV.ResponseCompression,gatherer:"dobetterweb/response-compression"},{id:gV.RobotsTxt,gatherer:"seo/robots-txt"},{id:gV.ServiceWorker,gatherer:"service-worker"},{id:gV.ScriptElements,gatherer:"script-elements"},{
|
1207
|
+
id:gV.SourceMaps,gatherer:"source-maps"},{id:gV.Stacks,gatherer:"stacks"},{id:gV.TagsBlockingFirstPaint,gatherer:"dobetterweb/tags-blocking-first-paint"},{id:gV.TapTargets,gatherer:"seo/tap-targets"},{id:gV.TraceElements,gatherer:"trace-elements"},{id:gV.ViewportDimensions,gatherer:"viewport-dimensions"},{id:gV.WebAppManifest,gatherer:"web-app-manifest"},{id:gV.devtoolsLogs,gatherer:"devtools-log-compat"},{id:gV.traces,gatherer:"trace-compat"},{id:gV.FullPageScreenshot,gatherer:"full-page-screenshot"}],navigations:[{id:"default",pauseAfterFcpMs:1e3,pauseAfterLoadMs:1e3,networkQuietThresholdMs:1e3,cpuQuietThresholdMs:1e3,
|
1208
|
+
artifacts:[gV.DevtoolsLog,gV.Trace,gV.Accessibility,gV.AnchorElements,gV.CacheContents,gV.ConsoleMessages,gV.CSSUsage,gV.Doctype,gV.DOMStats,gV.EmbeddedContent,gV.FontSize,gV.Inputs,gV.GlobalListeners,gV.IFrameElements,gV.ImageElements,gV.InstallabilityErrors,gV.InspectorIssues,gV.JsUsage,gV.LinkElements,gV.MainDocumentContent,gV.MetaElements,gV.NetworkUserAgent,gV.OptimizedImages,gV.PasswordInputsWithPreventedPaste,gV.ResponseCompression,gV.RobotsTxt,gV.ServiceWorker,gV.ScriptElements,gV.SourceMaps,gV.Stacks,gV.TagsBlockingFirstPaint,gV.TapTargets,gV.TraceElements,gV.ViewportDimensions,gV.WebAppManifest,gV.devtoolsLogs,gV.traces,gV.FullPageScreenshot]}],settings:dV.settings,audits:[...(dV.audits||[]).map((e=>"string"==typeof e?{path:e}:e)),"byte-efficiency/uses-responsive-images-snapshot","metrics/experimental-interaction-to-next-paint","work-during-interaction"],categories:function mergeCategories(){if(!dV.categories)return{};const e=pV(dV.categories)
|
1209
|
+
;for(const t of Object.keys(hV))e[t]&&e[t].auditRefs.push(...hV[t]);return e}(),groups:dV.groups};const yV=on.default,vV=kc,bV=Object.keys({fetchTime:"",LighthouseRunWarnings:"",BenchmarkIndex:"",settings:"",Timing:"",URL:"",PageLoadError:"",HostFormFactor:"",HostUserAgent:"",GatherContext:""}),wV=["full-page-screenshot"],SV=["HostUserAgent","HostFormFactor","Stacks","GatherContext"];function getAuditIdsInCategories(e,t){if(!e)return new Set;const r=(t=t||Object.keys(e)).map((t=>e[t])).flatMap((e=>e?.auditRefs||[]));return new Set(r.map((e=>e.id)))}function filterArtifactsByAvailableAudits(e,t){if(!e)return null;if(!t)return e;const r=new Map(e.map((e=>[e.id,e]))),a=new Set([...SV,...t.flatMap((e=>e.implementation.meta.requiredArtifacts))]);let n=0;for(;n!==a.size;){n=a.size;for(const e of a){const t=r.get(e);if(t&&t.dependencies)for(const e of Object.values(t.dependencies))a.add(e.id)}}return e.filter((e=>a.has(e.id)))}function filterArtifactsByGatherMode(e,t){
|
1210
|
+
return e?e.filter((e=>e.gatherer.instance.meta.supportedModes.includes(t))):null}function filterNavigationsByAvailableArtifacts(e,t){if(!e)return e;const r=new Set(t.map((e=>e.id)).concat(bV));return e.map((e=>({...e,artifacts:e.artifacts.filter((e=>r.has(e.id)))}))).filter((e=>e.artifacts.length))}function filterAuditsByAvailableArtifacts(e,t){if(!e)return null;const r=new Set(t.map((e=>e.id)).concat(bV));return e.filter((e=>e.implementation.meta.requiredArtifacts.every((e=>r.has(e)))))}function filterAuditsByGatherMode(e,t){return e?e.filter((e=>{const r=e.implementation.meta;return!r.supportedModes||r.supportedModes.includes(t)})):null}function filterCategoriesByGatherMode(e,t){if(!e)return null;const r=Object.entries(e).filter((([e,r])=>!r.supportedModes||r.supportedModes.includes(t)));return Object.fromEntries(r)}function filterCategoriesByExplicitFilters(e,t){if(!e||!t)return e;const r=Object.entries(e).filter((([e])=>t.includes(e)));return Object.fromEntries(r)}
|
1211
|
+
function filterCategoriesByAvailableAudits(e,t){if(!e)return e;const r=new Map(t.map((e=>[e.implementation.meta.id,e.implementation.meta]))),a=Object.entries(e).map((([e,t])=>{const a={...t,auditRefs:t.auditRefs.filter((e=>r.has(e.id)))},n=a.auditRefs.length<t.auditRefs.length,i=a.auditRefs.every((e=>{const t=r.get(e.id);return!!t&&t.scoreDisplayMode===vV.SCORING_MODES.MANUAL}));return n&&i&&(a.auditRefs=[]),[e,a]})).filter((e=>"object"==typeof e[1]&&e[1].auditRefs.length));return Object.fromEntries(a)}var TV={filterConfigByGatherMode:function filterConfigByGatherMode$1(e,t){const r=filterArtifactsByGatherMode(e.artifacts,t),a=filterAuditsByAvailableArtifacts(filterAuditsByGatherMode(e.audits,t),r||[]),n=filterCategoriesByAvailableAudits(filterCategoriesByGatherMode(e.categories,t),a||[]);return{...e,artifacts:r,audits:a,categories:n}},filterConfigByExplicitFilters:function filterConfigByExplicitFilters$1(e,t){const{onlyAudits:r,onlyCategories:a,skipAudits:n}=t
|
1212
|
+
;!function warnOnUnknownOnlyCategories(e,t){if(t)for(const r of t)e?.[r]||yV.warn("config",`unrecognized category in 'onlyCategories': ${r}`)}(e.categories,a);let i=getAuditIdsInCategories(e.categories,void 0);a?i=getAuditIdsInCategories(e.categories,a):r&&(i=new Set);const o=new Set([...i,...r||[],...wV].filter((e=>!n||!n.includes(e)))),s=o.size&&e.audits?e.audits.filter((e=>o.has(e.implementation.meta.id))):e.audits,c=filterCategoriesByExplicitFilters(filterCategoriesByAvailableAudits(e.categories,s||[]),a),l=filterArtifactsByAvailableAudits(e.artifacts,s),u=filterNavigationsByAvailableArtifacts(e.navigations,l||[]);return{...e,artifacts:l,navigations:u,audits:s,categories:c}},filterArtifactsByGatherMode,filterArtifactsByAvailableAudits,filterNavigationsByAvailableArtifacts,filterAuditsByAvailableArtifacts,filterAuditsByGatherMode,filterCategoriesByAvailableAudits,filterCategoriesByExplicitFilters,filterCategoriesByGatherMode}
|
1213
|
+
;const EV=bn,xV=on.default,_V=pu,AV=fV,{defaultNavigationConfig:RV,nonSimulatedPassConfigOverrides:kV}=mn,{isFRGathererDefn:DV,throwInvalidDependencyOrder:CV,isValidArtifactDependency:IV,throwInvalidArtifactDependency:NV,assertArtifactTopologicalOrder:LV,assertValidConfig:MV}=Su,{filterConfigByGatherMode:PV,filterConfigByExplicitFilters:OV}=TV,{deepCloneConfigJson:FV,resolveSettings:UV,resolveAuditsToDefns:jV,resolveGathererToDefn:BV,mergePlugins:$V,mergeConfigFragment:qV,mergeConfigFragmentArrayByKey:zV}=Dz,VV=EV.join("lighthouse-core/fraggle-rock/config","./default-config.js");function resolveWorkingCopy(e,t){let{configPath:r}=t;if(r&&!EV.isAbsolute(r))throw new Error("configPath must be an absolute path");e||(e=AV,r=VV);const a=r?EV.dirname(r):void 0;return{configWorkingCopy:FV(e),configPath:r,configDir:a}}function resolveArtifactDependencies(e,t,r){if(!("dependencies"in t.instance.meta))return;const a=Object.entries(t.instance.meta.dependencies).map((([a,n])=>{const i=r.get(n)
|
1214
|
+
;i||CV(e.id,a);return IV(t,i.gatherer)||NV(e.id,a),[a,{id:i.id}]}));return Object.fromEntries(a)}function resolveNavigationsToDefns(e,t,r){if(!e)return null;if(!t)throw new Error("Cannot use navigations without defining artifacts");const a={msg:"Resolve navigation definitions",id:"lh:config:resolveNavigationsToDefns"};xV.time(a,"verbose");const n=new Map(t.map((e=>[e.id,e]))),i=e.map((e=>{const t={...RV,...e},a=t.id,i=t.artifacts.map((e=>{const t=n.get(e);if(!t)throw new Error(`Unrecognized artifact "${e}" in navigation "${a}"`);return t})),o={...t,artifacts:i};return function overrideNavigationThrottlingWindows(e,t){e.disableThrottling||"simulate"!==t.throttlingMethod&&(e.cpuQuietThresholdMs=Math.max(e.cpuQuietThresholdMs||0,kV.cpuQuietThresholdMs),e.networkQuietThresholdMs=Math.max(e.networkQuietThresholdMs||0,kV.networkQuietThresholdMs),e.pauseAfterFcpMs=Math.max(e.pauseAfterFcpMs||0,kV.pauseAfterFcpMs),e.pauseAfterLoadMs=Math.max(e.pauseAfterLoadMs||0,kV.pauseAfterLoadMs))}(o,r),o
|
1215
|
+
}));return LV(i),xV.timeEnd(a),i}var WV={resolveWorkingCopy,initializeConfig:function initializeConfig$4(e,t){const r={msg:"Initialize config",id:"lh:config"};xV.time(r,"verbose");let{configWorkingCopy:a,configDir:n}=resolveWorkingCopy(e,t);a=function resolveExtensions(e){if(!e.extends)return e;if("lighthouse:default"!==e.extends)throw new Error("`lighthouse:default` is the only valid extension method.");const{artifacts:t,navigations:r,...a}=e,n=FV(AV),i=qV(n,a);return i.artifacts=zV(n.artifacts,t,(e=>e.id)),i.navigations=zV(n.navigations,r,(e=>e.id)),i}(a),a=$V(a,n,t.settingsOverrides);const i=UV(a.settings||{},t.settingsOverrides);!function overrideSettingsForGatherMode(e,t){"timespan"===t.gatherMode&&"simulate"===e.throttlingMethod&&(e.throttlingMethod="devtools")}(i,t);const o=function resolveArtifactsToDefns(e,t){if(!e)return null;const r={msg:"Resolve artifact definitions",id:"lh:config:resolveArtifactsToDefns"};xV.time(r,"verbose")
|
1216
|
+
;const a=new Map,n=_V.getGathererList(),i=e.map((e=>{const r=e.gatherer,i=BV(r,n,t);if(!DV(i))throw new Error(`${i.instance.name} gatherer does not have a Fraggle Rock meta obj`);const o={id:e.id,gatherer:i,dependencies:resolveArtifactDependencies(e,i,a)},s=o.gatherer.instance.meta.symbol;return s&&a.set(s,o),o}));return xV.timeEnd(r),i}(a.artifacts,n);let s={artifacts:o,navigations:resolveNavigationsToDefns(a.navigations,o,i),audits:jV(a.audits,n),categories:a.categories||null,groups:a.groups||null,settings:i};const{warnings:c}=MV(s);return s=PV(s,t.gatherMode),s=OV(s,i),xV.timeEnd(r),{config:s,warnings:c}}};const HV=on.default,GV=sV,YV=pu,{getEmptyArtifactState:KV,collectPhaseArtifacts:JV,awaitArtifacts:XV}=uV,{initializeConfig:ZV}=WV,{getBaseArtifacts:QV,finalizeArtifacts:eW}=ac;var tW={snapshotGather:async function snapshotGather$2(e){const{configContext:t={}}=e;HV.setLevel(t.logLevel||"error");const{config:r}=ZV(e.config,{...t,gatherMode:"snapshot"}),a=new GV(e.page)
|
1217
|
+
;await a.connect();const n=new Map,i=await a.url(),o={config:r,computedCache:n};return{artifacts:await YV.gather((async()=>{const e=await QV(r,a,{gatherMode:"snapshot"});e.URL.requestedUrl=i,e.URL.finalUrl=i;const t=r.artifacts||[],o=KV();await JV({url:i,phase:"getArtifact",gatherMode:"snapshot",driver:a,baseArtifacts:e,artifactDefinitions:t,artifactState:o,computedCache:n,settings:r.settings}),await a.disconnect();const s=await XV(o);return eW(e,s)}),o),runnerOptions:o}}};const rW=on.default,aW=sV,nW=pu,{getEmptyArtifactState:iW,collectPhaseArtifacts:oW,awaitArtifacts:sW}=uV,{prepareTargetForTimespanMode:cW}=es,{initializeConfig:lW}=WV,{getBaseArtifacts:uW,finalizeArtifacts:dW}=ac;var mW={startTimespanGather:async function startTimespanGather$2(e){const{configContext:t={}}=e;rW.setLevel(t.logLevel||"error");const{config:r}=lW(e.config,{...t,gatherMode:"timespan"}),a=new aW(e.page);await a.connect();const n=new Map,i=r.artifacts||[],o=await a.url(),s=await uW(r,a,{gatherMode:"timespan"
|
1218
|
+
}),c=iW(),l={url:o,driver:a,artifactDefinitions:i,artifactState:c,baseArtifacts:s,computedCache:n,gatherMode:"timespan",settings:r.settings};return await cW(a,r.settings),await oW({phase:"startInstrumentation",...l}),await oW({phase:"startSensitiveInstrumentation",...l}),{async endTimespanGather(){const e=await a.url();l.url=e;const t={config:r,computedCache:n};return{artifacts:await nW.gather((async()=>{s.URL.requestedUrl=o,s.URL.finalUrl=e,await oW({phase:"stopSensitiveInstrumentation",...l}),await oW({phase:"stopInstrumentation",...l}),await oW({phase:"getArtifact",...l}),await a.disconnect();const t=await sW(c);return dW(s,t)}),t),runnerOptions:t}}}}};const pW=on.default,hW=sV,gW=pu,{getEmptyArtifactState:fW,collectPhaseArtifacts:yW,awaitArtifacts:vW}=uV,bW=es,{gotoURL:wW}=_s,SW=Ko,TW=Wo,{defaultNavigationConfig:EW}=mn,{initializeConfig:xW}=WV,{getBaseArtifacts:_W,finalizeArtifacts:AW}=ac,RW=Vn,kW=vi.exports,DW=ji,{getPageLoadError:CW}=Bo,IW=oo,NW=Ws,LW=Lo
|
1219
|
+
;async function _setup({driver:e,config:t,requestor:r,options:a}){await e.connect(),a?.skipAboutBlank||await wW(e,EW.blankPage,{waitUntil:["navigated"]});const n=await _W(t,e,{gatherMode:"navigation"});return"string"==typeof r&&(n.URL.requestedUrl=r),await bW.prepareTargetForNavigationMode(e,t.settings),{baseArtifacts:n}}async function _setupNavigation({requestor:e,driver:t,navigation:r,config:a,options:n}){n?.skipAboutBlank||await wW(t,r.blankPage,{...r,waitUntil:["navigated"]});const{warnings:i}=await bW.prepareTargetForIndividualNavigation(t.defaultSession,a.settings,{...r,requestor:e});return{warnings:i}}async function _navigate(e){const{driver:t,config:r,requestor:a}=e;try{const{requestedUrl:n,finalUrl:i,warnings:o}=await wW(t,a,{...e.navigation,debugNavigation:r.settings.debugNavigation,maxWaitForFcp:r.settings.maxWaitForFcp,maxWaitForLoad:r.settings.maxWaitForLoad,waitUntil:e.navigation.pauseAfterFcpMs?["fcp","load"]:["load"]});return{requestedUrl:n,finalUrl:i,
|
1220
|
+
navigationError:void 0,warnings:o}}catch(e){if(!(e instanceof kW))throw e;if("NO_FCP"!==e.code&&"PAGE_HUNG"!==e.code)throw e;if("string"!=typeof a)throw e;return{requestedUrl:a,finalUrl:a,navigationError:e,warnings:[]}}}async function _computeNavigationResult(e,t,r,a){const{navigationError:n,finalUrl:i}=a,o=[...r.warnings,...a.warnings],s=await async function _collectDebugData(e,t){const r=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===NW.symbol)),a=t.artifactDefinitions.find((e=>e.gatherer.instance.meta.symbol===IW.symbol)),n=[r,a].filter((e=>Boolean(e)));if(!n.length)return{};await yW({...t,phase:"getArtifact",artifactDefinitions:n});const i=t.artifactState.getArtifact,o=r?.id,s=o&&await i[o],c=s&&await LW.request(s,e),l=a?.id;return{devtoolsLog:s,records:c,trace:l&&await i[l]}}(e,t),c=s.records?CW(n,{url:i,loadFailureMode:e.navigation.loadFailureMode,networkRecords:s.records}):n;if(c){const t=e.config.settings.locale,r=RW.getFormatted(c.friendlyMessage,t)
|
1221
|
+
;pW.error("NavigationRunner",r,a.requestedUrl);const n={},l=`pageLoadError-${e.navigation.id}`;return s.devtoolsLog&&(n.devtoolsLogs={[l]:s.devtoolsLog}),s.trace&&(n.traces={[l]:s.trace}),{requestedUrl:a.requestedUrl,finalUrl:i,pageLoadError:c,artifacts:n,warnings:[...o,c.friendlyMessage]}}{await yW({phase:"getArtifact",...t});const e=await vW(t.artifactState);return{requestedUrl:a.requestedUrl,finalUrl:i,artifacts:e,warnings:o,pageLoadError:void 0}}}async function _navigation(e){const t=fW(),r={url:await e.driver.url(),gatherMode:"navigation",driver:e.driver,computedCache:e.computedCache,artifactDefinitions:e.navigation.artifacts,artifactState:t,baseArtifacts:e.baseArtifacts,settings:e.config.settings},a=await _setupNavigation(e);await yW({phase:"startInstrumentation",...r}),await yW({phase:"startSensitiveInstrumentation",...r});const n=await _navigate(e);return r.url=n.finalUrl,await yW({phase:"stopSensitiveInstrumentation",...r}),await yW({phase:"stopInstrumentation",...r}),
|
1222
|
+
await async function _cleanupNavigation({driver:e}){await TW.clearThrottling(e.defaultSession)}(e),_computeNavigationResult(e,r,a,n)}async function _navigations({driver:e,config:t,requestor:r,baseArtifacts:a,computedCache:n,options:i}){if(!t.navigations)throw new Error("No navigations configured");const o={},s=[];for(const c of t.navigations){const l={driver:e,navigation:c,requestor:r,config:t,baseArtifacts:a,computedCache:n,options:i};let u=!1;const d=await _navigation(l);if("fatal"===c.loadFailureMode&&(d.pageLoadError&&(o.PageLoadError=d.pageLoadError,u=!0),o.URL={requestedUrl:d.requestedUrl,finalUrl:d.finalUrl}),s.push(...d.warnings),Object.assign(o,d.artifacts),u)break}return{artifacts:{...o,LighthouseRunWarnings:s}}}async function _cleanup({requestedUrl:e,driver:t,config:r}){!r.settings.disableStorageReset&&e&&await SW.clearDataForOrigin(t.defaultSession,e),await t.disconnect()}var MW={navigationGather:async function navigationGather$2(e,t){const{page:r,configContext:a={}}=t
|
1223
|
+
;pW.setLevel(a.logLevel||"error");const{config:n}=xW(t.config,{...a,gatherMode:"navigation"}),i=new Map,o={skipAboutBlank:a.skipAboutBlank};"string"!=typeof e&&(o.skipAboutBlank=!0);const s={config:n,computedCache:i};return{artifacts:await gW.gather((async()=>{const t={driver:new hW(r),config:n,requestor:"string"==typeof e?DW.normalizeUrl(e):e,options:o},{baseArtifacts:a}=await _setup(t),{artifacts:s}=await _navigations({...t,baseArtifacts:a,computedCache:i});return await _cleanup(t),AW(a,s)}),s),runnerOptions:s}},_setup,_setupNavigation,_navigate,_navigation,_navigations,_cleanup};const{generateFlowReportHtml:PW}=Zl,{snapshotGather:OW}=tW,{startTimespanGather:FW}=mW,{navigationGather:UW}=MW,jW=pu,{initializeConfig:BW}=WV;async function auditGatherSteps$1(e,t){if(!e.length)throw new Error("Need at least one step before getting the result");const r=[];for(const a of e){const{artifacts:e,name:n,configContext:i}=a;let o=t.gatherStepRunnerOptions?.get(a);if(!o){
|
1224
|
+
const r=a.config||t.config,{gatherMode:n}=e.GatherContext,{config:s}=BW(r,{...i,gatherMode:n});o={config:s,computedCache:new Map}}const s=await jW.audit(e,o);if(!s)throw new Error(`Step "${n}" did not return a result`);r.push({lhr:s.lhr,name:n})}const a=new URL(e[0].artifacts.URL.finalUrl);return{steps:r,name:t.name||`User flow (${a.hostname})`}}var $W={UserFlow:class UserFlow$1{constructor(e,t){this.options={page:e,...t},this.name=t?.name,this._gatherSteps=[],this._gatherStepRunnerOptions=new WeakMap}_shortenUrl(e){const t=new URL(e);return`${t.hostname}${t.pathname}`}_getDefaultStepName(e){const t=this._shortenUrl(e.URL.finalUrl);switch(e.GatherContext.gatherMode){case"navigation":return`Navigation report (${t})`;case"timespan":return`Timespan report (${t})`;case"snapshot":return`Snapshot report (${t})`}}_getNextNavigationOptions(e){const t={...this.options,...e},r={...t.configContext},a={...r.settingsOverrides};void 0===r.skipAboutBlank&&(r.skipAboutBlank=!0)
|
1225
|
+
;return this._gatherSteps.some((e=>"navigation"===e.artifacts.GatherContext.gatherMode))&&void 0===a.disableStorageReset&&(a.disableStorageReset=!0),r.settingsOverrides=a,t.configContext=r,t}_addGatherStep(e,t){const r=t?.stepName,a={artifacts:e.artifacts,name:r||this._getDefaultStepName(e.artifacts),config:t.config,configContext:t.configContext};this._gatherSteps.push(a),this._gatherStepRunnerOptions.set(a,e.runnerOptions)}async navigate(e,t){if(this.currentTimespan)throw new Error("Timespan already in progress");const r=this._getNextNavigationOptions(t),a=await UW(e,r);return this._addGatherStep(a,r),a}async startTimespan(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await FW(t);this.currentTimespan={timespan:r,options:t}}async endTimespan(){if(!this.currentTimespan)throw new Error("No timespan in progress");const{timespan:e,options:t}=this.currentTimespan,r=await e.endTimespanGather();return this.currentTimespan=void 0,
|
1226
|
+
this._addGatherStep(r,t),r}async snapshot(e){if(this.currentTimespan)throw new Error("Timespan already in progress");const t={...this.options,...e},r=await OW(t);return this._addGatherStep(r,t),r}async createFlowResult(){return auditGatherSteps$1(this._gatherSteps,{name:this.name,config:this.options.config,gatherStepRunnerOptions:this._gatherStepRunnerOptions})}async generateReport(){const e=await this.createFlowResult();return PW(e)}createArtifactsJson(){return{gatherSteps:this._gatherSteps,name:this.name}}},auditGatherSteps:auditGatherSteps$1};const{UserFlow:qW,auditGatherSteps:zW}=$W,{snapshotGather:VW}=tW,{startTimespanGather:WW}=mW,{navigationGather:HW}=MW,{generateFlowReportHtml:GW}=Zl,YW=pu;var KW=async function snapshot(...e){const t=await VW(...e);return YW.audit(t.artifacts,t.runnerOptions)},JW=async function startTimespan(...e){const{endTimespanGather:t}=await WW(...e);return{endTimespan:async()=>{const e=await t();return YW.audit(e.artifacts,e.runnerOptions)}}
|
1227
|
+
},XW=async function navigation(...e){const t=await HW(...e);return YW.audit(t.artifacts,t.runnerOptions)};const ZW=uo;var QW=class RawConnection extends ZW{constructor(e){super(),this._port=e,this._port.on("message",this.handleRawMessage.bind(this)),this._port.on("close",this.dispose.bind(this))}connect(){return Promise.resolve()}disconnect(){return this._port.close(),Promise.resolve()}sendRawMessage(e){this._port.send(e)}};globalThis.Buffer=Buffer$2,"undefined"!=typeof self?(globalThis.isDevtools=!0,self.setUpWorkerConnection=function setUpWorkerConnection(e){return new QW(e)},self.runLighthouse=Zz,self.runLighthouseNavigation=XW,self.startLighthouseTimespan=JW,self.runLighthouseSnapshot=KW,self.createConfig=function createConfig(e,t){const r={onlyCategories:e,screenEmulation:{disabled:!0}};return"desktop"===t&&(r.throttling=mn.throttling.desktopDense4G,r.emulatedUserAgent=mn.userAgents.desktop,r.formFactor="desktop"),{extends:"lighthouse:default",
|
1228
|
+
plugins:["lighthouse-plugin-publisher-ads"],settings:r}},self.listenForStatus=function listenForStatus(e){Log.events.addListener("status",e),Log.events.addListener("warning",e)},self.registerLocaleData=Vn.registerLocaleData,self.lookupLocale=function lookupCanonicalLocale(e){return oi.lookupLocale(e,Vn.getCanonicalLocales())}):global.runBundledLighthouse=Zz}();
|