Skip to content

Commit

Permalink
Merge pull request #259 from choojs/fix-SSR-errors
Browse files Browse the repository at this point in the history
log SSR errors, closes #255
  • Loading branch information
s3ththompson committed Oct 3, 2017
2 parents c0a3c9b + fb1a6bc commit 0f96cd2
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 55 deletions.
4 changes: 3 additions & 1 deletion lib/cmd-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ function build (entry, opts) {

compiler.on('error', function (topic, sub, err) {
if (err.pretty) log.error(err.pretty)
else log.error(`${topic}:${sub}`, err)
else {
log.error(`${topic}:${sub} ${err.message}\n${err.stack}`)
}
})

compiler.on('change', function (nodeName, edgeName, nodeState) {
Expand Down
102 changes: 54 additions & 48 deletions lib/graph-document.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ var hyperstream = require('hyperstream')

var serverRender = require('./server-render')
var utils = require('./utils')
var ttyError = require('./tty-error')

var WRITE_CONCURRENCY = 3

Expand All @@ -19,59 +20,64 @@ function node (state, createEdge) {
var entry = utils.basefile(state.metadata.entry)
var self = this

var render = serverRender(entry)
var fonts = extractFonts(state.assets)
var list = render.list

mapLimit(list, WRITE_CONCURRENCY, iterator, function (err) {
if (err) return self.emit(err)
createEdge('list', Buffer.from(list.join(',')))
})

function iterator (route, done) {
var res = render(route) // TODO: allow passing in state as second arg

var description = '' // TODO: extract from manifest
var language = res.language
var title = res.title
var body = res.body

var html = head(body, language)
var d = documentify(entry, html)
d.transform(polyfillTransform)
d.transform(scriptTransform, { hash: state.scripts.bundle.hash })
d.transform(styleTransform, { hash: state.style.bundle.hash })
d.transform(preloadTransform)
d.transform(loadFontsTransform, { fonts: fonts })
d.transform(manifestTransform)
d.transform(viewportTransform)
d.transform(descriptionTransform, { description: description })
d.transform(themeColorTransform, { color: String(state.manifest.color.buffer) })
d.transform(titleTransform, { title: title })
// TODO: twitter
// TODO: facebook
// TODO: apple touch icons
// TODO: favicons
d.transform(criticalTransform, { css: state.style.bundle.buffer })

if (state.metadata.reload) {
d.transform(reloadTransform, { bundle: state.reload.bundle.buffer })
serverRender(entry, function (err, render) {
if (err) {
err = ttyError('documents', entry, err)
return self.emit('error', 'documents', entry, err)
}
var fonts = extractFonts(state.assets)
var list = render.list

var source = d.bundle()

pump(source, concat({ encoding: 'buffer' }, sink), function (err) {
if (err) return done(explain(err, 'Error in documentify while operating on ' + route))
done()
mapLimit(list, WRITE_CONCURRENCY, iterator, function (err) {
if (err) return self.emit(err)
createEdge('list', Buffer.from(list.join(',')))
})

function sink (buf) {
var name = route
if (name === '/') name = 'index'
name = name + '.html'
createEdge(name, buf)
function iterator (route, done) {
var res = render(route) // TODO: allow passing in state as second arg

var description = '' // TODO: extract from manifest
var language = res.language
var title = res.title
var body = res.body

var html = head(body, language)
var d = documentify(entry, html)
d.transform(polyfillTransform)
d.transform(scriptTransform, { hash: state.scripts.bundle.hash })
d.transform(styleTransform, { hash: state.style.bundle.hash })
d.transform(preloadTransform)
d.transform(loadFontsTransform, { fonts: fonts })
d.transform(manifestTransform)
d.transform(viewportTransform)
d.transform(descriptionTransform, { description: description })
d.transform(themeColorTransform, { color: String(state.manifest.color.buffer) })
d.transform(titleTransform, { title: title })
// TODO: twitter
// TODO: facebook
// TODO: apple touch icons
// TODO: favicons
d.transform(criticalTransform, { css: state.style.bundle.buffer })

if (state.metadata.reload) {
d.transform(reloadTransform, { bundle: state.reload.bundle.buffer })
}

var source = d.bundle()

pump(source, concat({ encoding: 'buffer' }, sink), function (err) {
if (err) return done(explain(err, 'Error in documentify while operating on ' + route))
done()
})

function sink (buf) {
var name = route
if (name === '/') name = 'index'
name = name + '.html'
createEdge(name, buf)
}
}
}
})
}

function head (body, lang) {
Expand Down
8 changes: 5 additions & 3 deletions lib/server-render.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ var getAllRoutes = require('wayfarer/get-all-routes')

module.exports = serverRender

function serverRender (entry) {
function serverRender (entry, cb) {
assert.equal(typeof entry, 'string')

var app
Expand All @@ -26,7 +26,9 @@ function serverRender (entry) {

try {
app = proxyquire(entry, {})
} catch (e) {
} catch (err) {
var failedRequire = err.message === `Cannot find module '${entry}'`
if (!failedRequire) return cb(err)
app = null
}

Expand Down Expand Up @@ -64,7 +66,7 @@ function serverRender (entry) {
}
}

return render
cb(null, render)

function render (route, state) {
var res
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"http-gzip-maybe": "^1.0.0",
"hyperstream": "^1.2.2",
"iltorb": "^1.3.6",
"inline-critical-css": "^1.0.6",
"inline-critical-css": "^1.1.0",
"json-stream-to-object": "^1.1.0",
"keypress": "^0.2.1",
"minimist": "^1.2.0",
Expand Down
2 changes: 0 additions & 2 deletions test/document.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ tape('renders some HTML', function (assert) {
<meta name="description" content=>
<meta name="theme-color" content=#fff>
<title></title>
<style></style>
</head>
<body></body>
</html>
Expand Down Expand Up @@ -68,7 +67,6 @@ tape('server render choo apps', function (assert) {
<meta name="description" content=>
<meta name="theme-color" content=#fff>
<title></title>
<style></style>
</head>
<body>
meow
Expand Down

0 comments on commit 0f96cd2

Please sign in to comment.