import minBy from 'lodash/minBy.js'; import maxBy from 'lodash/maxBy.js'; import last from 'lodash/last.js'; const parseTrip = (ctx, t) => { // t = raw trip const {profile, opt} = ctx; // pretend the trip is a leg in a journey const fakeLeg = { type: 'JNY', dep: Array.isArray(t.stopL) ? minBy(t.stopL, 'idx') || t.stopL[0] : {}, arr: Array.isArray(t.stopL) ? maxBy(t.stopL, 'idx') || last(t.stopL) : {}, jny: t, }; // todo: this breaks if the trip starts on a different day // how does HAFAS do this? const today = () => profile.formatDate(profile, Date.now()); const date = t.date || today(); const trip = profile.parseJourneyLeg(ctx, fakeLeg, date); trip.id = trip.tripId; delete trip.tripId; delete trip.reachable; if (opt.scheduledDays) { const nrOfStopovers = t.stopL.length; // trips seem to use sDaysL[], journeys use sDays const sDaysL = Array.isArray(t.sDaysL) ? t.sDaysL : []; const matchingSDays = sDaysL.filter((sDays) => { return sDays.fLocIdx === 0 && sDays.tLocIdx === nrOfStopovers - 1; }); // if there are >1 sDays, we don't know how to interpret them const sDays = matchingSDays.length === 1 ? matchingSDays[0] : null; // todo [breaking]: rename to scheduledDates trip.scheduledDays = profile.parseScheduledDays(ctx, sDays); } return trip; }; export { parseTrip, };