UNPKG

@sector-labs/seo-slip

Version:

Catches SEO regressions by sampling and checking a website against a set of rules

90 lines (83 loc) 3.47 kB
const { newMessage, newEmptyItemResult } = require('../reporting'); module.exports = (dataSizeRules) => { const name = 'dataSizeChecker'; const rules = dataSizeRules || []; const isN = (number) => !isNaN(number); return { analysis: (queueItem, responseBody, response) => { return { url: queueItem.url, path: queueItem.path, contentType: response && response.headers && response.headers['content-type'], dataSize: queueItem.stateData.actualDataSize, uncompressedDataSize: responseBody.length, }; }, report: (analysis) => { return { contentType: analysis.contentType, __dataSize: analysis.dataSize, __uncompressedDataSize: analysis.uncompressedDataSize, }; }, check: (analysis) => { const result = newEmptyItemResult(); const rule = rules.find((rule) => { return ( (!rule.condition.path || (analysis.path || '').includes(rule.condition.path)) && (!rule.condition['content-type'] || (analysis.contentType || '').includes(rule.condition['content-type'])) ); }); if (rule) { if (isN(rule.minDataSize) && rule.minDataSize > analysis.dataSize) { result.passed = false; result.messages.push( newMessage( analysis.url, name, `Expected minDataSize=${rule.minDataSize}, actual=${analysis.dataSize}` ) ); } if (isN(rule.maxDataSize) && rule.maxDataSize < analysis.dataSize) { result.passed = false; result.messages.push( newMessage( analysis.url, name, `Expected maxDataSize=${rule.maxDataSize}, actual=${analysis.dataSize}` ) ); } if ( isN(rule.minUncompressedDataSize) && rule.minUncompressedDataSize > analysis.uncompressedDataSize ) { result.passed = false; result.messages.push( newMessage( analysis.url, name, `Expected minUncompressedDataSize=${rule.minUncompressedDataSize}, actual=${analysis.uncompressedDataSize}` ) ); } if ( isN(rule.maxUncompressedDataSize) && rule.maxUncompressedDataSize < analysis.uncompressedDataSize ) { result.passed = false; result.messages.push( newMessage( analysis.url, name, `Expected maxUncompressedDataSize=${rule.maxUncompressedDataSize}, actual=${analysis.uncompressedDataSize}` ) ); } } return result; }, }; };