| 
									
										
										
										
											2018-01-18 15:15:52 -08:00
										 |  |  | import _ from 'lodash'; | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  | import manifest from '../rev-manifest'; | 
					
						
							| 
									
										
										
										
											2016-03-14 17:22:56 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  | 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; | 
					
						
							|  |  |  | }, {}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 15:15:52 -08:00
										 |  |  | const isDev = process.env.NODE_ENV !== 'production'; | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  | const challengesRegex = /^(bonfire|waypoint|zipline|basejump|checkpoint):\s/i; | 
					
						
							| 
									
										
										
										
											2016-01-15 06:08:54 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  | function rev(scopedPrepend, asset) { | 
					
						
							| 
									
										
										
										
											2018-01-18 15:15:52 -08:00
										 |  |  |   if (isDev) { | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  |     // do not use revision in dev mode
 | 
					
						
							|  |  |  |     return `${scopedPrepend}/${asset}`; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return `${scopedPrepend}/${ manifest[asset] || asset }`; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function removeOldTerms(str = '') { | 
					
						
							|  |  |  |   return str.replace(challengesRegex, ''); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-01-15 06:08:54 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-18 15:15:52 -08:00
										 |  |  | const cacheBreaker = isDev ? | 
					
						
							|  |  |  |   // add cacheBreaker in dev instead of rev manifest
 | 
					
						
							|  |  |  |   asset => `${asset}?cacheBreaker=${Math.random()}` : | 
					
						
							|  |  |  |   _.identity; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  | export default function jadeHelpers() { | 
					
						
							|  |  |  |   return function jadeHelpersMiddleware(req, res, next) { | 
					
						
							| 
									
										
										
										
											2018-01-18 15:16:43 -08:00
										 |  |  |     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' | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2016-05-31 14:32:26 -07:00
										 |  |  |     if (req.csrfToken) { | 
					
						
							|  |  |  |       res.expose({ token: res.locals._csrf }, 'csrf'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-01-15 06:08:54 -08:00
										 |  |  |     next(); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |