Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 6 additions & 35 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,11 @@ const getData = require('./get-data')
const createDocument = require('./create-document-from-fragment')

module.exports = async options => {
const pkg = require('../package.json')
const userAgent = `${pkg.name} v ${pkg.version}`
const ignore = options.ignore
const format = ignore ? 'text' : options.format || 'json'
const newOptions = {
uri: 'https://validator.w3.org/nu/',
headers: Object.assign({}, {
'User-Agent': userAgent
}, options.headers),
qs: {
out: format
},
method: 'GET'
}
const { ignore, format } = options
const reportFormat = ignore ? 'text' : format || 'json'
const data = options.url ? await getData(options.url) : options.data
options.data = options.isFragment ? createDocument(data) : data
options.format = reportFormat

if (options.validator) {
newOptions.uri = options.validator
}

if (options.url) {
newOptions.qs.doc = options.url
}

if (options.isLocal) {
options.data = await getData(options.url)
}

if (options.data) {
newOptions.body = options.isFragment ? createDocument(options.data) : options.data
newOptions.method = 'POST'
if (!newOptions.headers['Content-Type']) {
newOptions.headers['Content-Type'] = 'text/html; charset=utf-8'
}
}

return newOptions
return options
}
20 changes: 8 additions & 12 deletions lib/filter-data.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
module.exports = function (data, ignore) {
const list = data.split('\n')
module.exports = function (messages, ignore) {
const filters = Array.isArray(ignore) ? ignore : [ignore]
let errors = false
const results = []
list.forEach(function (line, index) {
if (line.startsWith('Error') && filters.indexOf(line) === -1) {
results.push(line)
results.push(list[index + 1])
errors = true
} else if (line.startsWith('The')) {
results.push(line)
const filtered = messages.filter(item => {
const { ruleId, message } = item
if (filters.includes(ruleId) || filters.includes(message)) {
return false
} else {
return true
}
})
return errors === true ? results.join('\n') : 'The document validates according to the specified schema(s).'
return filtered
}
15 changes: 4 additions & 11 deletions lib/get-data.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
const request = require('request')
const axios = require('axios')

module.exports = url => {
return new Promise((resolve, reject) => {
request(url, function (error, response, body) {
if (error) {
return reject(error)
} else {
return resolve(body)
}
})
})
module.exports = async url => {
const { data } = await axios.get(url)
return data
}
44 changes: 24 additions & 20 deletions lib/validate.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
const request = require('request')
const { HtmlValidate } = require('html-validate')
const config = require('./config')
const filterData = require('./filter-data')

module.exports = async options => {
const requestOptions = await config(options)
const ignore = options.ignore
return new Promise((resolve, reject) => {
request(requestOptions, function (error, response, result) {
if (error) {
return reject(error)
}
const htmlvalidate = new HtmlValidate()
const Options = await config(options)
const { data, ignore } = Options
const report = htmlvalidate.validateString(data)
let { valid, errorCount, warningCount, results } = report
let isValid = valid
const messages = results.length > 0 ? results[0].messages : []
let errors = messages.filter(message => message.severity === 2)
let warnings = messages.filter(message => message.severity === 1)

if (response && response.statusCode !== 200) {
const error = new Error('Validator returned unexpected statuscode: ' + response.statusCode)
return reject(error)
}
if (ignore) {
errors = filterData(errors, ignore)
warnings = filterData(warnings, ignore)
isValid = errors.length === 0
errorCount = errors.length
warningCount = warnings.length
}

let data = options.format === 'json' && !ignore ? JSON.parse(result) : result

if (ignore) {
data = filterData(data, ignore)
}
return resolve(data)
})
})
return {
isValid,
errorCount,
warningCount,
errors,
warnings
}
}
Loading