60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
import _ from 'lodash';
|
|
import manifest from '../rev-manifest';
|
|
|
|
let chunkManifest;
|
|
try {
|
|
chunkManifest = require('../manifests/chunk-manifest.json');
|
|
} catch (err) {
|
|
chunkManifest = {};
|
|
}
|
|
|
|
chunkManifest = Object.keys(chunkManifest).reduce((manifest, key) => {
|
|
manifest[key] = '/' + chunkManifest[key];
|
|
return manifest;
|
|
}, {});
|
|
|
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
const challengesRegex = /^(bonfire|waypoint|zipline|basejump|checkpoint):\s/i;
|
|
|
|
function rev(scopedPrepend, asset) {
|
|
if (isDev) {
|
|
// do not use revision in dev mode
|
|
return `${scopedPrepend}/${asset}`;
|
|
}
|
|
return `${scopedPrepend}/${ manifest[asset] || asset }`;
|
|
}
|
|
|
|
function removeOldTerms(str = '') {
|
|
return str.replace(challengesRegex, '');
|
|
}
|
|
|
|
const cacheBreaker = isDev ?
|
|
// add cacheBreaker in dev instead of rev manifest
|
|
asset => `${asset}?cacheBreaker=${Math.random()}` :
|
|
_.identity;
|
|
|
|
export default function jadeHelpers() {
|
|
return function jadeHelpersMiddleware(req, res, next) {
|
|
Object.assign(
|
|
res.locals,
|
|
{
|
|
removeOldTerms,
|
|
rev,
|
|
cacheBreaker,
|
|
// static data
|
|
user: req.user,
|
|
chunkManifest,
|
|
_csrf: req.csrfToken ? req.csrfToken() : null,
|
|
theme: req.user &&
|
|
req.user.theme ||
|
|
req.cookies.theme ||
|
|
'default'
|
|
}
|
|
);
|
|
if (req.csrfToken) {
|
|
res.expose({ token: res.locals._csrf }, 'csrf');
|
|
}
|
|
next();
|
|
};
|
|
}
|