lib/Audits.js
const util = require('util')
const { assert, helper } = require('./helper')
/**
* Audits domain allows investigation of page violations and possible improvements. EXPERIMENTAL
* @see https://chromedevtools.github.io/devtools-protocol/tot/Audits
* @since chrome-remote-interface-extra
*/
class Audits {
/**
* @param {Chrome|CRIConnection|CDPSession|Object} client
*/
constructor (client) {
/**
* @type {Chrome|CRIConnection|CDPSession|Object}
* @private
*/
this._client = client
/**
* @type {Set<string>}
*/
this._allowedEncodings = new Set(['webp', 'jpeg', 'png'])
}
/**
* Returns the response body and size if it were re-encoded with the specified settings.
* Only applies to images
* @param {GetEncodedResponseArgs} opts
* @return {Promise<GetEncodedResponseResults>}
* @see https://chromedevtools.github.io/devtools-protocol/tot/Audits#method-getEncodedResponse
*/
getEncodedResponse ({ requestId, encoding, quality, sizeOnly }) {
assert(
helper.isString(requestId),
`The requestId param is required and should be a string, received ${typeof requestId}`
)
assert(
helper.isString(encoding),
`The encoding param is required and should be a string, received ${typeof requestId}`
)
assert(
this._allowedEncodings.has(encoding),
`The encoding param should be one of 'webp', 'jpeg', 'png', received ${encoding}`
)
if (quality != null) {
helper.assertNumberWithin(quality, 0, 1, 'quality')
}
if (sizeOnly != null) {
assert(helper.isBoolean(sizeOnly), `The optional sizeOnly param should be a boolean, received ${typeof sizeOnly}`)
}
return this._client.send(
'Audits.getEncodedResponse',
Object.assign(
{ quality: 1, sizOnly: false },
{ requestId, encoding, quality, sizeOnly }
)
)
}
/** @ignore */
// eslint-disable-next-line space-before-function-paren
[util.inspect.custom](depth, options) {
return options.stylize('[Audits]', 'special')
}
}
/**
* @type {Audits}
*/
module.exports = Audits
/**
* @typedef {Object} GetEncodedResponseArgs
* @property {string} requestId - Identifier of the network request to get content for
* @property {string} encoding - The encoding to use. Allowed values: webp, jpeg, png
* @property {number} [quality] - The quality of the encoding (0-1). (defaults to 1)
* @property {boolean} [sizeOnly] - Whether to only return the size information (defaults to false)
*/
/**
* @typedef {Object} GetEncodedResponseResults
* @property {string} [body] - The encoded body as a base64 string. Omitted if sizeOnly is true.
* @property {number} originalSize - Size before re-encoding
* @property {number} encodedSize - Size after re-encoding
*/