lighthouse 11.1.0 → 11.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +3 -5
- package/cli/bin.js +4 -3
- package/cli/cli-flags.js +3 -3
- package/cli/commands/commands.js +3 -3
- package/cli/commands/list-audits.js +3 -3
- package/cli/commands/list-locales.js +3 -3
- package/cli/commands/list-trace-categories.js +3 -3
- package/cli/index.js +3 -3
- package/cli/printer.js +3 -3
- package/cli/run.js +3 -3
- package/cli/sentry-prompt.js +3 -3
- package/cli/test/smokehouse/__snapshots__/report-assert-test.js.snap +8 -0
- package/cli/test/smokehouse/config/exclusions.d.ts +3 -3
- package/cli/test/smokehouse/config/exclusions.js +3 -3
- package/cli/test/smokehouse/core-tests.js +3 -3
- package/cli/test/smokehouse/frontends/back-compat-util.d.ts +3 -3
- package/cli/test/smokehouse/frontends/back-compat-util.js +3 -3
- package/cli/test/smokehouse/frontends/lib.js +3 -3
- package/cli/test/smokehouse/frontends/node.js +3 -3
- package/cli/test/smokehouse/frontends/smokehouse-bin.js +3 -3
- package/cli/test/smokehouse/lib/child-process-error.d.ts +3 -3
- package/cli/test/smokehouse/lib/child-process-error.js +3 -3
- package/cli/test/smokehouse/lib/concurrent-mapper.d.ts +3 -3
- package/cli/test/smokehouse/lib/concurrent-mapper.js +3 -3
- package/cli/test/smokehouse/lib/local-console.d.ts +3 -3
- package/cli/test/smokehouse/lib/local-console.js +3 -3
- package/cli/test/smokehouse/lighthouse-runners/bundle.js +3 -3
- package/cli/test/smokehouse/lighthouse-runners/cli.js +3 -3
- package/cli/test/smokehouse/lighthouse-runners/devtools.js +3 -3
- package/cli/test/smokehouse/report-assert-test.js +3 -3
- package/cli/test/smokehouse/report-assert.js +3 -3
- package/cli/test/smokehouse/smokehouse.d.ts +0 -1
- package/cli/test/smokehouse/smokehouse.js +12 -6
- package/cli/test/smokehouse/version-check-test.js +3 -3
- package/cli/test/smokehouse/version-check.js +3 -3
- package/commitlint.config.js +3 -3
- package/core/audits/accessibility/accesskeys.js +3 -3
- package/core/audits/accessibility/aria-allowed-attr.js +3 -3
- package/core/audits/accessibility/aria-allowed-role.js +3 -3
- package/core/audits/accessibility/aria-command-name.js +3 -3
- package/core/audits/accessibility/aria-dialog-name.js +3 -3
- package/core/audits/accessibility/aria-hidden-body.js +3 -3
- package/core/audits/accessibility/aria-hidden-focus.js +3 -3
- package/core/audits/accessibility/aria-input-field-name.js +3 -3
- package/core/audits/accessibility/aria-meter-name.js +3 -3
- package/core/audits/accessibility/aria-progressbar-name.js +3 -3
- package/core/audits/accessibility/aria-required-attr.js +3 -3
- package/core/audits/accessibility/aria-required-children.js +3 -3
- package/core/audits/accessibility/aria-required-parent.js +3 -3
- package/core/audits/accessibility/aria-roles.js +3 -3
- package/core/audits/accessibility/aria-text.js +3 -3
- package/core/audits/accessibility/aria-toggle-field-name.js +3 -3
- package/core/audits/accessibility/aria-tooltip-name.js +3 -3
- package/core/audits/accessibility/aria-treeitem-name.js +3 -3
- package/core/audits/accessibility/aria-valid-attr-value.js +3 -3
- package/core/audits/accessibility/aria-valid-attr.js +3 -3
- package/core/audits/accessibility/axe-audit.js +3 -3
- package/core/audits/accessibility/button-name.js +3 -3
- package/core/audits/accessibility/bypass.js +3 -3
- package/core/audits/accessibility/color-contrast.js +3 -3
- package/core/audits/accessibility/definition-list.js +3 -3
- package/core/audits/accessibility/dlitem.js +3 -3
- package/core/audits/accessibility/document-title.js +3 -3
- package/core/audits/accessibility/duplicate-id-active.js +3 -3
- package/core/audits/accessibility/duplicate-id-aria.js +3 -3
- package/core/audits/accessibility/empty-heading.js +3 -3
- package/core/audits/accessibility/form-field-multiple-labels.js +3 -3
- package/core/audits/accessibility/frame-title.js +3 -3
- package/core/audits/accessibility/heading-order.js +3 -3
- package/core/audits/accessibility/html-has-lang.js +3 -3
- package/core/audits/accessibility/html-lang-valid.js +3 -3
- package/core/audits/accessibility/html-xml-lang-mismatch.js +3 -3
- package/core/audits/accessibility/identical-links-same-purpose.js +3 -3
- package/core/audits/accessibility/image-alt.js +3 -3
- package/core/audits/accessibility/image-redundant-alt.js +3 -3
- package/core/audits/accessibility/input-button-name.js +3 -3
- package/core/audits/accessibility/input-image-alt.js +3 -3
- package/core/audits/accessibility/label-content-name-mismatch.js +3 -3
- package/core/audits/accessibility/label.js +3 -3
- package/core/audits/accessibility/landmark-one-main.js +3 -3
- package/core/audits/accessibility/link-in-text-block.js +3 -3
- package/core/audits/accessibility/link-name.js +3 -3
- package/core/audits/accessibility/list.js +3 -3
- package/core/audits/accessibility/listitem.js +3 -3
- package/core/audits/accessibility/manual/custom-controls-labels.js +3 -3
- package/core/audits/accessibility/manual/custom-controls-roles.js +3 -3
- package/core/audits/accessibility/manual/focus-traps.js +3 -3
- package/core/audits/accessibility/manual/focusable-controls.js +3 -3
- package/core/audits/accessibility/manual/interactive-element-affordance.js +3 -3
- package/core/audits/accessibility/manual/logical-tab-order.js +3 -3
- package/core/audits/accessibility/manual/managed-focus.js +3 -3
- package/core/audits/accessibility/manual/offscreen-content-hidden.js +3 -3
- package/core/audits/accessibility/manual/use-landmarks.js +3 -3
- package/core/audits/accessibility/manual/visual-order-follows-dom.js +3 -3
- package/core/audits/accessibility/meta-refresh.js +3 -3
- package/core/audits/accessibility/meta-viewport.js +3 -3
- package/core/audits/accessibility/object-alt.js +3 -3
- package/core/audits/accessibility/select-name.js +3 -3
- package/core/audits/accessibility/skip-link.js +3 -3
- package/core/audits/accessibility/tabindex.js +3 -3
- package/core/audits/accessibility/table-duplicate-name.js +3 -3
- package/core/audits/accessibility/table-fake-caption.js +3 -3
- package/core/audits/accessibility/target-size.js +3 -3
- package/core/audits/accessibility/td-has-header.js +3 -3
- package/core/audits/accessibility/td-headers-attr.js +3 -3
- package/core/audits/accessibility/th-has-data-cells.js +3 -3
- package/core/audits/accessibility/valid-lang.js +3 -3
- package/core/audits/accessibility/video-caption.js +3 -3
- package/core/audits/audit.js +24 -14
- package/core/audits/autocomplete.js +3 -3
- package/core/audits/bf-cache.js +4 -3
- package/core/audits/bootup-time.js +7 -4
- package/core/audits/byte-efficiency/byte-efficiency-audit.js +4 -4
- package/core/audits/byte-efficiency/duplicated-javascript.js +4 -4
- package/core/audits/byte-efficiency/efficient-animated-content.js +4 -4
- package/core/audits/byte-efficiency/legacy-javascript.js +4 -4
- package/core/audits/byte-efficiency/modern-image-formats.js +4 -4
- package/core/audits/byte-efficiency/offscreen-images.js +4 -4
- package/core/audits/byte-efficiency/render-blocking-resources.js +5 -6
- package/core/audits/byte-efficiency/total-byte-weight.js +6 -4
- package/core/audits/byte-efficiency/unminified-css.js +4 -4
- package/core/audits/byte-efficiency/unminified-javascript.js +4 -4
- package/core/audits/byte-efficiency/unused-css-rules.js +4 -4
- package/core/audits/byte-efficiency/unused-javascript.js +4 -4
- package/core/audits/byte-efficiency/uses-long-cache-ttl.js +6 -11
- package/core/audits/byte-efficiency/uses-optimized-images.js +4 -4
- package/core/audits/byte-efficiency/uses-responsive-images-snapshot.js +4 -3
- package/core/audits/byte-efficiency/uses-responsive-images.js +4 -4
- package/core/audits/byte-efficiency/uses-text-compression.js +4 -4
- package/core/audits/content-width.js +3 -3
- package/core/audits/critical-request-chains.js +3 -3
- package/core/audits/csp-xss.js +4 -4
- package/core/audits/deprecations.js +3 -3
- package/core/audits/diagnostics.js +3 -3
- package/core/audits/dobetterweb/charset.js +3 -3
- package/core/audits/dobetterweb/doctype.js +3 -3
- package/core/audits/dobetterweb/dom-size.js +6 -4
- package/core/audits/dobetterweb/geolocation-on-start.js +3 -3
- package/core/audits/dobetterweb/inspector-issues.js +3 -3
- package/core/audits/dobetterweb/js-libraries.js +3 -3
- package/core/audits/dobetterweb/no-document-write.js +4 -3
- package/core/audits/dobetterweb/notification-on-start.js +3 -3
- package/core/audits/dobetterweb/paste-preventing-inputs.js +3 -3
- package/core/audits/dobetterweb/uses-http2.js +5 -6
- package/core/audits/dobetterweb/uses-passive-event-listeners.js +4 -3
- package/core/audits/errors-in-console.js +3 -3
- package/core/audits/final-screenshot.js +3 -3
- package/core/audits/font-display.js +4 -3
- package/core/audits/image-aspect-ratio.js +3 -3
- package/core/audits/image-size-responsive.js +3 -3
- package/core/audits/installable-manifest.js +5 -5
- package/core/audits/is-on-https.js +3 -3
- package/core/audits/largest-contentful-paint-element.js +6 -5
- package/core/audits/layout-shift-elements.js +10 -7
- package/core/audits/lcp-lazy-loaded.js +4 -3
- package/core/audits/long-tasks.js +11 -4
- package/core/audits/main-thread-tasks.js +3 -3
- package/core/audits/mainthread-work-breakdown.js +26 -5
- package/core/audits/manual/manual-audit.js +3 -3
- package/core/audits/manual/pwa-cross-browser.js +3 -3
- package/core/audits/manual/pwa-each-page-has-url.js +3 -3
- package/core/audits/manual/pwa-page-transitions.js +3 -3
- package/core/audits/maskable-icon.js +3 -3
- package/core/audits/metrics/cumulative-layout-shift.js +7 -4
- package/core/audits/metrics/first-contentful-paint.js +4 -3
- package/core/audits/metrics/first-meaningful-paint.js +3 -3
- package/core/audits/metrics/interaction-to-next-paint.js +3 -3
- package/core/audits/metrics/interactive.js +3 -3
- package/core/audits/metrics/largest-contentful-paint.js +4 -3
- package/core/audits/metrics/max-potential-fid.js +3 -3
- package/core/audits/metrics/speed-index.js +4 -3
- package/core/audits/metrics/total-blocking-time.js +4 -3
- package/core/audits/metrics.js +3 -3
- package/core/audits/multi-check-audit.js +3 -3
- package/core/audits/network-requests.js +3 -3
- package/core/audits/network-rtt.js +3 -3
- package/core/audits/network-server-latency.js +3 -3
- package/core/audits/no-unload-listeners.js +3 -3
- package/core/audits/non-composited-animations.js +3 -3
- package/core/audits/oopif-iframe-test-audit.js +3 -3
- package/core/audits/performance-budget.js +3 -3
- package/core/audits/predictive-perf.js +3 -3
- package/core/audits/preload-fonts.js +3 -3
- package/core/audits/prioritize-lcp-image.js +5 -6
- package/core/audits/redirects.js +5 -6
- package/core/audits/screenshot-thumbnails.js +3 -3
- package/core/audits/script-elements-test-audit.js +3 -3
- package/core/audits/script-treemap-data.js +3 -3
- package/core/audits/seo/canonical.js +3 -3
- package/core/audits/seo/crawlable-anchors.js +3 -3
- package/core/audits/seo/font-size.js +3 -3
- package/core/audits/seo/hreflang.js +3 -3
- package/core/audits/seo/http-status-code.js +3 -3
- package/core/audits/seo/is-crawlable.js +3 -3
- package/core/audits/seo/link-text.js +3 -3
- package/core/audits/seo/manual/structured-data.js +3 -3
- package/core/audits/seo/meta-description.js +3 -3
- package/core/audits/seo/plugins.js +3 -3
- package/core/audits/seo/robots-txt.js +3 -3
- package/core/audits/seo/tap-targets.js +3 -3
- package/core/audits/server-response-time.js +5 -3
- package/core/audits/splash-screen.js +3 -3
- package/core/audits/themed-omnibox.js +3 -3
- package/core/audits/third-party-facades.js +4 -3
- package/core/audits/third-party-summary.js +8 -4
- package/core/audits/timing-budget.js +3 -3
- package/core/audits/unsized-images.js +4 -4
- package/core/audits/user-timings.js +3 -3
- package/core/audits/uses-rel-preconnect.js +5 -6
- package/core/audits/uses-rel-preload.js +5 -6
- package/core/audits/valid-source-maps.js +2 -3
- package/core/audits/viewport.js +4 -3
- package/core/audits/violation-audit.js +3 -3
- package/core/audits/work-during-interaction.js +9 -5
- package/core/computed/computed-artifact.js +3 -3
- package/core/computed/critical-request-chains.js +3 -3
- package/core/computed/document-urls.js +3 -3
- package/core/computed/entity-classification.js +3 -3
- package/core/computed/image-records.js +3 -3
- package/core/computed/js-bundles.js +3 -3
- package/core/computed/lcp-image-record.js +3 -3
- package/core/computed/load-simulator.js +3 -3
- package/core/computed/main-resource.js +3 -3
- package/core/computed/main-thread-tasks.js +3 -3
- package/core/computed/manifest-values.js +3 -3
- package/core/computed/metrics/cumulative-layout-shift.js +3 -3
- package/core/computed/metrics/first-contentful-paint-all-frames.js +3 -3
- package/core/computed/metrics/first-contentful-paint.js +3 -3
- package/core/computed/metrics/first-meaningful-paint.js +3 -3
- package/core/computed/metrics/interactive.js +3 -3
- package/core/computed/metrics/lantern-first-contentful-paint.js +3 -3
- package/core/computed/metrics/lantern-first-meaningful-paint.js +3 -3
- package/core/computed/metrics/lantern-interactive.js +3 -3
- package/core/computed/metrics/lantern-largest-contentful-paint.js +3 -3
- package/core/computed/metrics/lantern-max-potential-fid.js +3 -3
- package/core/computed/metrics/lantern-metric.js +3 -3
- package/core/computed/metrics/lantern-speed-index.js +3 -3
- package/core/computed/metrics/lantern-total-blocking-time.js +3 -3
- package/core/computed/metrics/largest-contentful-paint-all-frames.js +3 -3
- package/core/computed/metrics/largest-contentful-paint.js +3 -3
- package/core/computed/metrics/lcp-breakdown.js +3 -3
- package/core/computed/metrics/max-potential-fid.js +3 -3
- package/core/computed/metrics/metric.js +3 -3
- package/core/computed/metrics/navigation-metric.js +3 -3
- package/core/computed/metrics/responsiveness.js +3 -3
- package/core/computed/metrics/speed-index.js +3 -3
- package/core/computed/metrics/tbt-utils.d.ts +3 -3
- package/core/computed/metrics/tbt-utils.js +3 -3
- package/core/computed/metrics/time-to-first-byte.js +3 -3
- package/core/computed/metrics/timing-summary.js +3 -3
- package/core/computed/metrics/total-blocking-time.js +3 -3
- package/core/computed/module-duplication.js +3 -3
- package/core/computed/network-analysis.js +3 -3
- package/core/computed/network-records.js +3 -3
- package/core/computed/page-dependency-graph.js +4 -3
- package/core/computed/processed-navigation.js +3 -3
- package/core/computed/processed-trace.js +3 -3
- package/core/computed/resource-summary.js +3 -3
- package/core/computed/screenshots.js +3 -3
- package/core/computed/speedline.js +3 -3
- package/core/computed/tbt-impact-tasks.js +3 -3
- package/core/computed/unused-css.js +3 -3
- package/core/computed/unused-javascript-summary.js +2 -3
- package/core/computed/user-timings.js +3 -3
- package/core/computed/viewport-meta.js +3 -3
- package/core/config/budget.js +3 -3
- package/core/config/config-helpers.js +3 -3
- package/core/config/config-plugin.js +3 -3
- package/core/config/config.js +3 -3
- package/core/config/constants.d.ts +3 -3
- package/core/config/constants.js +3 -3
- package/core/config/default-config.js +3 -3
- package/core/config/desktop-config.js +3 -3
- package/core/config/experimental-config.d.ts +3 -3
- package/core/config/experimental-config.js +3 -3
- package/core/config/filters.js +3 -3
- package/core/config/full-config.d.ts +3 -3
- package/core/config/full-config.js +3 -3
- package/core/config/lr-desktop-config.js +3 -3
- package/core/config/lr-mobile-config.d.ts +3 -3
- package/core/config/lr-mobile-config.js +3 -3
- package/core/config/metrics-to-audits.d.ts +3 -3
- package/core/config/metrics-to-audits.js +3 -3
- package/core/config/perf-config.d.ts +3 -3
- package/core/config/perf-config.js +3 -3
- package/core/config/validation.js +3 -3
- package/core/gather/base-artifacts.js +3 -3
- package/core/gather/base-gatherer.js +3 -3
- package/core/gather/driver/dom.js +3 -3
- package/core/gather/driver/environment.js +3 -3
- package/core/gather/driver/execution-context.js +3 -3
- package/core/gather/driver/navigation.js +3 -3
- package/core/gather/driver/network-monitor.js +3 -3
- package/core/gather/driver/network.js +3 -3
- package/core/gather/driver/prepare.js +3 -3
- package/core/gather/driver/service-workers.d.ts +3 -3
- package/core/gather/driver/service-workers.js +3 -3
- package/core/gather/driver/storage.js +3 -3
- package/core/gather/driver/target-manager.d.ts +5 -0
- package/core/gather/driver/target-manager.js +21 -11
- package/core/gather/driver/wait-for-condition.js +3 -3
- package/core/gather/driver.js +3 -3
- package/core/gather/fetcher.js +2 -3
- package/core/gather/gatherers/accessibility.js +3 -3
- package/core/gather/gatherers/anchor-elements.js +3 -3
- package/core/gather/gatherers/bf-cache-failures.js +3 -3
- package/core/gather/gatherers/cache-contents.js +3 -3
- package/core/gather/gatherers/console-messages.js +3 -3
- package/core/gather/gatherers/css-usage.js +3 -3
- package/core/gather/gatherers/devtools-log-compat.js +3 -3
- package/core/gather/gatherers/devtools-log.js +3 -3
- package/core/gather/gatherers/dobetterweb/doctype.js +3 -3
- package/core/gather/gatherers/dobetterweb/domstats.js +3 -3
- package/core/gather/gatherers/dobetterweb/optimized-images.js +5 -5
- package/core/gather/gatherers/dobetterweb/response-compression.js +4 -4
- package/core/gather/gatherers/dobetterweb/tags-blocking-first-paint.js +8 -3
- package/core/gather/gatherers/full-page-screenshot.js +2 -3
- package/core/gather/gatherers/global-listeners.js +3 -3
- package/core/gather/gatherers/iframe-elements.js +3 -3
- package/core/gather/gatherers/image-elements.js +3 -3
- package/core/gather/gatherers/inputs.js +3 -3
- package/core/gather/gatherers/inspector-issues.js +4 -3
- package/core/gather/gatherers/installability-errors.js +3 -3
- package/core/gather/gatherers/js-usage.js +3 -3
- package/core/gather/gatherers/link-elements.js +3 -3
- package/core/gather/gatherers/main-document-content.js +3 -3
- package/core/gather/gatherers/meta-elements.js +3 -3
- package/core/gather/gatherers/network-user-agent.js +3 -3
- package/core/gather/gatherers/script-elements.js +4 -4
- package/core/gather/gatherers/scripts.js +3 -3
- package/core/gather/gatherers/seo/embedded-content.js +3 -3
- package/core/gather/gatherers/seo/font-size.js +3 -3
- package/core/gather/gatherers/seo/robots-txt.js +3 -3
- package/core/gather/gatherers/seo/tap-targets.js +3 -3
- package/core/gather/gatherers/service-worker.js +3 -3
- package/core/gather/gatherers/source-maps.js +3 -3
- package/core/gather/gatherers/stacks.js +3 -3
- package/core/gather/gatherers/trace-compat.js +3 -3
- package/core/gather/gatherers/trace-elements.js +3 -3
- package/core/gather/gatherers/trace.js +3 -3
- package/core/gather/gatherers/viewport-dimensions.js +3 -3
- package/core/gather/gatherers/web-app-manifest.js +3 -3
- package/core/gather/navigation-runner.js +3 -3
- package/core/gather/runner-helpers.js +3 -3
- package/core/gather/session.js +5 -3
- package/core/gather/snapshot-runner.js +3 -3
- package/core/gather/timespan-runner.js +3 -3
- package/core/index.cjs +3 -3
- package/core/index.js +3 -3
- package/core/lib/arbitrary-equality-map.js +3 -3
- package/core/lib/asset-saver.d.ts +4 -4
- package/core/lib/asset-saver.js +17 -13
- package/core/lib/axe.js +3 -3
- package/core/lib/cdt/Common.js +3 -3
- package/core/lib/cdt/Platform.d.ts +3 -3
- package/core/lib/cdt/Platform.js +3 -3
- package/core/lib/cdt/SDK.js +3 -3
- package/core/lib/csp-evaluator.js +16 -16
- package/core/lib/dependency-graph/base-node.d.ts +3 -3
- package/core/lib/dependency-graph/base-node.js +3 -3
- package/core/lib/dependency-graph/cpu-node.js +3 -3
- package/core/lib/dependency-graph/network-node.js +3 -3
- package/core/lib/dependency-graph/simulator/connection-pool.js +3 -3
- package/core/lib/dependency-graph/simulator/dns-cache.js +3 -3
- package/core/lib/dependency-graph/simulator/network-analyzer.js +3 -3
- package/core/lib/dependency-graph/simulator/simulator-timing-map.js +3 -3
- package/core/lib/dependency-graph/simulator/simulator.js +3 -3
- package/core/lib/dependency-graph/simulator/tcp-connection.js +3 -3
- package/core/lib/deprecation-description.js +3 -3
- package/core/lib/emulation.js +3 -3
- package/core/lib/i18n/i18n.js +3 -3
- package/core/lib/icons.d.ts +3 -3
- package/core/lib/icons.js +3 -3
- package/core/lib/lantern-trace-saver.d.ts +3 -3
- package/core/lib/lantern-trace-saver.js +3 -3
- package/core/lib/lh-env.js +3 -3
- package/core/lib/lh-error.js +3 -3
- package/core/lib/lh-trace-processor.js +3 -3
- package/core/lib/lighthouse-compatibility.js +3 -3
- package/core/lib/manifest-parser.js +3 -3
- package/core/lib/median-run.js +3 -3
- package/core/lib/minification-estimator.js +3 -3
- package/core/lib/minify-devtoolslog.js +3 -3
- package/core/lib/navigation-error.js +3 -3
- package/core/lib/network-recorder.js +3 -3
- package/core/lib/network-request.js +3 -3
- package/core/lib/page-functions.js +3 -3
- package/core/lib/proto-preprocessor.js +3 -3
- package/core/lib/rect-helpers.d.ts +3 -3
- package/core/lib/rect-helpers.js +3 -3
- package/core/lib/script-helpers.d.ts +3 -3
- package/core/lib/script-helpers.js +3 -3
- package/core/lib/sentry.d.ts +2 -1
- package/core/lib/sentry.js +24 -18
- package/core/lib/stack-packs.js +3 -3
- package/core/lib/tappable-rects.js +3 -3
- package/core/lib/third-party-web.js +3 -3
- package/core/lib/timing-trace-saver.d.ts +3 -3
- package/core/lib/timing-trace-saver.js +3 -3
- package/core/lib/tracehouse/cpu-profile-model.js +3 -3
- package/core/lib/tracehouse/main-thread-tasks.js +3 -3
- package/core/lib/tracehouse/task-groups.d.ts +3 -3
- package/core/lib/tracehouse/task-groups.js +3 -3
- package/core/lib/tracehouse/task-summary.js +3 -3
- package/core/lib/tracehouse/trace-processor.js +3 -3
- package/core/lib/traces/metric-trace-events.js +3 -3
- package/core/lib/url-utils.js +3 -3
- package/core/runner.js +3 -3
- package/core/scoring.js +3 -3
- package/core/scripts/download-chrome.sh +2 -3
- package/core/user-flow.js +3 -3
- package/dist/report/bundle.esm.js +260 -175
- package/dist/report/flow.js +265 -181
- package/dist/report/standalone.js +261 -176
- package/flow-report/api.d.ts +3 -3
- package/flow-report/api.ts +3 -3
- package/flow-report/assets/standalone-flow-template.html +2 -13
- package/flow-report/assets/styles.css +3 -3
- package/flow-report/clients/standalone.d.ts +3 -3
- package/flow-report/clients/standalone.ts +3 -3
- package/flow-report/src/app.d.ts +3 -3
- package/flow-report/src/app.tsx +3 -3
- package/flow-report/src/common.d.ts +3 -3
- package/flow-report/src/common.tsx +3 -3
- package/flow-report/src/header.d.ts +3 -3
- package/flow-report/src/header.tsx +3 -3
- package/flow-report/src/help-dialog.d.ts +3 -3
- package/flow-report/src/help-dialog.tsx +3 -3
- package/flow-report/src/i18n/i18n.d.ts +3 -3
- package/flow-report/src/i18n/i18n.tsx +3 -3
- package/flow-report/src/i18n/localized-strings.d.ts +3 -3
- package/flow-report/src/i18n/localized-strings.js +3 -3
- package/flow-report/src/i18n/ui-strings.js +3 -3
- package/flow-report/src/icons.d.ts +3 -3
- package/flow-report/src/icons.tsx +3 -3
- package/flow-report/src/sidebar/flow.d.ts +3 -3
- package/flow-report/src/sidebar/flow.tsx +3 -3
- package/flow-report/src/sidebar/sidebar.d.ts +3 -3
- package/flow-report/src/sidebar/sidebar.tsx +3 -3
- package/flow-report/src/summary/category.d.ts +3 -3
- package/flow-report/src/summary/category.tsx +3 -3
- package/flow-report/src/summary/summary.d.ts +3 -3
- package/flow-report/src/summary/summary.tsx +3 -3
- package/flow-report/src/topbar.d.ts +3 -3
- package/flow-report/src/topbar.tsx +3 -3
- package/flow-report/src/util.d.ts +3 -3
- package/flow-report/src/util.ts +3 -3
- package/flow-report/src/wrappers/category-score.d.ts +3 -3
- package/flow-report/src/wrappers/category-score.tsx +3 -3
- package/flow-report/src/wrappers/markdown.d.ts +3 -3
- package/flow-report/src/wrappers/markdown.tsx +3 -3
- package/flow-report/src/wrappers/report.d.ts +3 -3
- package/flow-report/src/wrappers/report.tsx +3 -3
- package/flow-report/src/wrappers/styles.d.ts +3 -3
- package/flow-report/src/wrappers/styles.tsx +3 -3
- package/flow-report/types/flow-report.d.ts +3 -3
- package/package.json +11 -11
- package/readme.md +1 -1
- package/report/assets/standalone-template.html +2 -13
- package/report/assets/styles.css +231 -93
- package/report/assets/templates.html +24 -52
- package/report/clients/bundle.js +3 -3
- package/report/clients/standalone.js +3 -3
- package/report/generator/file-namer.js +3 -3
- package/report/generator/flow-report-assets.js +3 -3
- package/report/generator/report-assets.js +3 -3
- package/report/generator/report-generator.js +3 -3
- package/report/renderer/api.js +3 -3
- package/report/renderer/category-renderer.js +2 -13
- package/report/renderer/components.d.ts +2 -2
- package/report/renderer/components.js +35 -52
- package/report/renderer/crc-details-renderer.js +2 -13
- package/report/renderer/details-renderer.js +2 -13
- package/report/renderer/dom.d.ts +24 -4
- package/report/renderer/dom.js +32 -16
- package/report/renderer/drop-down-menu.d.ts +3 -3
- package/report/renderer/drop-down-menu.js +3 -3
- package/report/renderer/element-screenshot-renderer.js +3 -3
- package/report/renderer/explodey-gauge.d.ts +11 -0
- package/report/renderer/explodey-gauge.js +357 -0
- package/report/renderer/features-util.d.ts +3 -3
- package/report/renderer/features-util.js +3 -3
- package/report/renderer/i18n-formatter.js +3 -3
- package/report/renderer/logger.d.ts +2 -13
- package/report/renderer/logger.js +2 -13
- package/report/renderer/open-tab.js +2 -13
- package/report/renderer/performance-category-renderer.d.ts +16 -18
- package/report/renderer/performance-category-renderer.js +99 -115
- package/report/renderer/pwa-category-renderer.js +2 -13
- package/report/renderer/report-globals.js +3 -3
- package/report/renderer/report-renderer.js +2 -13
- package/report/renderer/report-ui-features.js +2 -13
- package/report/renderer/report-utils.js +3 -3
- package/report/renderer/snippet-renderer.js +3 -3
- package/report/renderer/swap-locale-feature.d.ts +3 -3
- package/report/renderer/swap-locale-feature.js +3 -3
- package/report/renderer/text-encoding.js +3 -3
- package/report/renderer/topbar-features.js +3 -3
- package/report/types/augment-dom.d.ts +3 -3
- package/report/types/buffer.d.ts +3 -3
- package/report/types/html-renderer.d.ts +3 -3
- package/report/types/report-renderer.d.ts +3 -3
- package/report/types/report-result.d.ts +3 -3
- package/shared/esm-utils.js +3 -3
- package/shared/localization/format.d.ts +21 -16
- package/shared/localization/format.js +76 -39
- package/shared/localization/i18n-module.js +2 -3
- package/shared/localization/locales/en-US.json +14 -14
- package/shared/localization/locales/en-XL.json +14 -14
- package/shared/localization/locales.js +3 -3
- package/shared/localization/swap-flow-locale.js +3 -3
- package/shared/localization/swap-locale.js +3 -3
- package/shared/root.js +3 -3
- package/{core/lib → shared}/statistics.js +3 -3
- package/shared/type-verifiers.d.ts +4 -4
- package/shared/type-verifiers.js +3 -3
- package/shared/types/shared.d.ts +3 -3
- package/shared/util.d.ts +22 -0
- package/shared/util.js +33 -13
- package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +4 -3
- package/third-party/chromium-synchronization/installability-errors-test.js +3 -3
- package/third-party/download-content-shell/README.md +1 -1
- package/types/artifacts.d.ts +4 -3
- package/types/audit.d.ts +8 -4
- package/types/config.d.ts +3 -3
- package/types/externs.d.ts +3 -3
- package/types/gatherer.d.ts +3 -3
- package/types/internal/cssstyle.d.ts +3 -3
- package/types/internal/enquirer.d.ts +3 -3
- package/types/internal/global.d.ts +3 -3
- package/types/internal/http-link-header.d.ts +3 -3
- package/types/internal/lookup-closest-locale.d.ts +3 -3
- package/types/internal/metaviewport-parser.d.ts +3 -3
- package/types/internal/node.d.ts +3 -3
- package/types/internal/parse-cache-control.d.ts +3 -3
- package/types/internal/pretty-json-stringify.d.ts +3 -3
- package/types/internal/query-selector.d.ts +3 -3
- package/types/internal/rollup-plugin-postprocess.d.ts +3 -3
- package/types/internal/rxjs.d.ts +6 -3
- package/types/internal/smokehouse.d.ts +3 -3
- package/types/internal/test.d.ts +3 -3
- package/types/lh.d.ts +3 -3
- package/types/lh.js +3 -3
- package/types/lhr/audit-details.d.ts +3 -3
- package/types/lhr/audit-result.d.ts +19 -3
- package/types/lhr/budget.d.ts +3 -3
- package/types/lhr/flow-result.d.ts +3 -3
- package/types/lhr/i18n.d.ts +3 -3
- package/types/lhr/lhr.d.ts +3 -3
- package/types/lhr/settings.d.ts +3 -3
- package/types/lhr/treemap.d.ts +3 -3
- package/types/protocol.d.ts +3 -3
- package/types/puppeteer.d.ts +3 -3
- package/types/user-flow.d.ts +3 -3
- package/types/utility-types.d.ts +3 -3
- package/AUTHORS +0 -9
- /package/{core/lib → shared}/statistics.d.ts +0 -0
|
@@ -4,20 +4,6 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
4
4
|
* @return {!Element}
|
|
5
5
|
*/
|
|
6
6
|
_renderMetric(audit: LH.ReportResult.AuditRef): Element;
|
|
7
|
-
/**
|
|
8
|
-
* @param {LH.ReportResult.AuditRef} audit
|
|
9
|
-
* @param {number} scale
|
|
10
|
-
* @return {!Element}
|
|
11
|
-
*/
|
|
12
|
-
_renderOpportunity(audit: LH.ReportResult.AuditRef, scale: number): Element;
|
|
13
|
-
/**
|
|
14
|
-
* Get an audit's wastedMs to sort the opportunity by, and scale the sparkline width
|
|
15
|
-
* Opportunities with an error won't have a details object, so MIN_VALUE is returned to keep any
|
|
16
|
-
* erroring opportunities last in sort order.
|
|
17
|
-
* @param {LH.ReportResult.AuditRef} audit
|
|
18
|
-
* @return {number}
|
|
19
|
-
*/
|
|
20
|
-
_getWastedMs(audit: LH.ReportResult.AuditRef): number;
|
|
21
7
|
/**
|
|
22
8
|
* Get a link to the interactive scoring calculator with the metric values.
|
|
23
9
|
* @param {LH.ReportResult.AuditRef[]} auditRefs
|
|
@@ -25,13 +11,25 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
25
11
|
*/
|
|
26
12
|
_getScoringCalculatorHref(auditRefs: LH.ReportResult.AuditRef[]): string;
|
|
27
13
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
14
|
+
* Returns true if the audit is a general performance insight (i.e. not a metric or hidden audit).
|
|
15
|
+
*
|
|
16
|
+
* @param {LH.ReportResult.AuditRef} audit
|
|
17
|
+
* @return {boolean}
|
|
18
|
+
*/
|
|
19
|
+
_isPerformanceInsight(audit: LH.ReportResult.AuditRef): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Returns overallImpact and linearImpact for an audit.
|
|
22
|
+
* The overallImpact is determined by the audit saving's effect on the overall performance score.
|
|
23
|
+
* We use linearImpact to compare audits where their overallImpact is rounded down to 0.
|
|
30
24
|
*
|
|
31
25
|
* @param {LH.ReportResult.AuditRef} audit
|
|
32
|
-
* @
|
|
26
|
+
* @param {LH.ReportResult.AuditRef[]} metricAudits
|
|
27
|
+
* @return {{overallImpact: number, overallLinearImpact: number}}
|
|
33
28
|
*/
|
|
34
|
-
|
|
29
|
+
overallImpact(audit: LH.ReportResult.AuditRef, metricAudits: LH.ReportResult.AuditRef[]): {
|
|
30
|
+
overallImpact: number;
|
|
31
|
+
overallLinearImpact: number;
|
|
32
|
+
};
|
|
35
33
|
/**
|
|
36
34
|
* @param {LH.ReportResult.Category} category
|
|
37
35
|
* @param {Object<string, LH.Result.ReportGroup>} groups
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright 2018
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS-IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
3
|
+
* Copyright 2018 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
5
|
*/
|
|
17
6
|
|
|
18
7
|
/** @typedef {import('./dom.js').DOM} DOM */
|
|
@@ -20,6 +9,8 @@
|
|
|
20
9
|
import {CategoryRenderer} from './category-renderer.js';
|
|
21
10
|
import {ReportUtils} from './report-utils.js';
|
|
22
11
|
import {Globals} from './report-globals.js';
|
|
12
|
+
import {Util} from '../../shared/util.js';
|
|
13
|
+
import {createGauge, updateGauge} from './explodey-gauge.js';
|
|
23
14
|
|
|
24
15
|
export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
25
16
|
/**
|
|
@@ -54,61 +45,6 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
54
45
|
return element;
|
|
55
46
|
}
|
|
56
47
|
|
|
57
|
-
/**
|
|
58
|
-
* @param {LH.ReportResult.AuditRef} audit
|
|
59
|
-
* @param {number} scale
|
|
60
|
-
* @return {!Element}
|
|
61
|
-
*/
|
|
62
|
-
_renderOpportunity(audit, scale) {
|
|
63
|
-
const oppTmpl = this.dom.createComponent('opportunity');
|
|
64
|
-
const element = this.populateAuditValues(audit, oppTmpl);
|
|
65
|
-
element.id = audit.result.id;
|
|
66
|
-
|
|
67
|
-
if (!audit.result.details || audit.result.scoreDisplayMode === 'error') {
|
|
68
|
-
return element;
|
|
69
|
-
}
|
|
70
|
-
const details = audit.result.details;
|
|
71
|
-
if (details.overallSavingsMs === undefined) {
|
|
72
|
-
return element;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Overwrite the displayValue with opportunity's wastedMs
|
|
76
|
-
// TODO: normalize this to one tagName.
|
|
77
|
-
const displayEl =
|
|
78
|
-
this.dom.find('span.lh-audit__display-text, div.lh-audit__display-text', element);
|
|
79
|
-
const sparklineWidthPct = `${details.overallSavingsMs / scale * 100}%`;
|
|
80
|
-
this.dom.find('div.lh-sparkline__bar', element).style.width = sparklineWidthPct;
|
|
81
|
-
displayEl.textContent = Globals.i18n.formatSeconds(details.overallSavingsMs, 0.01);
|
|
82
|
-
|
|
83
|
-
// Set [title] tooltips
|
|
84
|
-
if (audit.result.displayValue) {
|
|
85
|
-
const displayValue = audit.result.displayValue;
|
|
86
|
-
this.dom.find('div.lh-load-opportunity__sparkline', element).title = displayValue;
|
|
87
|
-
displayEl.title = displayValue;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return element;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Get an audit's wastedMs to sort the opportunity by, and scale the sparkline width
|
|
95
|
-
* Opportunities with an error won't have a details object, so MIN_VALUE is returned to keep any
|
|
96
|
-
* erroring opportunities last in sort order.
|
|
97
|
-
* @param {LH.ReportResult.AuditRef} audit
|
|
98
|
-
* @return {number}
|
|
99
|
-
*/
|
|
100
|
-
_getWastedMs(audit) {
|
|
101
|
-
if (audit.result.details) {
|
|
102
|
-
const details = audit.result.details;
|
|
103
|
-
if (typeof details.overallSavingsMs !== 'number') {
|
|
104
|
-
throw new Error('non-opportunity details passed to _getWastedMs');
|
|
105
|
-
}
|
|
106
|
-
return details.overallSavingsMs;
|
|
107
|
-
} else {
|
|
108
|
-
return Number.MIN_VALUE;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
48
|
/**
|
|
113
49
|
* Get a link to the interactive scoring calculator with the metric values.
|
|
114
50
|
* @param {LH.ReportResult.AuditRef[]} auditRefs
|
|
@@ -157,18 +93,55 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
157
93
|
}
|
|
158
94
|
|
|
159
95
|
/**
|
|
160
|
-
*
|
|
161
|
-
* The audit details type will determine which of the two groups an audit is in.
|
|
96
|
+
* Returns true if the audit is a general performance insight (i.e. not a metric or hidden audit).
|
|
162
97
|
*
|
|
163
98
|
* @param {LH.ReportResult.AuditRef} audit
|
|
164
|
-
* @return {
|
|
99
|
+
* @return {boolean}
|
|
165
100
|
*/
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
101
|
+
_isPerformanceInsight(audit) {
|
|
102
|
+
return !audit.group;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Returns overallImpact and linearImpact for an audit.
|
|
107
|
+
* The overallImpact is determined by the audit saving's effect on the overall performance score.
|
|
108
|
+
* We use linearImpact to compare audits where their overallImpact is rounded down to 0.
|
|
109
|
+
*
|
|
110
|
+
* @param {LH.ReportResult.AuditRef} audit
|
|
111
|
+
* @param {LH.ReportResult.AuditRef[]} metricAudits
|
|
112
|
+
* @return {{overallImpact: number, overallLinearImpact: number}}
|
|
113
|
+
*/
|
|
114
|
+
overallImpact(audit, metricAudits) {
|
|
115
|
+
if (!audit.result.metricSavings) {
|
|
116
|
+
return {overallImpact: 0, overallLinearImpact: 0};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
let overallImpact = 0;
|
|
120
|
+
let overallLinearImpact = 0;
|
|
121
|
+
for (const [k, savings] of Object.entries(audit.result.metricSavings)) {
|
|
122
|
+
// Get metric savings for individual audit.
|
|
123
|
+
if (savings === undefined) continue;
|
|
124
|
+
|
|
125
|
+
// Get the metric data.
|
|
126
|
+
const mAudit = metricAudits.find(audit => audit.acronym === k);
|
|
127
|
+
if (!mAudit) continue;
|
|
128
|
+
if (mAudit.result.score === null) continue;
|
|
129
|
+
|
|
130
|
+
const mValue = mAudit.result.numericValue;
|
|
131
|
+
if (!mValue) continue;
|
|
132
|
+
|
|
133
|
+
const linearImpact = savings / mValue * mAudit.weight;
|
|
134
|
+
overallLinearImpact += linearImpact;
|
|
135
|
+
|
|
136
|
+
const scoringOptions = mAudit.result.scoringOptions;
|
|
137
|
+
if (!scoringOptions) continue;
|
|
138
|
+
|
|
139
|
+
const newMetricScore = Util.computeLogNormalScore(scoringOptions, mValue - savings);
|
|
140
|
+
|
|
141
|
+
const weightedMetricImpact = (newMetricScore - mAudit.result.score) * mAudit.weight;
|
|
142
|
+
overallImpact += weightedMetricImpact;
|
|
170
143
|
}
|
|
171
|
-
return
|
|
144
|
+
return {overallImpact, overallLinearImpact};
|
|
172
145
|
}
|
|
173
146
|
|
|
174
147
|
/**
|
|
@@ -238,53 +211,58 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
238
211
|
filmstripEl && timelineEl.append(filmstripEl);
|
|
239
212
|
}
|
|
240
213
|
|
|
241
|
-
// Opportunities
|
|
242
|
-
const opportunityAudits = category.auditRefs
|
|
243
|
-
.filter(audit => this._classifyPerformanceAudit(audit) === 'load-opportunity')
|
|
244
|
-
.filter(audit => !ReportUtils.showAsPassed(audit.result))
|
|
245
|
-
.sort((auditA, auditB) => this._getWastedMs(auditB) - this._getWastedMs(auditA));
|
|
246
|
-
|
|
247
214
|
const filterableMetrics = metricAudits.filter(a => !!a.relevantAudits);
|
|
248
215
|
// TODO: only add if there are opportunities & diagnostics rendered.
|
|
249
216
|
if (filterableMetrics.length) {
|
|
250
217
|
this.renderMetricAuditFilter(filterableMetrics, element);
|
|
251
218
|
}
|
|
252
219
|
|
|
253
|
-
if (opportunityAudits.length) {
|
|
254
|
-
// Scale the sparklines relative to savings, minimum 2s to not overstate small savings
|
|
255
|
-
const minimumScale = 2000;
|
|
256
|
-
const wastedMsValues = opportunityAudits.map(audit => this._getWastedMs(audit));
|
|
257
|
-
const maxWaste = Math.max(...wastedMsValues);
|
|
258
|
-
const scale = Math.max(Math.ceil(maxWaste / 1000) * 1000, minimumScale);
|
|
259
|
-
const [groupEl, footerEl] = this.renderAuditGroup(groups['load-opportunities']);
|
|
260
|
-
const tmpl = this.dom.createComponent('opportunityHeader');
|
|
261
|
-
|
|
262
|
-
this.dom.find('.lh-load-opportunity__col--one', tmpl).textContent =
|
|
263
|
-
strings.opportunityResourceColumnLabel;
|
|
264
|
-
this.dom.find('.lh-load-opportunity__col--two', tmpl).textContent =
|
|
265
|
-
strings.opportunitySavingsColumnLabel;
|
|
266
|
-
|
|
267
|
-
const headerEl = this.dom.find('.lh-load-opportunity__header', tmpl);
|
|
268
|
-
groupEl.insertBefore(headerEl, footerEl);
|
|
269
|
-
opportunityAudits.forEach(item =>
|
|
270
|
-
groupEl.insertBefore(this._renderOpportunity(item, scale), footerEl));
|
|
271
|
-
groupEl.classList.add('lh-audit-group--load-opportunities');
|
|
272
|
-
element.append(groupEl);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
220
|
// Diagnostics
|
|
276
221
|
const diagnosticAudits = category.auditRefs
|
|
277
|
-
.filter(audit => this.
|
|
278
|
-
.filter(audit => !ReportUtils.showAsPassed(audit.result))
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
222
|
+
.filter(audit => this._isPerformanceInsight(audit))
|
|
223
|
+
.filter(audit => !ReportUtils.showAsPassed(audit.result));
|
|
224
|
+
|
|
225
|
+
/** @type {Array<{auditRef:LH.ReportResult.AuditRef, overallImpact: number, overallLinearImpact: number, guidanceLevel: number}>} */
|
|
226
|
+
const auditImpacts = [];
|
|
227
|
+
diagnosticAudits.forEach(audit => {
|
|
228
|
+
const {
|
|
229
|
+
overallImpact: overallImpact,
|
|
230
|
+
overallLinearImpact: overallLinearImpact,
|
|
231
|
+
} = this.overallImpact(audit, metricAudits);
|
|
232
|
+
const guidanceLevel = audit.result.guidanceLevel ?? 1;
|
|
233
|
+
auditImpacts.push({auditRef: audit, overallImpact, overallLinearImpact, guidanceLevel});
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
auditImpacts.sort((a, b) => {
|
|
237
|
+
// Performance diagnostics should only have score display modes of "informative" and "metricSavings"
|
|
238
|
+
// If the score display mode is "metricSavings", the `score` will be a coarse approximation of the overall impact.
|
|
239
|
+
// Therefore, it makes sense to sort audits by score first to ensure visual clarity with the score icons.
|
|
240
|
+
const scoreA = a.auditRef.result.scoreDisplayMode === 'informative'
|
|
241
|
+
? 100
|
|
242
|
+
: Number(a.auditRef.result.score);
|
|
243
|
+
const scoreB = b.auditRef.result.scoreDisplayMode === 'informative'
|
|
244
|
+
? 100
|
|
245
|
+
: Number(b.auditRef.result.score);
|
|
246
|
+
if (scoreA !== scoreB) return scoreA - scoreB;
|
|
247
|
+
|
|
248
|
+
// Overall impact is the estimated improvement to the performance score
|
|
249
|
+
if (a.overallImpact !== b.overallImpact) return b.overallImpact - a.overallImpact;
|
|
250
|
+
|
|
251
|
+
// Fall back to the linear impact if the normal impact is rounded down to 0
|
|
252
|
+
if (
|
|
253
|
+
a.overallImpact === 0 && b.overallImpact === 0 &&
|
|
254
|
+
a.overallLinearImpact !== b.overallLinearImpact
|
|
255
|
+
) {
|
|
256
|
+
return b.overallLinearImpact - a.overallLinearImpact;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Audits that have no estimated savings should be prioritized by the guidance level
|
|
260
|
+
return b.guidanceLevel - a.guidanceLevel;
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
if (auditImpacts.length) {
|
|
286
264
|
const [groupEl, footerEl] = this.renderAuditGroup(groups['diagnostics']);
|
|
287
|
-
|
|
265
|
+
auditImpacts.forEach(item => groupEl.insertBefore(this.renderAudit(item.auditRef), footerEl));
|
|
288
266
|
groupEl.classList.add('lh-audit-group--diagnostics');
|
|
289
267
|
element.append(groupEl);
|
|
290
268
|
}
|
|
@@ -292,7 +270,7 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
292
270
|
// Passed audits
|
|
293
271
|
const passedAudits = category.auditRefs
|
|
294
272
|
.filter(audit =>
|
|
295
|
-
this.
|
|
273
|
+
this._isPerformanceInsight(audit) && ReportUtils.showAsPassed(audit.result));
|
|
296
274
|
|
|
297
275
|
if (!passedAudits.length) return element;
|
|
298
276
|
|
|
@@ -324,6 +302,12 @@ export class PerformanceCategoryRenderer extends CategoryRenderer {
|
|
|
324
302
|
element.append(groupEl);
|
|
325
303
|
}
|
|
326
304
|
|
|
305
|
+
if (!options || options?.gatherMode === 'navigation') {
|
|
306
|
+
const el = createGauge(this.dom);
|
|
307
|
+
updateGauge(this.dom, el, category);
|
|
308
|
+
this.dom.find('.lh-score__gauge', element).replaceWith(el);
|
|
309
|
+
}
|
|
310
|
+
|
|
327
311
|
return element;
|
|
328
312
|
}
|
|
329
313
|
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright 2018
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS-IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
3
|
+
* Copyright 2018 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
5
|
*/
|
|
17
6
|
|
|
18
7
|
import {CategoryRenderer} from './category-renderer.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {UIStrings} from './report-utils.js';
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright 2017
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS-IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
3
|
+
* Copyright 2017 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
5
|
*
|
|
17
6
|
* Dummy text for ensuring report robustness: </script> pre$`post %%LIGHTHOUSE_JSON%%
|
|
18
7
|
* (this is handled by terser)
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* Copyright 2017
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS-IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
3
|
+
* Copyright 2017 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
5
|
*/
|
|
17
6
|
|
|
18
7
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {Util} from '../../shared/util.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2019 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/** @typedef {import('./details-renderer').DetailsRenderer} DetailsRenderer */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* @fileoverview Creates a <select> element, filled with all supported locales
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* global CompressionStream */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* eslint-env browser */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/**
|
package/report/types/buffer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import AuditDetails from '../../types/lhr/audit-details';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { Result as AuditResult } from "../../types/lhr/audit-result";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2018 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {Result as AuditResult} from '../../types/lhr/audit-result';
|
package/shared/esm-utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import {createRequire} from 'module';
|
|
@@ -1,27 +1,25 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export type ArgumentElement = import('intl-messageformat-parser').ArgumentElement;
|
|
1
|
+
export type MessageFormatElement = import('@formatjs/icu-messageformat-parser').MessageFormatElement;
|
|
3
2
|
export const DEFAULT_LOCALE: "en-US";
|
|
4
3
|
/** @param {string[]} pathInLHR */
|
|
5
4
|
export function _formatPathAsString(pathInLHR: string[]): string;
|
|
6
5
|
/**
|
|
7
|
-
* Function to retrieve all
|
|
8
|
-
*
|
|
9
|
-
* differs from
|
|
6
|
+
* Function to retrieve all elements from an ICU message AST that are associated
|
|
7
|
+
* with a named input, like '{varName}' or '{varName, number, bytes}'. This
|
|
8
|
+
* differs from literal message types which are just arbitrary text.
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* This function recursively inspects plural elements for nested elements,
|
|
11
|
+
* but since the output is a Map they are deduplicated.
|
|
12
|
+
* e.g. "=1{hello {icu}} =other{hello {icu}}" will produce one element in the output,
|
|
13
|
+
* with "icu" as its key.
|
|
13
14
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* the variable "icu" would appear twice if it wasn't de duplicated. And they cannot
|
|
17
|
-
* be stored in a set because they are not equal since their locations are different,
|
|
18
|
-
* thus they are stored via a Map keyed on the "id" which is the ICU varName.
|
|
15
|
+
* TODO: don't do that deduplication because messages within a plural message could be number
|
|
16
|
+
* messages with different styles.
|
|
19
17
|
*
|
|
20
|
-
* @param {Array<
|
|
21
|
-
* @param {Map<string,
|
|
22
|
-
* @return {Map<string,
|
|
18
|
+
* @param {Array<MessageFormatElement>} icuElements
|
|
19
|
+
* @param {Map<string, MessageFormatElement>} [customElements]
|
|
20
|
+
* @return {Map<string, MessageFormatElement>}
|
|
23
21
|
*/
|
|
24
|
-
export function collectAllCustomElementsFromICU(icuElements: Array<
|
|
22
|
+
export function collectAllCustomElementsFromICU(icuElements: Array<MessageFormatElement>, customElements?: Map<string, import("@formatjs/icu-messageformat-parser").MessageFormatElement> | undefined): Map<string, MessageFormatElement>;
|
|
25
23
|
/**
|
|
26
24
|
* Returns whether `icuMessageOrNot`` is an `LH.IcuMessage` instance.
|
|
27
25
|
* @param {unknown} icuMessageOrNot
|
|
@@ -103,4 +101,11 @@ export function getAvailableLocales(): Array<LH.Locale>;
|
|
|
103
101
|
* @return {Array<string>}
|
|
104
102
|
*/
|
|
105
103
|
export function getCanonicalLocales(): Array<string>;
|
|
104
|
+
/**
|
|
105
|
+
* Our strings were made when \ was the escape character, but now it is '. To avoid churn,
|
|
106
|
+
* let's convert to the new style in memory.
|
|
107
|
+
* @param {string} message
|
|
108
|
+
* @return {string}
|
|
109
|
+
*/
|
|
110
|
+
export function escapeIcuMessage(message: string): string;
|
|
106
111
|
//# sourceMappingURL=format.d.ts.map
|