Merge pull request #662 from jroxendal/generate-error-report

[Feature] generate error report
This commit is contained in:
Sébastien Chopin 2017-05-05 11:57:04 +02:00 committed by GitHub
commit 71c9838008

View File

@ -41,6 +41,7 @@ const defaults = {
export default function () {
const s = Date.now()
let errors = []
/*
** Set variables
*/
@ -97,14 +98,29 @@ export default function () {
yield routes.splice(0, 500).map((route) => {
return co(function * () {
yield waitFor(n++ * self.options.generate.interval)
var { html } = yield self.renderRoute(route, { _generate: true })
html = minify(html, self.options.generate.minify)
try {
var { html, error } = yield self.renderRoute(route, { _generate: true })
if(error) {
errors.push({type : "handled", route, error})
}
} catch(err) {
errors.push({type : "unhandled", route, error : err})
return
}
try {
var minifiedHtml = minify(html, self.options.generate.minify)
} catch(err) {
let minifyErr = new Error(`HTML minification failed. Make sure the route generates valid HTML. Failed HTML:\n ${html}`)
errors.push({type : "unhandled", route, error : minifyErr})
return
}
var path = join(route, sep, 'index.html') // /about -> /about/index.html
debug('Generate file: ' + path)
path = join(distPath, path)
// Make sure the sub folders are created
yield mkdirp(dirname(path))
yield writeFile(path, html, 'utf8')
yield writeFile(path, minifiedHtml, 'utf8')
})
})
}
@ -119,6 +135,17 @@ export default function () {
.then(() => {
const duration = Math.round((Date.now() - s) / 100) / 10
debug(`HTML Files generated in ${duration}s`)
if(errors.length) {
console.error("==== Error report ==== \n" + errors.map( ({type, route, error}) => {
if(type == "unhandled") {
return `Route: '${route}'\n${error.stack}`
} else {
return `Route: '${route}' returned an error via context.error: \n` +
JSON.stringify(error)
}
}).join("\n\n"))
}
return this
})
}