Skip to content

Commit

Permalink
core: add type checking to audit and gatherer base classes
Browse files Browse the repository at this point in the history
  • Loading branch information
brendankenny committed Mar 14, 2018
1 parent ce8ed56 commit c5b629c
Show file tree
Hide file tree
Showing 4 changed files with 210 additions and 159 deletions.
68 changes: 51 additions & 17 deletions lighthouse-core/audits/audit.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
* 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
* 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.
*/
// @ts-nocheck
'use strict';

const statistics = require('../lib/statistics');
Expand All @@ -19,14 +18,14 @@ const clampTo2Decimals = val => Math.round(val * 100) / 100;

class Audit {
/**
* @return {!string}
* @return {string}
*/
static get DEFAULT_PASS() {
return DEFAULT_PASS;
}

/**
* @return {{NUMERIC: string, BINARY: string}}
* @return {Audit.ScoringModes}
*/
static get SCORING_MODES() {
return {
Expand All @@ -36,14 +35,14 @@ class Audit {
}

/**
* @throws {Error}
* @return {Audit.Meta}
*/
static get meta() {
throw new Error('Audit meta information must be overridden.');
}

/**
* Computes a clamped score between 0 and 100 based on the measured value. Score is determined by
* Computes a clamped score between 0 and 1 based on the measured value. Score is determined by
* considering a log-normal distribution governed by the two control points, point of diminishing
* returns and the median value, and returning the percentage of sites that have higher value.
*
Expand All @@ -65,9 +64,9 @@ class Audit {
}

/**
* @param {!Audit} audit
* @param {typeof Audit} audit
* @param {string} debugString
* @return {!AuditFullResult}
* @return {LH.AuditFullResult}
*/
static generateErrorAuditResult(audit, debugString) {
return Audit.generateAuditResult(audit, {
Expand All @@ -78,10 +77,10 @@ class Audit {
}

/**
* @param {!Audit.Headings} headings
* @param {!Array<!Object<string, string>>} results
* @param {!DetailsRenderer.DetailsSummary} summary
* @return {!DetailsRenderer.DetailsJSON}
* @param {Audit.Headings} headings
* @param {Array<Object<string, string>>} results
* @param {Audit.DetailsRenderer.DetailsSummary} summary
* @return {Audit.DetailsRenderer.DetailsJSON}
*/
static makeTableDetails(headings, results, summary) {
if (results.length === 0) {
Expand All @@ -102,9 +101,9 @@ class Audit {
}

/**
* @param {!Audit} audit
* @param {!AuditResult} result
* @return {{score: number, scoreDisplayMode: string}}
* @param {typeof Audit} audit
* @param {LH.AuditResult} result
* @return {{score: number, scoreDisplayMode: Audit.ScoringModeValues}}
*/
static _normalizeAuditScore(audit, result) {
// Cast true/false to 1/0
Expand All @@ -125,9 +124,9 @@ class Audit {
}

/**
* @param {!Audit} audit
* @param {!AuditResult} result
* @return {!AuditFullResult}
* @param {typeof Audit} audit
* @param {LH.AuditResult} result
* @return {LH.AuditFullResult}
*/
static generateAuditResult(audit, result) {
if (typeof result.rawValue === 'undefined') {
Expand Down Expand Up @@ -175,6 +174,28 @@ class Audit {

module.exports = Audit;

/**
* @typedef {Object} Audit.ScoringModes
* @property {'numeric'} NUMERIC
* @property {'binary'} BINARY
*/

/**
* @typedef {Audit.ScoringModes[keyof Audit.ScoringModes]} Audit.ScoringModeValues
*/

/**
* @typedef {Object} Audit.Meta
* @property {string} name
* @property {string} description
* @property {string} helpText
* @property {Array<string>} requiredArtifacts
* @property {string=} failureDescription
* @property {boolean=} informative
* @property {boolean=} manual
* @property {Audit.ScoringModeValues=} scoreDisplayMode
*/

/**
* @typedef {Object} Audit.Heading
* @property {string} key
Expand All @@ -193,3 +214,16 @@ module.exports = Audit;
* @property {boolean} passes
* @property {string=} debugString
*/

// TODO: placeholder typedefs until Details are typed
/**
* @typedef {void} Audit.DetailsRenderer.DetailsSummary
*/

/**
* @typedef {object} Audit.DetailsRenderer.DetailsJSON
* @property {'table'} type
* @property {Array<Audit.Heading>} headings
* @property {Array<Object<string, string>>} items
* @property {void} summary
*/
28 changes: 21 additions & 7 deletions lighthouse-core/gather/gatherers/gatherer.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,42 @@ class Gatherer {

/**
* Called before navigation to target url.
* @param {!Object} options
* @param {Gatherer.PassContext} passContext
* @return {*|!Promise<*>}
*/
beforePass(options) { }
beforePass(passContext) { }

/**
* Called after target page is loaded. If a trace is enabled for this pass,
* the trace is still being recorded.
* @param {!Object} options
* @param {Gatherer.PassContext} passContext
* @return {*|!Promise<*>}
*/
pass(options) { }
pass(passContext) { }

/**
* Called after target page is loaded, all gatherer `pass` methods have been
* executed, and — if generated in this pass — the trace is ended. The trace
* and record of network activity are provided in `loadData`.
* @param {!Object} options
* @param {{networkRecords: !Array, trace: {traceEvents: !Array}}} loadData
* @param {Gatherer.PassContext} passContext
* @param {Gatherer.LoadData} loadData
* @return {*|!Promise<*>}
*/
afterPass(options, loadData) { }
afterPass(passContext, loadData) { }

/* eslint-enable no-unused-vars */
}

/**
* @typedef {Object} Gatherer.PassContext
* @property {object} options
*/

/**
* @typedef {Object} Gatherer.LoadData
* @property {Array<LH.NetworkRequest>} networkRecords
* @property {string} devtoolsLog
* @property {{traceEvents: Array<LH.TraceEvent>}} trace
*/

module.exports = Gatherer;
1 change: 1 addition & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"lighthouse-cli/**/*.js",
"lighthouse-core/lib/dependency-graph/**/*.js",
"lighthouse-core/gather/connections/**/*.js",
"lighthouse-core/gather/gatherers/gatherer.js",
"./typings/externs.d.ts"
],
"exclude": [
Expand Down
Loading

0 comments on commit c5b629c

Please sign in to comment.