lighthouse 9.5.0-dev.20220607 → 9.6.2
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/dist/report/bundle.esm.js +467 -520
- package/dist/report/flow.js +22 -22
- package/dist/report/standalone.js +19 -19
- package/flow-report/src/summary/category.tsx +1 -1
- package/flow-report/src/topbar.tsx +2 -10
- package/flow-report/src/util.ts +1 -1
- package/flow-report/test/topbar-test.tsx +8 -7
- package/jest.config.js +1 -1
- package/lighthouse-cli/.eslintrc.cjs +4 -3
- package/lighthouse-cli/bin.js +1 -0
- package/lighthouse-cli/cli-flags.js +4 -3
- package/lighthouse-cli/commands/commands.js +1 -0
- package/lighthouse-cli/commands/list-audits.js +1 -0
- package/lighthouse-cli/commands/list-locales.js +1 -0
- package/lighthouse-cli/commands/list-trace-categories.js +1 -0
- package/lighthouse-cli/index.js +1 -0
- package/lighthouse-cli/printer.js +1 -0
- package/lighthouse-cli/run.js +24 -9
- package/lighthouse-cli/sentry-prompt.js +1 -0
- package/lighthouse-cli/test/smokehouse/core-tests.js +1 -0
- package/lighthouse-cli/test/smokehouse/frontends/back-compat-util.js +1 -0
- package/lighthouse-cli/test/smokehouse/frontends/lib.js +1 -0
- package/lighthouse-cli/test/smokehouse/frontends/node.js +1 -0
- package/lighthouse-cli/test/smokehouse/frontends/smokehouse-bin.js +1 -0
- package/lighthouse-cli/test/smokehouse/lib/child-process-error.js +1 -0
- package/lighthouse-cli/test/smokehouse/lib/concurrent-mapper.js +1 -0
- package/lighthouse-cli/test/smokehouse/lib/local-console.js +1 -0
- package/lighthouse-cli/test/smokehouse/lighthouse-runners/bundle.js +23 -109
- package/lighthouse-cli/test/smokehouse/lighthouse-runners/cli.js +3 -2
- package/lighthouse-cli/test/smokehouse/lighthouse-runners/devtools.js +19 -28
- package/lighthouse-cli/test/smokehouse/report-assert.js +4 -3
- package/lighthouse-cli/test/smokehouse/smokehouse.js +1 -1
- package/lighthouse-cli/test/smokehouse/version-check-test.js +3 -0
- package/lighthouse-cli/test/smokehouse/version-check.js +1 -0
- package/lighthouse-core/audits/accessibility/accesskeys.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-allowed-attr.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-command-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-hidden-body.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-hidden-focus.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-input-field-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-meter-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-progressbar-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-required-attr.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-required-children.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-required-parent.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-roles.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-toggle-field-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-tooltip-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-treeitem-name.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-valid-attr-value.js +1 -1
- package/lighthouse-core/audits/accessibility/aria-valid-attr.js +1 -1
- package/lighthouse-core/audits/accessibility/button-name.js +1 -1
- package/lighthouse-core/audits/accessibility/bypass.js +1 -1
- package/lighthouse-core/audits/accessibility/color-contrast.js +1 -1
- package/lighthouse-core/audits/accessibility/definition-list.js +1 -1
- package/lighthouse-core/audits/accessibility/dlitem.js +1 -1
- package/lighthouse-core/audits/accessibility/document-title.js +1 -1
- package/lighthouse-core/audits/accessibility/duplicate-id-active.js +1 -1
- package/lighthouse-core/audits/accessibility/duplicate-id-aria.js +1 -1
- package/lighthouse-core/audits/accessibility/form-field-multiple-labels.js +1 -1
- package/lighthouse-core/audits/accessibility/frame-title.js +1 -1
- package/lighthouse-core/audits/accessibility/heading-order.js +1 -1
- package/lighthouse-core/audits/accessibility/html-has-lang.js +1 -1
- package/lighthouse-core/audits/accessibility/html-lang-valid.js +1 -1
- package/lighthouse-core/audits/accessibility/image-alt.js +1 -1
- package/lighthouse-core/audits/accessibility/input-image-alt.js +1 -1
- package/lighthouse-core/audits/accessibility/label.js +1 -1
- package/lighthouse-core/audits/accessibility/link-name.js +1 -1
- package/lighthouse-core/audits/accessibility/list.js +1 -1
- package/lighthouse-core/audits/accessibility/listitem.js +5 -5
- package/lighthouse-core/audits/accessibility/meta-refresh.js +1 -1
- package/lighthouse-core/audits/accessibility/meta-viewport.js +1 -1
- package/lighthouse-core/audits/accessibility/object-alt.js +1 -1
- package/lighthouse-core/audits/accessibility/tabindex.js +1 -1
- package/lighthouse-core/audits/accessibility/td-headers-attr.js +1 -1
- package/lighthouse-core/audits/accessibility/th-has-data-cells.js +1 -1
- package/lighthouse-core/audits/accessibility/valid-lang.js +1 -1
- package/lighthouse-core/audits/accessibility/video-caption.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/byte-efficiency-audit.js +1 -2
- package/lighthouse-core/audits/byte-efficiency/duplicated-javascript.js +12 -11
- package/lighthouse-core/audits/byte-efficiency/efficient-animated-content.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/legacy-javascript.js +24 -22
- package/lighthouse-core/audits/byte-efficiency/offscreen-images.js +2 -3
- package/lighthouse-core/audits/byte-efficiency/render-blocking-resources.js +3 -2
- package/lighthouse-core/audits/byte-efficiency/unminified-css.js +5 -3
- package/lighthouse-core/audits/byte-efficiency/unminified-javascript.js +11 -10
- package/lighthouse-core/audits/byte-efficiency/unused-css-rules.js +1 -0
- package/lighthouse-core/audits/byte-efficiency/unused-javascript.js +8 -11
- package/lighthouse-core/audits/byte-efficiency/uses-responsive-images.js +1 -1
- package/lighthouse-core/audits/byte-efficiency/uses-text-compression.js +1 -1
- package/lighthouse-core/audits/deprecations.js +598 -8
- package/lighthouse-core/audits/diagnostics.js +3 -4
- package/lighthouse-core/audits/dobetterweb/doctype.js +9 -20
- package/lighthouse-core/audits/dobetterweb/geolocation-on-start.js +1 -1
- package/lighthouse-core/audits/dobetterweb/no-document-write.js +1 -1
- package/lighthouse-core/audits/dobetterweb/notification-on-start.js +1 -1
- package/lighthouse-core/audits/dobetterweb/uses-http2.js +1 -2
- package/lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js +1 -1
- package/lighthouse-core/audits/errors-in-console.js +2 -2
- package/lighthouse-core/audits/long-tasks.js +2 -3
- package/lighthouse-core/audits/metrics/first-contentful-paint-3g.js +2 -2
- package/lighthouse-core/audits/metrics/first-contentful-paint.js +2 -3
- package/lighthouse-core/audits/metrics/first-meaningful-paint.js +2 -3
- package/lighthouse-core/audits/metrics/interactive.js +2 -3
- package/lighthouse-core/audits/metrics/largest-contentful-paint.js +2 -3
- package/lighthouse-core/audits/metrics/max-potential-fid.js +2 -3
- package/lighthouse-core/audits/metrics/speed-index.js +2 -3
- package/lighthouse-core/audits/metrics/total-blocking-time.js +2 -3
- package/lighthouse-core/audits/metrics.js +2 -3
- package/lighthouse-core/audits/no-unload-listeners.js +15 -7
- package/lighthouse-core/audits/predictive-perf.js +1 -2
- package/lighthouse-core/audits/preload-lcp-image.js +3 -3
- package/lighthouse-core/audits/redirects.js +1 -1
- package/lighthouse-core/audits/script-treemap-data.js +45 -45
- package/lighthouse-core/audits/seo/http-status-code.js +4 -2
- package/lighthouse-core/audits/seo/link-text.js +0 -2
- package/lighthouse-core/audits/server-response-time.js +17 -2
- package/lighthouse-core/audits/service-worker.js +2 -7
- package/lighthouse-core/audits/timing-budget.js +2 -3
- package/lighthouse-core/audits/uses-rel-preconnect.js +1 -1
- package/lighthouse-core/audits/uses-rel-preload.js +1 -1
- package/lighthouse-core/audits/valid-source-maps.js +14 -12
- package/lighthouse-core/audits/violation-audit.js +1 -1
- package/lighthouse-core/audits/work-during-interaction.js +2 -2
- package/lighthouse-core/computed/critical-request-chains.js +9 -5
- package/lighthouse-core/computed/js-bundles.js +11 -11
- package/lighthouse-core/computed/main-resource.js +2 -3
- package/lighthouse-core/computed/metrics/first-contentful-paint-all-frames.js +1 -1
- package/lighthouse-core/computed/metrics/first-contentful-paint.js +1 -1
- package/lighthouse-core/computed/metrics/first-meaningful-paint.js +1 -1
- package/lighthouse-core/computed/metrics/interactive.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-first-contentful-paint.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-first-meaningful-paint.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-interactive.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-largest-contentful-paint.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-max-potential-fid.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-metric.js +5 -3
- package/lighthouse-core/computed/metrics/lantern-speed-index.js +1 -1
- package/lighthouse-core/computed/metrics/lantern-total-blocking-time.js +1 -1
- package/lighthouse-core/computed/metrics/largest-contentful-paint-all-frames.js +1 -1
- package/lighthouse-core/computed/metrics/largest-contentful-paint.js +1 -1
- package/lighthouse-core/computed/metrics/max-potential-fid.js +1 -1
- package/lighthouse-core/computed/metrics/metric.js +0 -1
- package/lighthouse-core/computed/metrics/speed-index.js +1 -1
- package/lighthouse-core/computed/metrics/timing-summary.js +6 -13
- package/lighthouse-core/computed/metrics/total-blocking-time.js +1 -1
- package/lighthouse-core/computed/module-duplication.js +5 -6
- package/lighthouse-core/computed/page-dependency-graph.js +28 -55
- package/lighthouse-core/computed/resource-summary.js +5 -5
- package/lighthouse-core/computed/unused-css.js +7 -6
- package/lighthouse-core/computed/unused-javascript-summary.js +36 -16
- package/lighthouse-core/config/budget.js +2 -2
- package/lighthouse-core/config/default-config.js +1 -2
- package/lighthouse-core/fraggle-rock/api.js +1 -1
- package/lighthouse-core/fraggle-rock/config/default-config.js +0 -3
- package/lighthouse-core/fraggle-rock/gather/base-artifacts.js +3 -6
- package/lighthouse-core/fraggle-rock/gather/driver.js +2 -2
- package/lighthouse-core/fraggle-rock/gather/navigation-runner.js +26 -51
- package/lighthouse-core/fraggle-rock/gather/runner-helpers.js +3 -0
- package/lighthouse-core/fraggle-rock/gather/session.js +22 -23
- package/lighthouse-core/fraggle-rock/gather/snapshot-runner.js +4 -5
- package/lighthouse-core/fraggle-rock/gather/timespan-runner.js +6 -6
- package/lighthouse-core/gather/connections/cri.js +1 -5
- package/lighthouse-core/gather/driver/execution-context.js +2 -5
- package/lighthouse-core/gather/driver/navigation.js +10 -13
- package/lighthouse-core/gather/driver/network-monitor.js +3 -16
- package/lighthouse-core/gather/driver.js +1 -6
- package/lighthouse-core/gather/fetcher.js +210 -34
- package/lighthouse-core/gather/gather-runner.js +17 -13
- package/lighthouse-core/gather/gatherers/accessibility.js +4 -16
- package/lighthouse-core/gather/gatherers/console-messages.js +2 -4
- package/lighthouse-core/gather/gatherers/dobetterweb/doctype.js +2 -4
- package/lighthouse-core/gather/gatherers/full-page-screenshot.js +2 -3
- package/lighthouse-core/gather/gatherers/iframe-elements.js +1 -4
- package/lighthouse-core/gather/gatherers/image-elements.js +0 -2
- package/lighthouse-core/gather/gatherers/js-usage.js +87 -12
- package/lighthouse-core/gather/gatherers/link-elements.js +14 -12
- package/lighthouse-core/gather/gatherers/main-document-content.js +8 -8
- package/lighthouse-core/gather/gatherers/script-elements.js +56 -7
- package/lighthouse-core/gather/gatherers/seo/robots-txt.js +30 -2
- package/lighthouse-core/gather/gatherers/source-maps.js +1 -8
- package/lighthouse-core/gather/gatherers/web-app-manifest.js +2 -2
- package/lighthouse-core/index.js +2 -26
- package/lighthouse-core/lib/cdt/generated/SourceMap.js +1 -1
- package/lighthouse-core/lib/dependency-graph/simulator/network-analyzer.js +29 -8
- package/lighthouse-core/lib/navigation-error.js +4 -13
- package/lighthouse-core/lib/page-functions.js +1 -3
- package/lighthouse-core/lib/script-helpers.js +6 -11
- package/lighthouse-core/lib/url-shim.js +2 -2
- package/lighthouse-core/runner.js +5 -0
- package/lighthouse-core/scripts/manual-chrome-launcher.js +1 -0
- package/lighthouse-core/util-commonjs.js +6 -8
- package/package.json +13 -13
- package/readme.md +1 -1
- package/report/.eslintrc.cjs +1 -3
- package/report/assets/styles.css +5 -10
- package/report/assets/templates.html +9 -10
- package/report/clients/bundle.js +1 -0
- package/report/clients/standalone.js +1 -0
- package/report/generator/report-generator.js +21 -46
- package/report/renderer/api.js +2 -0
- package/report/renderer/category-renderer.js +24 -20
- package/report/renderer/components.js +304 -303
- package/report/renderer/crc-details-renderer.js +24 -21
- package/report/renderer/details-renderer.js +12 -12
- package/report/renderer/dom.js +7 -6
- package/report/renderer/drop-down-menu.js +1 -0
- package/report/renderer/element-screenshot-renderer.js +5 -1
- package/report/renderer/features-util.js +1 -0
- package/report/renderer/i18n.js +62 -118
- package/report/renderer/logger.js +1 -0
- package/report/renderer/open-tab.js +3 -1
- package/report/renderer/performance-category-renderer.js +11 -10
- package/report/renderer/pwa-category-renderer.js +4 -3
- package/report/renderer/report-renderer.js +17 -17
- package/report/renderer/report-ui-features.js +1 -0
- package/report/renderer/snippet-renderer.js +3 -2
- package/report/renderer/swap-locale-feature.js +1 -0
- package/report/renderer/text-encoding.js +1 -0
- package/report/renderer/topbar-features.js +1 -0
- package/report/renderer/util.js +6 -7
- package/report/test/clients/bundle-test.js +5 -0
- package/report/test/generator/file-namer-test.js +1 -0
- package/report/test/generator/report-generator-test.js +20 -25
- package/report/test/renderer/category-renderer-test.js +4 -3
- package/report/test/renderer/components-test.js +3 -0
- package/report/test/renderer/crc-details-renderer-test.js +3 -0
- package/report/test/renderer/details-renderer-test.js +3 -49
- package/report/test/renderer/dom-test.js +3 -0
- package/report/test/renderer/element-screenshot-renderer-test.js +6 -3
- package/report/test/renderer/i18n-test.js +25 -70
- package/report/test/renderer/performance-category-renderer-test.js +5 -14
- package/report/test/renderer/pwa-category-renderer-test.js +4 -3
- package/report/test/renderer/report-renderer-axe-test.js +4 -3
- package/report/test/renderer/report-renderer-test.js +4 -3
- package/report/test/renderer/report-ui-features-test.js +4 -3
- package/report/test/renderer/snippet-renderer-test.js +3 -0
- package/report/test/renderer/text-encoding-test.js +3 -0
- package/report/test/renderer/util-test.js +5 -4
- package/report/test-assets/faux-psi.js +1 -2
- package/shared/localization/format.js +3 -7
- package/shared/localization/locales/en-US.json +238 -55
- package/shared/localization/locales/en-XL.json +238 -55
- package/shared/test/localization/format-test.js +2 -8
- package/shared/test/localization/locales-test.js +2 -0
- package/shared/test/localization/swap-locale-test.js +2 -0
- package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +2 -0
- package/third-party/chromium-synchronization/installability-errors-test.js +2 -0
- package/tsconfig.json +0 -1
- package/types/artifacts.d.ts +8 -47
- package/types/config.d.ts +0 -2
- package/types/externs.d.ts +2 -3
- package/types/gatherer.d.ts +2 -1
- package/types/global-lh.d.ts +0 -3
- package/types/lhr/lhr.d.ts +2 -2
- package/types/lhr/treemap.d.ts +1 -0
- package/changelog.md +0 -5902
- package/lighthouse-core/audits/script-elements-test-audit.js +0 -30
- package/lighthouse-core/gather/gatherers/scripts.js +0 -154
- package/lighthouse-core/scripts/package.json +0 -4
- package/report/test/.eslintrc.cjs +0 -11
- package/shared/test/localization/.eslintrc.cjs +0 -11
|
@@ -132,7 +132,7 @@ const SummaryTooltip: FunctionComponent<{
|
|
|
132
132
|
{
|
|
133
133
|
!displayAsFraction && category.score !== null && <>
|
|
134
134
|
<span> · </span>
|
|
135
|
-
<span>{i18n.
|
|
135
|
+
<span>{i18n.formatNumber(category.score * 100)}</span>
|
|
136
136
|
</>
|
|
137
137
|
}
|
|
138
138
|
</div>
|
|
@@ -17,12 +17,9 @@ import {saveFile} from '../../report/renderer/api';
|
|
|
17
17
|
function saveHtml(flowResult: LH.FlowResult, htmlStr: string) {
|
|
18
18
|
const blob = new Blob([htmlStr], {type: 'text/html'});
|
|
19
19
|
const filename = getFlowResultFilenamePrefix(flowResult) + '.html';
|
|
20
|
-
|
|
20
|
+
saveFile(blob, filename);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
// Store `saveFile` here so we can do dependency injection.
|
|
24
|
-
saveHtml.saveFile = saveFile;
|
|
25
|
-
|
|
26
23
|
/* eslint-disable max-len */
|
|
27
24
|
const Logo: FunctionComponent = () => {
|
|
28
25
|
return (
|
|
@@ -71,7 +68,7 @@ const TopbarButton: FunctionComponent<{
|
|
|
71
68
|
);
|
|
72
69
|
};
|
|
73
70
|
|
|
74
|
-
const Topbar: FunctionComponent<{onMenuClick: JSX.MouseEventHandler<HTMLButtonElement>}> =
|
|
71
|
+
export const Topbar: FunctionComponent<{onMenuClick: JSX.MouseEventHandler<HTMLButtonElement>}> =
|
|
75
72
|
({onMenuClick}) => {
|
|
76
73
|
const flowResult = useFlowResult();
|
|
77
74
|
const strings = useLocalizedStrings();
|
|
@@ -121,8 +118,3 @@ const Topbar: FunctionComponent<{onMenuClick: JSX.MouseEventHandler<HTMLButtonEl
|
|
|
121
118
|
</div>
|
|
122
119
|
);
|
|
123
120
|
};
|
|
124
|
-
|
|
125
|
-
export {
|
|
126
|
-
Topbar,
|
|
127
|
-
saveHtml,
|
|
128
|
-
};
|
package/flow-report/src/util.ts
CHANGED
|
@@ -137,7 +137,7 @@ function useExternalRenderer<T extends Element>(
|
|
|
137
137
|
if (!ref.current) return;
|
|
138
138
|
|
|
139
139
|
const root = renderCallback();
|
|
140
|
-
ref.current.
|
|
140
|
+
ref.current.appendChild(root);
|
|
141
141
|
|
|
142
142
|
return () => {
|
|
143
143
|
if (ref.current?.contains(root)) ref.current.removeChild(root);
|
|
@@ -10,10 +10,16 @@ import {act, render} from '@testing-library/preact';
|
|
|
10
10
|
|
|
11
11
|
import {FlowResultContext, OptionsContext} from '../src/util';
|
|
12
12
|
import {I18nProvider} from '../src/i18n/i18n';
|
|
13
|
-
import {Topbar, saveHtml} from '../src/topbar';
|
|
14
13
|
|
|
15
14
|
const mockSaveFile = jest.fn();
|
|
16
|
-
|
|
15
|
+
jest.unstable_mockModule('../../../report/renderer/api.js', () => ({
|
|
16
|
+
saveFile: mockSaveFile,
|
|
17
|
+
}));
|
|
18
|
+
|
|
19
|
+
let Topbar: typeof import('../src/topbar').Topbar;
|
|
20
|
+
beforeAll(async () => {
|
|
21
|
+
Topbar = (await import('../src/topbar')).Topbar;
|
|
22
|
+
});
|
|
17
23
|
|
|
18
24
|
const flowResult = {
|
|
19
25
|
name: 'User flow',
|
|
@@ -41,12 +47,7 @@ beforeEach(() => {
|
|
|
41
47
|
);
|
|
42
48
|
});
|
|
43
49
|
|
|
44
|
-
afterEach(() => {
|
|
45
|
-
saveHtml.saveFile = defaultSaveFile;
|
|
46
|
-
});
|
|
47
|
-
|
|
48
50
|
it('save button opens save dialog for HTML file', async () => {
|
|
49
|
-
saveHtml.saveFile = mockSaveFile;
|
|
50
51
|
options = {getReportHtml: () => '<html></html>'};
|
|
51
52
|
const root = render(<Topbar onMenuClick={() => {}}/>, {wrapper});
|
|
52
53
|
|
package/jest.config.js
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
module.exports = {
|
|
9
|
+
env: {
|
|
10
|
+
browser: true,
|
|
11
|
+
},
|
|
8
12
|
rules: {
|
|
9
13
|
// TODO(esmodules): move to root eslint when all code is ESM
|
|
10
14
|
// or when this is resolved: https://github.com/import-js/eslint-plugin-import/issues/2214
|
|
@@ -22,7 +26,4 @@ module.exports = {
|
|
|
22
26
|
'import/group-exports': 2,
|
|
23
27
|
'import/exports-last': 2,
|
|
24
28
|
},
|
|
25
|
-
parserOptions: {
|
|
26
|
-
sourceType: 'module',
|
|
27
|
-
},
|
|
28
29
|
};
|
package/lighthouse-cli/bin.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @fileoverview The relationship between these CLI modules:
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/* eslint-disable max-len */
|
|
8
9
|
|
|
@@ -123,10 +124,10 @@ function getFlags(manualArgv, options = {}) {
|
|
|
123
124
|
type: 'boolean',
|
|
124
125
|
describe: 'Pause after page load to wait for permission to continue the run, evaluate `continueLighthouseRun` in the console to continue.',
|
|
125
126
|
},
|
|
126
|
-
'
|
|
127
|
+
'fraggle-rock': {
|
|
127
128
|
type: 'boolean',
|
|
128
129
|
default: false,
|
|
129
|
-
describe: '[
|
|
130
|
+
describe: '[EXPERIMENTAL] Use the new Fraggle Rock navigation runner to gather results.',
|
|
130
131
|
},
|
|
131
132
|
'additional-trace-categories': {
|
|
132
133
|
type: 'string',
|
|
@@ -177,7 +178,7 @@ function getFlags(manualArgv, options = {}) {
|
|
|
177
178
|
},
|
|
178
179
|
'enable-error-reporting': {
|
|
179
180
|
type: 'boolean',
|
|
180
|
-
describe: 'Enables error reporting, overriding any saved preference. --no-enable-error-reporting will do the opposite. More: https://
|
|
181
|
+
describe: 'Enables error reporting, overriding any saved preference. --no-enable-error-reporting will do the opposite. More: https://git.io/vFFTO',
|
|
181
182
|
},
|
|
182
183
|
'gather-mode': {
|
|
183
184
|
alias: 'G',
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
export {listAudits} from './list-audits.js';
|
|
8
9
|
export {listTraceCategories} from './list-trace-categories.js';
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
import lighthouse from '../../lighthouse-core/index.js';
|
|
8
9
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
import locales from '../../shared/localization/locales.js';
|
|
8
9
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
import lighthouse from '../../lighthouse-core/index.js';
|
|
8
9
|
|
package/lighthouse-cli/index.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* 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
|
|
5
5
|
* 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.
|
|
6
6
|
*/
|
|
7
|
+
'use strict';
|
|
7
8
|
|
|
8
9
|
import {begin} from './bin.js';
|
|
9
10
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
import fs from 'fs';
|
|
8
9
|
|
package/lighthouse-cli/run.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/* eslint-disable no-console */
|
|
8
9
|
|
|
@@ -193,6 +194,27 @@ async function potentiallyKillChrome(launchedChrome) {
|
|
|
193
194
|
});
|
|
194
195
|
}
|
|
195
196
|
|
|
197
|
+
/**
|
|
198
|
+
* @param {string} url
|
|
199
|
+
* @param {LH.CliFlags} flags
|
|
200
|
+
* @param {LH.Config.Json|undefined} config
|
|
201
|
+
* @param {ChromeLauncher.LaunchedChrome} launchedChrome
|
|
202
|
+
* @return {Promise<LH.RunnerResult|undefined>}
|
|
203
|
+
*/
|
|
204
|
+
async function runLighthouseWithFraggleRock(url, flags, config, launchedChrome) {
|
|
205
|
+
const fraggleRock = (await import('../lighthouse-core/fraggle-rock/api.js')).default;
|
|
206
|
+
const puppeteer = (await import('puppeteer')).default;
|
|
207
|
+
const browser = await puppeteer.connect({browserURL: `http://localhost:${launchedChrome.port}`});
|
|
208
|
+
const page = await browser.newPage();
|
|
209
|
+
flags.channel = 'fraggle-rock-cli';
|
|
210
|
+
const configContext = {
|
|
211
|
+
configPath: flags.configPath,
|
|
212
|
+
settingsOverrides: flags,
|
|
213
|
+
logLevel: flags.logLevel,
|
|
214
|
+
};
|
|
215
|
+
return fraggleRock.navigation(url, {page, config, configContext});
|
|
216
|
+
}
|
|
217
|
+
|
|
196
218
|
/**
|
|
197
219
|
* @param {string} url
|
|
198
220
|
* @param {LH.CliFlags} flags
|
|
@@ -225,15 +247,8 @@ async function runLighthouse(url, flags, config) {
|
|
|
225
247
|
flags.port = launchedChrome.port;
|
|
226
248
|
}
|
|
227
249
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
flags.channel = 'legacy-navigation-cli';
|
|
231
|
-
} else {
|
|
232
|
-
flags.channel = 'cli';
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const runnerResult = flags.legacyNavigation ?
|
|
236
|
-
await lighthouse.legacyNavigation(url, flags, config) :
|
|
250
|
+
const runnerResult = flags.fraggleRock && launchedChrome ?
|
|
251
|
+
await runLighthouseWithFraggleRock(url, flags, config, launchedChrome) :
|
|
237
252
|
await lighthouse(url, flags, config);
|
|
238
253
|
|
|
239
254
|
// If in gatherMode only, there will be no runnerResult.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
import Configstore from 'configstore';
|
|
8
9
|
import Confirm from 'enquirer';
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
import a11y from './test-definitions/a11y.js';
|
|
8
9
|
import byteEfficiency from './test-definitions/byte-efficiency.js';
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* COMPAT: update from the old TestDefn format (array of `expectations` per
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @fileoverview Smoke test runner.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @fileoverview A smokehouse frontend for running within a node process.
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* 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
|
|
5
5
|
* 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.
|
|
6
6
|
*/
|
|
7
|
+
'use strict';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @fileoverview A smokehouse frontend for running from the command line. Parse
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* An extension of Error that includes any stdout or stderr from a child
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* A class that maintains a concurrency pool to coordinate many jobs that should
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* A simple buffered log to use in place of `console`.
|
|
@@ -3,98 +3,59 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @fileoverview A runner that launches Chrome and executes Lighthouse via a
|
|
9
10
|
* bundle to test that bundling has produced correct and runnable code.
|
|
10
11
|
* Currently uses `lighthouse-dt-bundle.js`.
|
|
11
|
-
* Runs in a worker to avoid messing up marky's global state.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import fs from 'fs';
|
|
15
|
-
import os from 'os';
|
|
16
|
-
import {Worker, isMainThread, parentPort, workerData} from 'worker_threads';
|
|
17
|
-
import {once} from 'events';
|
|
18
15
|
|
|
19
|
-
import puppeteer from 'puppeteer-core';
|
|
20
16
|
import ChromeLauncher from 'chrome-launcher';
|
|
21
17
|
|
|
22
18
|
import ChromeProtocol from '../../../../lighthouse-core/gather/connections/cri.js';
|
|
23
19
|
import {LH_ROOT} from '../../../../root.js';
|
|
24
|
-
import {loadArtifacts, saveArtifacts} from '../../../../lighthouse-core/lib/asset-saver.js';
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const result = await runBundledLighthouse(url, configJson, testRunnerOptions);
|
|
32
|
-
// Save to assets directory because LighthouseError won't survive postMessage.
|
|
33
|
-
const assetsDir = fs.mkdtempSync(os.tmpdir() + '/smoke-bundle-assets-');
|
|
34
|
-
await saveArtifacts(result.artifacts, assetsDir);
|
|
35
|
-
const value = {
|
|
36
|
-
lhr: result.lhr,
|
|
37
|
-
assetsDir,
|
|
38
|
-
};
|
|
39
|
-
parentPort?.postMessage({type: 'result', value});
|
|
40
|
-
} catch (err) {
|
|
41
|
-
console.error(err);
|
|
42
|
-
parentPort?.postMessage({type: 'error', value: err});
|
|
43
|
-
}
|
|
44
|
-
})();
|
|
21
|
+
const originalRequire = global.require;
|
|
22
|
+
if (typeof globalThis === 'undefined') {
|
|
23
|
+
// @ts-expect-error - exposing for loading of dt-bundle.
|
|
24
|
+
global.globalThis = global;
|
|
45
25
|
}
|
|
46
26
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* @param {LH.Config.Json|undefined} configJson
|
|
50
|
-
* @param {{isDebug?: boolean, useFraggleRock?: boolean}} testRunnerOptions
|
|
51
|
-
* @return {Promise<{lhr: LH.Result, artifacts: LH.Artifacts}>}
|
|
52
|
-
*/
|
|
53
|
-
async function runBundledLighthouse(url, configJson, testRunnerOptions) {
|
|
54
|
-
if (isMainThread || !parentPort) {
|
|
55
|
-
throw new Error('must be called in worker');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const originalBuffer = global.Buffer;
|
|
59
|
-
const originalRequire = global.require;
|
|
60
|
-
if (typeof globalThis === 'undefined') {
|
|
61
|
-
// @ts-expect-error - exposing for loading of dt-bundle.
|
|
62
|
-
global.globalThis = global;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Load bundle, which creates a `global.runBundledLighthouse`.
|
|
66
|
-
eval(fs.readFileSync(LH_ROOT + '/dist/lighthouse-dt-bundle.js', 'utf-8'));
|
|
27
|
+
// Load bundle, which creates a `global.runBundledLighthouse`.
|
|
28
|
+
eval(fs.readFileSync(LH_ROOT + '/dist/lighthouse-dt-bundle.js', 'utf-8'));
|
|
67
29
|
|
|
68
|
-
|
|
69
|
-
global.Buffer = originalBuffer;
|
|
30
|
+
global.require = originalRequire;
|
|
70
31
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
32
|
+
/** @type {import('../../../../lighthouse-core/index.js')} */
|
|
33
|
+
// @ts-expect-error - not worth giving test global an actual type.
|
|
34
|
+
const lighthouse = global.runBundledLighthouse;
|
|
74
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Launch Chrome and do a full Lighthouse run via the Lighthouse CLI.
|
|
38
|
+
* @param {string} url
|
|
39
|
+
* @param {LH.Config.Json=} configJson
|
|
40
|
+
* @param {{isDebug?: boolean}=} testRunnerOptions
|
|
41
|
+
* @return {Promise<{lhr: LH.Result, artifacts: LH.Artifacts, log: string}>}
|
|
42
|
+
*/
|
|
43
|
+
async function runLighthouse(url, configJson, testRunnerOptions = {}) {
|
|
75
44
|
// Launch and connect to Chrome.
|
|
76
45
|
const launchedChrome = await ChromeLauncher.launch();
|
|
77
46
|
const port = launchedChrome.port;
|
|
47
|
+
const connection = new ChromeProtocol(port);
|
|
78
48
|
|
|
79
|
-
// Run Lighthouse.
|
|
80
49
|
try {
|
|
50
|
+
// Run Lighthouse.
|
|
81
51
|
const logLevel = testRunnerOptions.isDebug ? 'info' : undefined;
|
|
82
|
-
|
|
83
|
-
if (testRunnerOptions.useFraggleRock) {
|
|
84
|
-
// Puppeteer is not included in the bundle, we must create the page here.
|
|
85
|
-
const browser = await puppeteer.connect({browserURL: `http://localhost:${port}`});
|
|
86
|
-
const page = await browser.newPage();
|
|
87
|
-
runnerResult = await lighthouse(url, {port, logLevel}, configJson, page);
|
|
88
|
-
} else {
|
|
89
|
-
const connection = new ChromeProtocol(port);
|
|
90
|
-
runnerResult =
|
|
91
|
-
await lighthouse.legacyNavigation(url, {port, logLevel}, configJson, connection);
|
|
92
|
-
}
|
|
52
|
+
const runnerResult = await lighthouse(url, {port, logLevel}, configJson, connection);
|
|
93
53
|
if (!runnerResult) throw new Error('No runnerResult');
|
|
94
54
|
|
|
95
55
|
return {
|
|
96
56
|
lhr: runnerResult.lhr,
|
|
97
57
|
artifacts: runnerResult.artifacts,
|
|
58
|
+
log: '', // TODO: if want to run in parallel, need to capture lighthouse-logger output.
|
|
98
59
|
};
|
|
99
60
|
} finally {
|
|
100
61
|
// Clean up and return results.
|
|
@@ -102,53 +63,6 @@ async function runBundledLighthouse(url, configJson, testRunnerOptions) {
|
|
|
102
63
|
}
|
|
103
64
|
}
|
|
104
65
|
|
|
105
|
-
/**
|
|
106
|
-
* Launch Chrome and do a full Lighthouse run via the Lighthouse DevTools bundle.
|
|
107
|
-
* @param {string} url
|
|
108
|
-
* @param {LH.Config.Json=} configJson
|
|
109
|
-
* @param {{isDebug?: boolean, useFraggleRock?: boolean}=} testRunnerOptions
|
|
110
|
-
* @return {Promise<{lhr: LH.Result, artifacts: LH.Artifacts, log: string}>}
|
|
111
|
-
*/
|
|
112
|
-
async function runLighthouse(url, configJson, testRunnerOptions = {}) {
|
|
113
|
-
/** @type {string[]} */
|
|
114
|
-
const logs = [];
|
|
115
|
-
const worker = new Worker(new URL(import.meta.url), {
|
|
116
|
-
stdout: true,
|
|
117
|
-
stderr: true,
|
|
118
|
-
workerData: {url, configJson, testRunnerOptions},
|
|
119
|
-
});
|
|
120
|
-
worker.stdout.setEncoding('utf8');
|
|
121
|
-
worker.stderr.setEncoding('utf8');
|
|
122
|
-
worker.stdout.addListener('data', (data) => {
|
|
123
|
-
process.stdout.write(data);
|
|
124
|
-
logs.push(`STDOUT: ${data}`);
|
|
125
|
-
});
|
|
126
|
-
worker.stderr.addListener('data', (data) => {
|
|
127
|
-
process.stderr.write(data);
|
|
128
|
-
logs.push(`STDERR: ${data}`);
|
|
129
|
-
});
|
|
130
|
-
const [workerResponse] = await once(worker, 'message');
|
|
131
|
-
const log = logs.join('') + '\n';
|
|
132
|
-
|
|
133
|
-
if (workerResponse.type === 'error') {
|
|
134
|
-
new Error(`Worker returned an error: ${workerResponse.value}\nLog:\n${log}`);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const result = workerResponse.value;
|
|
138
|
-
if (!result.lhr || !result.assetsDir) {
|
|
139
|
-
throw new Error(`invalid response from worker:\n${JSON.stringify(result, null, 2)}`);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const artifacts = loadArtifacts(result.assetsDir);
|
|
143
|
-
fs.rmSync(result.assetsDir, {recursive: true});
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
lhr: result.lhr,
|
|
147
|
-
artifacts,
|
|
148
|
-
log,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
|
|
152
66
|
export {
|
|
153
67
|
runLighthouse,
|
|
154
68
|
};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* 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
|
|
4
4
|
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
5
5
|
*/
|
|
6
|
+
'use strict';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @fileoverview A runner that executes Lighthouse via the Lighthouse CLI to
|
|
@@ -77,14 +78,14 @@ async function internalRun(url, tmpPath, configJson, options) {
|
|
|
77
78
|
'--output=json',
|
|
78
79
|
`-G=${artifactsDirectory}`,
|
|
79
80
|
`-A=${artifactsDirectory}`,
|
|
81
|
+
'--quiet',
|
|
80
82
|
'--port=0',
|
|
81
83
|
'--quiet',
|
|
82
84
|
];
|
|
83
85
|
|
|
84
86
|
if (useFraggleRock) {
|
|
87
|
+
args.push('--fraggle-rock');
|
|
85
88
|
configJson = convertToFraggleRockConfig(configJson);
|
|
86
|
-
} else {
|
|
87
|
-
args.push('--legacy-navigation');
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
// Config can be optionally provided.
|