UNPKG

metatags

Version:

Ensure your HTML is previewed beautifully across social networks

61 lines (51 loc) 2.06 kB
'use strict' const spinner = require('ora')({ text: '', color: 'gray' }) const indentString = require('indent-string') const cliTruncate = require('cli-truncate') const terminalSize = require('term-size') const httpStatus = require('http-status') const logSymbols = require('log-symbols') const prettyMs = require('pretty-ms') const { EOL } = require('os') const color = require('../color') const { pink, gray } = color const { columns } = terminalSize() const truncateText = text => (text.length + 50 < columns ? text : cliTruncate(text, columns - 50)) const renderProgress = ({ fetchingUrl, count, total, startTimestamp }) => { const timestamp = pink(prettyMs(Date.now() - startTimestamp)) const spinnerFrame = spinner.frame() const url = gray(fetchingUrl) const progress = total ? gray(`${count} of ${total}`) : '' return `${EOL}${timestamp} ${spinnerFrame}${progress} ${url}${EOL}` } const renderResume = state => { return Object.keys(state.data).reduce((acc, url) => { const allRules = state.data[url] const statusCode = state.status[url] const humanStatusCode = gray(`${statusCode} ${httpStatus[statusCode]}`) let str = `${url} ${humanStatusCode} ${EOL}` Object.keys(allRules).forEach(ruleName => { const rules = allRules[ruleName] str += `${EOL}${indentString(`${ruleName}`, 2)}${EOL}` rules.forEach(rule => { const colorize = color[rule.status] const value = truncateText(rule.value) const info = rule.message ? `${EOL}${indentString(`- ${rule.message}`, 2)}` : '' str += indentString( `${colorize(logSymbols[rule.status])} ${colorize(rule.selector)} ${gray( `(${rule.value.length})` )} ${gray(value)} ${colorize(info)}`, 4 ) str += EOL }) }) return `${acc}${EOL}${str}` }, '') } module.exports = state => { const { quiet, end } = state if (quiet) return end ? renderResume(state) : '' return end ? renderResume(state) : renderProgress(state) } module.exports.resume = renderResume