unpkg/modules/server/MainController.js

48 lines
1.2 KiB
JavaScript
Raw Normal View History

2017-03-25 00:35:30 +00:00
const React = require('react')
const { renderToStaticMarkup } = require('react-dom/server')
const { getAnalyticsDashboards } = require('./Cloudflare')
const HomePage = require('./components/HomePage')
2016-05-16 22:55:24 +00:00
2016-05-20 18:58:58 +00:00
const OneMinute = 1000 * 60
const ThirtyDays = OneMinute * 60 * 24 * 30
2016-05-16 22:55:24 +00:00
const DOCTYPE = '<!DOCTYPE html>'
2016-05-20 18:58:58 +00:00
const fetchStats = (callback) => {
if (process.env.NODE_ENV === 'development') {
2017-01-25 16:06:16 +00:00
callback(null, require('./CloudflareStats.json'))
2016-05-20 18:58:58 +00:00
} else {
const since = new Date(Date.now() - ThirtyDays)
const until = new Date(Date.now() - OneMinute)
getAnalyticsDashboards([ 'npmcdn.com', 'unpkg.com' ], since, until)
.then(result => callback(null, result), callback)
2016-05-20 18:58:58 +00:00
}
}
2017-03-25 00:35:30 +00:00
const sendHomePage = (req, res, next) => {
2016-07-20 19:26:15 +00:00
const chunks = [ 'vendor', 'home' ]
2016-05-16 22:55:24 +00:00
const props = {
2016-07-20 19:26:15 +00:00
styles: req.bundle.getStyleAssets(chunks),
scripts: req.bundle.getScriptAssets(chunks)
2016-05-16 22:55:24 +00:00
}
2016-07-20 19:26:15 +00:00
if (req.manifest)
props.webpackManifest = req.manifest
2016-05-20 18:58:58 +00:00
fetchStats((error, stats) => {
if (error) {
next(error)
} else {
2016-08-30 00:33:23 +00:00
res.set('Cache-Control', 'public, max-age=60')
2016-05-20 18:58:58 +00:00
res.send(
DOCTYPE + renderToStaticMarkup(<HomePage {...props} stats={stats}/>)
)
}
})
2016-05-16 22:55:24 +00:00
}
2017-03-25 00:35:30 +00:00
module.exports = {
sendHomePage
}