Merging this separately so the commit with the tooling change is readable. This is a follow-on to #1167 which turned prettier on.
53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
'use strict'
|
|
|
|
const stream = require('stream')
|
|
const log = require('./log')
|
|
const svg2img = require('./svg-to-img')
|
|
|
|
function streamFromString(str) {
|
|
const newStream = new stream.Readable()
|
|
newStream._read = () => {
|
|
newStream.push(str)
|
|
newStream.push(null)
|
|
}
|
|
return newStream
|
|
}
|
|
|
|
function makeSend(format, askres, end) {
|
|
if (format === 'svg') {
|
|
return res => sendSVG(res, askres, end)
|
|
} else if (format === 'json') {
|
|
return res => sendJSON(res, askres, end)
|
|
} else {
|
|
return res => sendOther(format, res, askres, end)
|
|
}
|
|
}
|
|
|
|
function sendSVG(res, askres, end) {
|
|
askres.setHeader('Content-Type', 'image/svg+xml;charset=utf-8')
|
|
end(null, { template: streamFromString(res) })
|
|
}
|
|
|
|
function sendOther(format, res, askres, end) {
|
|
askres.setHeader('Content-Type', 'image/' + format)
|
|
svg2img(res, format)
|
|
.then(data => {
|
|
end(null, { template: streamFromString(data) })
|
|
})
|
|
.catch(err => {
|
|
// This emits status code 200, though 500 would be preferable.
|
|
log.error('svg2img error', err)
|
|
end(null, { template: '500.html' })
|
|
})
|
|
}
|
|
|
|
function sendJSON(res, askres, end) {
|
|
askres.setHeader('Content-Type', 'application/json')
|
|
askres.setHeader('Access-Control-Allow-Origin', '*')
|
|
end(null, { template: streamFromString(res) })
|
|
}
|
|
|
|
module.exports = {
|
|
makeSend,
|
|
}
|