forked from GoogleChrome/lighthouse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
134 lines (122 loc) · 4.23 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
* @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import Trace from './gather/gatherers/trace.js';
import {Runner} from './runner.js';
import {UserFlow, auditGatherSteps} from './user-flow.js';
import {ReportGenerator} from '../report/generator/report-generator.js';
import {startTimespanGather} from './gather/timespan-runner.js';
import {snapshotGather} from './gather/snapshot-runner.js';
import {navigationGather} from './gather/navigation-runner.js';
import * as LH from '../types/lh.js';
/*
* The relationship between these root modules:
*
* index.js - the require('lighthouse') hook for Node modules (including the CLI)
*
* runner.js - marshalls the actions that must be taken (Gather / Audit)
* config file is used to determine which of these actions are needed
*
* cli \
* -- core/index.js ----> runner.js ----> [Gather / Audit]
* clients /
*/
/**
* Run Lighthouse.
* @param {string=} url The URL to test. Optional if running in auditMode.
* @param {LH.Flags=} flags Optional settings for the Lighthouse run. If present,
* they will override any settings in the config.
* @param {LH.Config=} config Configuration for the Lighthouse run. If
* not present, the default config is used.
* @param {LH.Puppeteer.Page=} page
* @return {Promise<LH.RunnerResult|undefined>}
*/
async function lighthouse(url, flags = {}, config, page) {
return navigation(page, url, {config, flags});
}
/**
* @param {LH.Puppeteer.Page} page
* @param {LH.UserFlow.Options} [options]
*/
async function startFlow(page, options) {
return new UserFlow(page, options);
}
/**
* @param {LH.Puppeteer.Page|undefined} page
* @param {LH.NavigationRequestor|undefined} requestor
* @param {{config?: LH.Config, flags?: LH.Flags}} [options]
* @return {Promise<LH.RunnerResult|undefined>}
*/
async function navigation(page, requestor, options) {
const gatherResult = await navigationGather(page, requestor, options);
return Runner.audit(gatherResult.artifacts, gatherResult.runnerOptions);
}
/**
* @param {LH.Puppeteer.Page} page
* @param {{config?: LH.Config, flags?: LH.Flags}} [options]
* @return {Promise<LH.RunnerResult|undefined>}
*/
async function snapshot(page, options) {
const gatherResult = await snapshotGather(page, options);
return Runner.audit(gatherResult.artifacts, gatherResult.runnerOptions);
}
/**
* @param {LH.Puppeteer.Page} page
* @param {{config?: LH.Config, flags?: LH.Flags}} [options]
* @return {Promise<{endTimespan: () => Promise<LH.RunnerResult|undefined>}>}
*/
async function startTimespan(page, options) {
const {endTimespanGather} = await startTimespanGather(page, options);
const endTimespan = async () => {
const gatherResult = await endTimespanGather();
return Runner.audit(gatherResult.artifacts, gatherResult.runnerOptions);
};
return {endTimespan};
}
/**
* @template {LH.Result|LH.FlowResult} R
* @param {R} result
* @param {[R] extends [LH.Result] ? LH.OutputMode : Exclude<LH.OutputMode, 'csv'>} [format]
* @return {string}
*/
function generateReport(result, format = 'html') {
const reportOutput = ReportGenerator.generateReport(result, format);
if (Array.isArray(reportOutput)) {
// In theory the output should never be an array.
// This is mostly for type checking.
return reportOutput[0];
} else {
return reportOutput;
}
}
/**
* @param {LH.UserFlow.FlowArtifacts} flowArtifacts
* @param {LH.Config} [config]
*/
async function auditFlowArtifacts(flowArtifacts, config) {
const {gatherSteps, name} = flowArtifacts;
return await auditGatherSteps(gatherSteps, {name, config});
}
function getAuditList() {
return Runner.getAuditList();
}
const traceCategories = Trace.getDefaultTraceCategories();
export default lighthouse;
export {Audit} from './audits/audit.js';
export {default as Gatherer} from './gather/base-gatherer.js';
export {NetworkRecords} from './computed/network-records.js';
export {default as defaultConfig} from './config/default-config.js';
export {default as desktopConfig} from './config/desktop-config.js';
export * from '../types/lh.js';
export {
startFlow,
navigation,
startTimespan,
snapshot,
generateReport,
auditFlowArtifacts,
getAuditList,
traceCategories,
};