UNPKG

@tlrg/middleware-js

Version:
95 lines (73 loc) 2.58 kB
var moment = require('moment'); var currency = require('./currency'); var _ = require('lodash'); var mobileOnly = require('./mobileOnly'); function sanitizeDate(incomingStartDate) { var today = moment().startOf('day'); var startDate = moment(incomingStartDate || today, ['YYYYMMDD', 'YYYY-MM-DD']); var oneYearInTheFuture = moment().add(364, 'days'); if (!startDate.isValid()) { return today; } if (startDate.isBefore(today)) { return today; } if (startDate.isAfter(oneYearInTheFuture)) { return today; } return startDate; } module.exports = function (req, res, next) { var lrSearchCookie = {}; try { lrSearchCookie = JSON.parse(req.cookies.search); } catch (_) {} var incomingStartDate = req.query.d || req.cookies.arrivalDate || lrSearchCookie.Date; var nights = parseInt(req.query.n) || parseInt(lrSearchCookie.Nights) || 1; if (nights < 1) { nights = 1; } if (nights > 28) { nights = 28; } var startDate = sanitizeDate(incomingStartDate); var departureDate = req.query.dd || req.cookies.departureDate; if (departureDate) { var departureDateAsMoment = moment(departureDate, ['YYYYMMDD', 'YYYY-MM-DD']); nights = departureDateAsMoment.diff(startDate, 'days'); } var queryRt = req.query.rt; if (Array.isArray(queryRt)) { queryRt = queryRt[0]; } var rt = (queryRt || '').split('-'); var adults = rt[0] || req.query['rt-adult'] || req.cookies.numberOfAdults || lrSearchCookie.Adults || 2; var children = rt[1] || req.query['rt-child'] || req.cookies.numberOfChildren || lrSearchCookie.Children || 0; adults = parseInt(adults, 10) || 2; children = parseInt(children, 10) || 0; if (adults > 8) { adults = 8; } if (children > 3) { children = 3; } var formats = { laterooms: 'YYYYMMDD', asiarooms: 'YYYY-MM-DD' }; req.moonstick.meta = { destination: _.escape(req.query.parsedSearch || req.query.k || lrSearchCookie.Destination || ''), date: startDate, nights: nights, departureDate: startDate.clone().add(nights, 'days').startOf('day'), adults: adults, children: children, guests: adults + children, rt: adults + '-' + children, format: formats[req.moonstick.brand] || 'YYYYMMDD', currency: currency(req), isLoggedIn: Boolean(req.user && req.cookies['moomin-cmid']), mobileOnly: mobileOnly(req) }; next(); };