UNPKG

atriusmaps-node-sdk

Version:

This project provides an API to Atrius Personal Wayfinder maps within a Node environment. See the README.md for more information

2 lines (1 loc) 3.81 kB
import{DateTime as t}from"luxon";import{pick as e,propOr as a,compose as i,path as r,last as l}from"ramda";import{formatTime as n,msToMin as o}from"../../../src/utils/date.js";import{FlightLabelStatus as s}from"../../../utils/constants.js";const u={ARRIVAL:"arr",DEPARTURE:"dep",ALL:"all"};function m(t,e,i,r,l){const{flightId:n,carrierFsCode:o,flightNumber:s,airline:m,flightType:d,departureAirport:g,arrivalAirport:c,airportResources:D,gatePoi:p,status:A}=e,R=E(e),{localTime:I,localOldTime:C}=h(R,r),_=T(d,A,t,I,C),N=d===u.DEPARTURE?"flightDetails:Departs _date_":"flightDetails:Arrives _date_";return{flightId:n,name:`${a("","name",m)} - ${o} ${s}`,status:_,statusText:i(`flightDetails:${L(_)}`),baggageClaim:d===u.ARRIVAL?U(D.arrivalBagClaim,i):void 0,connectionAirport:v(d,g,c,i),time:S(I?.toISO()??null,r,l),oldTime:S(C?.toISO()??null,r,l),date:i(N,{date:O(I?.toISO()??null,r,l)}),dateStamp:I?.toMillis()??0,gate:f(p),gateLabel:i("flightDetails:Gate")}}function d(t,i,r,l,n){const{flightNumber:o,flightType:s,departureAirport:m,arrivalAirport:d,airportResources:g,flightStatusUpdates:c,carrierFsCode:A,gatePoi:R,airline:I,status:C}=i,_=e(["city","iata"]),N=E(i),{localTime:P,localOldTime:$}=h(N,l),M=T(s,C,t,P,$);return{flightType:s,flightTypeLabel:r(`flightDetails:${s===u.DEPARTURE?"Departure":"Arrival"}`),name:`${a("","name",I)} - ${A} ${o}`,status:M,statusText:r(`flightDetails:${L(M)}`),baggageClaim:s===u.ARRIVAL?U(g.arrivalBagClaim,r):void 0,departure:_(m),arrival:_(d),connectionAirport:v(s,m,d,r),flightIn:D(M,s,t,P,r),time:S(P?.toISO()??null,l,n),oldTime:S($?.toISO()??null,l,n),date:O(P?.toISO()??null,l,n),lastUpdated:p(t,c??[],r),flightDuration:"",gateLabel:r("flightDetails:Gate"),gate:f(R),tags:[],flightIconBaseName:s===u.ARRIVAL?"arrivals":"departures"}}const g=(t,e)=>t.dateStamp-e.dateStamp,c=/[A-Z]?\d+[a-zA-Z]?/,f=t=>{if(!t)return{name:"-"};const e=t.name.match(c);return{...t,name:e?e[0]:t.name}},D=(t,e,a,i,r)=>{if(t===s.DEPARTED)return r("flightDetails:Departed");if(t===s.ARRIVED)return r("flightDetails:Arrived");if(t===s.CANCELLED)return null;if(!i)return null;return r(`flightDetails:${e===u.DEPARTURE?"Departs":"Arrives"} in _minutes_ minute`,{count:A(a,i)})},p=(t,e,a)=>{const n=i(r(["updatedAt","dateUtc"]),l)(e),o=_(n);if(!o)return a("flightDetails:Last updated a few minutes ago");const s=A(t,o);return s<10?a("flightDetails:Last updated a few minutes ago"):s<60?a("flightDetails:Last updated _minutes_ minutes ago",{minutes:s}):a("flightDetails:Last updated over an hour ago")},A=(t,e)=>o(Math.abs(t.toMillis()-e.toMillis())),E=({flightType:t,operationalTimes:e,departureDate:a,arrivalDate:i})=>t===u.DEPARTURE?R(a,e.estimatedGateDeparture):R(i,e.estimatedGateArrival),R=(t,e)=>{const a=t.dateLocal||t.dateUtc,i=e?.dateLocal||e?.dateUtc;return i&&a!==i?{time:i,oldTime:a}:{time:a}},h=({time:t,oldTime:e},a)=>({localTime:_(t,a),localOldTime:_(e,a)});function T(t,e,a,i,r){if(!i)return s.UNKNOWN;if(a>i)return I(t);return"C"===e.toUpperCase()?s.CANCELLED:r?i>r?s.DELAYED:s.EARLY:s.ON_TIME}const L=t=>{switch(t){case s.ON_TIME:return"on-time";case s.EARLY:return"early";case s.DELAYED:return"delayed";case s.CANCELLED:return"cancelled";case s.DEPARTED:return"departed";case s.ARRIVED:return"arrived";default:return"unknown"}},I=t=>t===u.DEPARTURE?s.DEPARTED:s.ARRIVED,v=(t,e,a,i)=>t===u.DEPARTURE?i(C("To"),a??{}):i(C("From"),e??{}),C=t=>`flightDetails:${t} _city_ (_iata_)`,U=(t,e)=>t?e("flightDetails:Collect luggage from Baggage Claim _claimNum_",{claimNum:t}):null,_=(e,a)=>e?t.fromISO(e,{zone:a}):null,O=(e,a,i="en-US")=>e?t.fromISO(e,{zone:a}).setLocale(i).toFormat("EEE, d MMMM"):null,S=(e,a,i="en-US")=>e?n(t.fromISO(e,{zone:a}),i):null;export{u as FlightType,g as flightComparator,f as formatGate,c as gateNameRegex,d as mapFlightDetails,m as mapFlightListItem};