mkdocs.js (88 lines of code) (raw):
import React from 'react'
import ReactDOM from 'react-dom/server'
import rules from './src/rules'
import fs from 'fs'
import path from 'path'
import URL from 'url'
const host = function (url) {
return URL.parse(url).host.replace(/^www\./, '')
}
const renderOptions = function (options) {
if ( options.length === 0 ) {
return '*This rule takes no options*'
} else {
return [
'This rule takes the following options:'
, ...options.map(function (opt, i) {
return [
` ${i + 1}. ${opt.description} (**${opt.type || "any"}**)`
, ` default: \`${JSON.stringify(opt.def)}\``
].join('\n')
})
].join('\n')
}
}
const renderExamples = function (examples, result) {
return [
'```js'
, examples.map(function (example) {
// render custom example options
const opts = example.opts
? `\n// (using options: ${JSON.stringify([ "warn", ...example.opts ])})`
: ``
// render description
return `// ${result} when ${example.when}${opts}\n`
+ ReactDOM.renderToStaticMarkup(example.render(React))
}).join('\n\n')
, '```'
].join('\n')
}
const renderURLS = function (defn) {
return defn.map(function (def) {
let res = ''
if ( def.url ) {
res += ` - [This document](${def.url}) from ${host(def.url)}`
}
if ( def.AX ) {
res += ` - Google Audit defs [${def.AX}](https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-defs#${def.AX.toLowerCase()})`
}
return res
}).join('\n')
}
Object.keys(rules).forEach(function (rule) {
const {
'default': defn
, pass = []
, fail = []
, description
, options = []
} = require('./src/rules/' + rule)
if ( !description ) {
console.warn(`no description for rule \`${rule}\``)
}
if ( pass.length === 0 ) {
console.warn(`no passing test cases for rule \`${rule}\``)
}
if ( fail.length === 0 ) {
console.warn(`no failing test cases for rule \`${rule}\``)
}
const res =
`# ${rule}
${description || "*no description*"}
## options
${renderOptions(options)}
## Passes
${renderExamples(pass, "passes")}
## Fails
${renderExamples(fail, "fails")}
## See also
${renderURLS(defn)}
`
const file = path.resolve('.', 'docs', 'rules', `${rule}.md`)
fs.writeFile(file, res, function (err) {
if ( err ) {
console.log(err)
process.exit(1)
} else {
console.log(`written ${file}`)
}
})
})