@opentripplanner/core-utils 13.0.0-alpha.2 → 13.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/esm/query-params.js +773 -0
- package/esm/query-params.js.map +1 -0
- package/lib/itinerary.js +63 -51
- package/lib/itinerary.js.map +1 -1
- package/lib/profile.js +1 -1
- package/lib/profile.js.map +1 -1
- package/lib/query-gen.js +2 -1
- package/lib/query-gen.js.map +1 -1
- package/lib/query-params.js +735 -0
- package/lib/query-params.js.map +1 -0
- package/lib/query.js +4 -2
- package/lib/query.js.map +1 -1
- package/lib/time.js +9 -5
- package/lib/time.js.map +1 -1
- package/package.json +3 -3
- package/esm/query-params.jsx +0 -893
- package/lib/query-params.jsx +0 -893
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-params.js","names":["cloneDeep","React","Wheelchair","isTransit","isAccessMode","isCar","hasTransit","hasBike","hasMicromobility","getItem","getCurrentDate","getCurrentTime","formatPlace","location","alternateName","name","concat","lat","lon","storedSettings","queryParams","routingTypes","itineraryRewrite","value","fromPlace","profileRewrite","from","toPlace","to","arriveBy","accessModes","directModes","transitModes","length","split","forEach","m","push","applicable","query","otp2","mode","indexOf","selector","label","options","text","maxWalkDistance","maxBikeDistance","opts","optimize","low","high","step","labelLow","labelHigh","maxEScooterDistance","watts","maximumMicromobilitySpeed","weight","TYPICAL_RIDER_WEIGHT","icon","createElement","config","modes","configModes","some","configMode","find","showWheelchairSetting","company","companies","includes","places","Array","isArray","intermediatePlaces","map","place","undefined","param","userDefaultOverride","getCustomQueryParams","customizations","clonedParams","Object","keys","k","paramIndex","findIndex","_objectSpread"],"sources":["../src/query-params.jsx"],"sourcesContent":["// TODO: Remove this entire file, as it is deprecated in favor of i18n-queryParams within\n// the SettingsSelector package\n\n// This is only used within stories\nimport cloneDeep from \"lodash.clonedeep\";\nimport React from \"react\";\nimport { Wheelchair } from \"@styled-icons/foundation/Wheelchair\";\n\nimport {\n isTransit,\n isAccessMode,\n isCar,\n hasTransit,\n hasBike,\n hasMicromobility\n} from \"./itinerary\";\nimport { getItem } from \"./storage\";\nimport { getCurrentDate, getCurrentTime } from \"./time\";\n\n/**\n * name: the default name of the parameter used for internal reference and API calls\n *\n * routingTypes: array of routing type(s) (ITINERARY, PROFILE, or both) this param applies to\n *\n * applicable: an optional function (accepting the current full query as a\n * parameter) indicating whether this query parameter is applicable to the query.\n * (Applicability is assumed if this function is not provided.)\n *\n * default: the default value for this parameter. The default can be also be a\n * function that gets executed when accessing the default value.\n *\n * itineraryRewrite: an optional function for translating the key and/or value\n * for ITINERARY mode only (e.g. 'to' is rewritten as 'toPlace'). Accepts the\n * initial internal value as a function parameter.\n *\n * profileRewrite: an optional function for translating the value for PROFILE mode\n *\n * label: a text label for for onscreen display. May either be a text string or a\n * function (accepting the current full query as a parameter) returning a string\n *\n * selector: the default type of UI selector to use in the form. Can be one of:\n * - DROPDOWN: a standard drop-down menu selector\n *\n * options: an array of text/value pairs used with a dropdown selector\n *\n * TODO: validation system for rewrite functions and/or better user documentation\n * TODO: alphabetize below list\n */\n\n// FIXME: Use for parsing URL values?\n// const stringToLocation = string => {\n// const split = string.split(',')\n// return split.length === 2\n// ? {lat: split[0], lon: split[1]}\n// : {lat: null, lon: null}\n// }\n\n/**\n * Format location object as string for use in fromPlace or toPlace query param.\n */\nexport function formatPlace(location, alternateName) {\n if (!location) return null;\n const name =\n location.name ||\n `${alternateName ? `${alternateName} ` : \"\"}(${location.lat},${\n location.lon\n })`;\n // This string is not language-specific\n return `${name}::${location.lat},${location.lon}`;\n}\n\n// Load stored default query settings from local storage\nconst storedSettings = getItem(\"defaultQuery\", {});\n\nconst queryParams = [\n {\n /* from - the trip origin. stored internally as a location (lat/lon/name) object */\n name: \"from\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: null,\n itineraryRewrite: value => ({ fromPlace: formatPlace(value) }),\n profileRewrite: value => ({ from: { lat: value.lat, lon: value.lon } })\n // FIXME: Use for parsing URL values?\n // fromURL: stringToLocation\n },\n\n {\n /* to - the trip destination. stored internally as a location (lat/lon/name) object */\n name: \"to\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: null,\n itineraryRewrite: value => ({ toPlace: formatPlace(value) }),\n profileRewrite: value => ({ to: { lat: value.lat, lon: value.lon } })\n // FIXME: Use for parsing URL values?\n // fromURL: stringToLocation\n },\n\n {\n /* date - the date of travel, in MM-DD-YYYY format */\n name: \"date\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: getCurrentDate\n },\n\n {\n /* time - the arrival/departure time for an itinerary trip, in HH:mm format */\n name: \"time\",\n routingTypes: [\"ITINERARY\"],\n default: getCurrentTime\n },\n\n {\n /* departArrive - whether this is a depart-at, arrive-by, or leave-now trip */\n name: \"departArrive\",\n routingTypes: [\"ITINERARY\"],\n default: \"NOW\",\n itineraryRewrite: value => ({ arriveBy: value === \"ARRIVE\" })\n },\n\n {\n /* startTime - the start time for a profile trip, in HH:mm format */\n name: \"startTime\",\n routingTypes: [\"PROFILE\"],\n default: \"07:00\"\n },\n\n {\n /* endTime - the end time for a profile trip, in HH:mm format */\n name: \"endTime\",\n routingTypes: [\"PROFILE\"],\n default: \"09:00\"\n },\n\n {\n /* mode - the allowed modes for a trip, as a comma-separated list */\n name: \"mode\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: \"WALK,TRANSIT\", // TODO: make this dependent on routingType?\n profileRewrite: value => {\n const accessModes = [];\n const directModes = [];\n const transitModes = [];\n\n if (value && value.length > 0) {\n value.split(\",\").forEach(m => {\n if (isTransit(m)) transitModes.push(m);\n if (isAccessMode(m)) {\n accessModes.push(m);\n // TODO: make configurable whether direct-driving is considered\n if (!isCar(m)) directModes.push(m);\n }\n });\n }\n\n return { accessModes, directModes, transitModes };\n }\n },\n\n {\n /* showIntermediateStops - whether response should include intermediate stops for transit legs */\n name: \"showIntermediateStops\",\n routingTypes: [\"ITINERARY\"],\n default: true\n },\n\n {\n /* maxWalkDistance - the maximum distance in meters the user will walk to transit. */\n name: \"maxWalkDistance\",\n routingTypes: [\"ITINERARY\"],\n applicable: query =>\n /* Since this query variable isn't in this list, it's not included in the generated query\n * It does however allow us to determine if we should show the OTP1 max walk distance\n * dropdown or the OTP2 walk reluctance slider\n */\n !query.otp2 &&\n query.mode &&\n hasTransit(query.mode) &&\n query.mode.indexOf(\"WALK\") !== -1,\n default: 1609, // 1 mi.\n selector: \"DROPDOWN\",\n label: \"Maximum Walk\",\n options: [\n {\n text: \"1/10 mile\",\n value: 160.9\n },\n {\n text: \"1/4 mile\",\n value: 402.3\n },\n {\n text: \"1/2 mile\",\n value: 804.7\n },\n {\n text: \"3/4 mile\",\n value: 1207\n },\n {\n text: \"1 mile\",\n value: 1609\n },\n {\n text: \"2 miles\",\n value: 3219\n },\n {\n text: \"5 miles\",\n value: 8047\n }\n ]\n },\n\n {\n /* maxBikeDistance - the maximum distance in meters the user will bike. Not\n * actually an OTP parameter (maxWalkDistance doubles for biking) but we\n * store it separately internally in order to allow different default values,\n * options, etc. Translated to 'maxWalkDistance' via the rewrite function.\n */\n name: \"maxBikeDistance\",\n routingTypes: [\"ITINERARY\"],\n applicable: query =>\n query.mode &&\n hasTransit(query.mode) &&\n query.mode.indexOf(\"BICYCLE\") !== -1,\n default: 4828, // 3 mi.\n selector: \"DROPDOWN\",\n label: \"Maximum Bike\",\n options: [\n {\n text: \"1/4 mile\",\n value: 402.3\n },\n {\n text: \"1/2 mile\",\n value: 804.7\n },\n {\n text: \"3/4 mile\",\n value: 1207\n },\n {\n text: \"1 mile\",\n value: 1609\n },\n {\n text: \"2 miles\",\n value: 3219\n },\n {\n text: \"3 miles\",\n value: 4828\n },\n {\n text: \"5 miles\",\n value: 8047\n },\n {\n text: \"10 miles\",\n value: 16093\n },\n {\n text: \"20 miles\",\n value: 32187\n },\n {\n text: \"30 miles\",\n value: 48280\n }\n ],\n itineraryRewrite: value => ({\n maxWalkDistance: value,\n // ensures that the value is repopulated when loaded from URL params\n maxBikeDistance: value\n })\n },\n\n {\n /* optimize -- how to optimize a trip (non-bike, non-micromobility trips) */\n name: \"optimize\",\n // This parameter doesn't seem to do anything\n applicable: () => false,\n routingTypes: [\"ITINERARY\"],\n default: \"QUICK\",\n selector: \"DROPDOWN\",\n label: \"Optimize for\",\n options: [\n {\n text: \"Speed\",\n value: \"QUICK\"\n },\n {\n text: \"Fewest Transfers\",\n value: \"TRANSFERS\"\n }\n ]\n },\n\n {\n /* optimizeBike -- how to optimize an bike-based trip */\n name: \"optimizeBike\",\n applicable: query => !query.otp2 && hasBike(query.mode),\n routingTypes: [\"ITINERARY\"],\n default: \"SAFE\",\n selector: \"DROPDOWN\",\n label: \"Optimize for\",\n options: () => {\n const opts = [\n {\n text: \"Speed\",\n value: \"QUICK\"\n },\n {\n text: \"Bike-Friendly Trip\",\n value: \"SAFE\"\n },\n {\n text: \"Flat Trip\",\n value: \"FLAT\"\n }\n ];\n\n return opts;\n },\n itineraryRewrite: value => ({ optimize: value })\n },\n\n {\n /* maxWalkTime -- the maximum time the user will spend walking in minutes */\n name: \"maxWalkTime\",\n routingTypes: [\"PROFILE\"],\n default: 15,\n selector: \"DROPDOWN\",\n label: \"Max Walk Time\",\n applicable: query =>\n query.mode && hasTransit(query.mode) && query.mode.indexOf(\"WALK\") !== -1,\n options: [\n {\n text: \"5 minutes\",\n value: 5\n },\n {\n text: \"10 minutes\",\n value: 10\n },\n {\n text: \"15 minutes\",\n value: 15\n },\n {\n text: \"20 minutes\",\n value: 20\n },\n {\n text: \"30 minutes\",\n value: 30\n },\n {\n text: \"45 minutes\",\n value: 45\n },\n {\n text: \"1 hour\",\n value: 60\n }\n ]\n },\n {\n name: \"walkReluctance\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n selector: \"SLIDER\",\n low: 1,\n high: 10,\n step: 0.5,\n label: \"walk reluctance\",\n labelLow: \"More Walking\",\n labelHigh: \"More Transit\",\n applicable: query =>\n /* Since this query variable isn't in this list, it's not included in the generated query\n * It does however allow us to determine if we should show the OTP1 max walk distance\n * dropdown or the OTP2 walk reluctance slider\n */\n !!query.otp2 && query.mode && query.mode.indexOf(\"WALK\") !== -1\n },\n {\n /* maxBikeTime -- the maximum time the user will spend biking in minutes */\n name: \"maxBikeTime\",\n routingTypes: [\"PROFILE\"],\n default: 20,\n selector: \"DROPDOWN\",\n label: \"Max Bike Time\",\n applicable: query =>\n query.mode &&\n hasTransit(query.mode) &&\n query.mode.indexOf(\"BICYCLE\") !== -1,\n options: [\n {\n text: \"5 minutes\",\n value: 5\n },\n {\n text: \"10 minutes\",\n value: 10\n },\n {\n text: \"15 minutes\",\n value: 15\n },\n {\n text: \"20 minutes\",\n value: 20\n },\n {\n text: \"30 minutes\",\n value: 30\n },\n {\n text: \"45 minutes\",\n value: 45\n },\n {\n text: \"1 hour\",\n value: 60\n }\n ]\n },\n\n {\n /* bikeSpeed -- the user's bikeSpeed speed in m/s */\n name: \"bikeSpeed\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: 3.58,\n selector: \"DROPDOWN\",\n label: \"Bicycle Speed\",\n applicable: query => query.mode && query.mode.indexOf(\"BICYCLE\") !== -1,\n options: [\n {\n text: \"6 MPH\",\n value: 2.68\n },\n {\n text: \"8 MPH\",\n value: 3.58\n },\n {\n text: \"10 MPH\",\n value: 4.47\n },\n {\n text: \"12 MPH\",\n value: 5.36\n }\n ]\n },\n\n {\n /* maxEScooterDistance - the maximum distance in meters the user will ride\n * an E-scooter. Not actually an OTP parameter (maxWalkDistance doubles for\n * any non-transit mode except for car) but we store it separately\n * internally in order to allow different default values, options, etc.\n * Translated to 'maxWalkDistance' via the rewrite function.\n */\n name: \"maxEScooterDistance\",\n routingTypes: [\"ITINERARY\"],\n applicable: query =>\n query.mode && hasTransit(query.mode) && hasMicromobility(query.mode),\n default: 4828, // 3 mi.\n selector: \"DROPDOWN\",\n label: \"Maximum E-scooter Distance\",\n options: [\n {\n text: \"1/4 mile\",\n value: 402.3\n },\n {\n text: \"1/2 mile\",\n value: 804.7\n },\n {\n text: \"3/4 mile\",\n value: 1207\n },\n {\n text: \"1 mile\",\n value: 1609\n },\n {\n text: \"2 miles\",\n value: 3219\n },\n {\n text: \"3 miles\",\n value: 4828\n },\n {\n text: \"5 miles\",\n value: 8047\n },\n {\n text: \"10 miles\",\n value: 16093\n },\n {\n text: \"20 miles\",\n value: 32187\n },\n {\n text: \"30 miles\",\n value: 48280\n }\n ],\n itineraryRewrite: value => ({\n maxWalkDistance: value,\n // ensures that the value is repopulated when loaded from URL params\n maxEScooterDistance: value\n })\n },\n\n {\n /* bikeSpeed -- the user's bikeSpeed speed in m/s */\n name: \"watts\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: 250,\n selector: \"DROPDOWN\",\n label: \"E-scooter Power\",\n // this configuration should only be allowed for personal E-scooters as these\n // settings will be defined by the vehicle type of an E-scooter being rented\n applicable: query =>\n query.mode &&\n query.mode.indexOf(\"MICROMOBILITY\") !== -1 &&\n query.mode.indexOf(\"MICROMOBILITY_RENT\") === -1 &&\n query.mode.indexOf(\"SCOOTER\") === -1,\n options: [\n {\n text: \"Kid's hoverboard (6mph)\",\n value: 125\n },\n {\n text: \"Entry-level scooter (11mph)\",\n value: 250\n },\n {\n text: \"Robust E-scooter (18mph)\",\n value: 500\n },\n {\n text: \"Powerful E-scooter (24mph)\",\n value: 1500\n }\n ],\n // rewrite a few other values to add some baseline assumptions about the\n // vehicle\n itineraryRewrite: value => {\n const watts = value;\n // the maximum cruising and downhill speed. Units in m/s\n let maximumMicromobilitySpeed;\n let weight;\n // see https://en.wikipedia.org/wiki/Human_body_weight#Average_weight_around_the_world\n // estimate is for an average North American human with clothes and stuff\n // units are in kg\n const TYPICAL_RIDER_WEIGHT = 90;\n switch (watts) {\n case 125:\n // exemplar: Swagtron Turbo 5 hoverboard (https://swagtron.com/product/recertified-swagtron-turbo-five-hoverboard-classic/)\n maximumMicromobilitySpeed = 2.8; // ~= 6mph\n weight = TYPICAL_RIDER_WEIGHT + 9;\n break;\n case 250:\n // exemplar: Xiaomi M365 (https://www.gearbest.com/skateboard/pp_596618.html)\n maximumMicromobilitySpeed = 5; // ~= 11.5mph\n weight = TYPICAL_RIDER_WEIGHT + 12.5;\n break;\n case 500:\n // exemplar: Razor EcoSmart Metro (https://www.amazon.com/Razor-EcoSmart-Metro-Electric-Scooter/dp/B002ZDAEIS?SubscriptionId=AKIAJMXJ2YFJTEDLQMUQ&tag=digitren08-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B002ZDAEIS&ascsubtag=15599460143449ocb)\n maximumMicromobilitySpeed = 8; // ~= 18mph\n weight = TYPICAL_RIDER_WEIGHT + 30;\n break;\n case 1000:\n // exemplar: Boosted Rev (https://boostedboards.com/vehicles/scooters/boosted-rev)\n maximumMicromobilitySpeed = 11; // ~= 24mph\n weight = TYPICAL_RIDER_WEIGHT + 21;\n break;\n default:\n break;\n }\n return { maximumMicromobilitySpeed, watts, weight };\n }\n },\n\n {\n /* ignoreRealtimeUpdates -- if true, do not use realtime updates in routing */\n name: \"ignoreRealtimeUpdates\",\n routingTypes: [\"ITINERARY\"],\n default: false\n },\n\n {\n /* companies -- tnc companies to query */\n name: \"companies\",\n routingTypes: [\"ITINERARY\"]\n },\n\n {\n /* wheelchair -- whether the user requires a wheelchair-accessible trip */\n name: \"wheelchair\",\n routingTypes: [\"ITINERARY\", \"PROFILE\"],\n default: false,\n selector: \"CHECKBOX\",\n label: \"Prefer Wheelchair Accessible Routes\",\n icon: <Wheelchair />,\n applicable: (query, config) => {\n if (!query.mode || !config.modes) return false;\n const configModes = (config.modes.accessModes || []).concat(\n config.modes.transitModes || []\n );\n return query.mode.split(\",\").some(mode => {\n const configMode = configModes.find(m => m.mode === mode);\n if (!configMode || !configMode.showWheelchairSetting) return false;\n if (\n configMode.company &&\n (!query.companies ||\n !query.companies.split(\",\").includes(configMode.company))\n )\n return false;\n return true;\n });\n }\n },\n\n {\n name: \"bannedRoutes\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"numItineraries\",\n routingTypes: [\"ITINERARY\"],\n default: 3\n },\n {\n name: \"intermediatePlaces\",\n default: [],\n routingTypes: [\"ITINERARY\"],\n itineraryRewrite: places =>\n Array.isArray(places) && places.length > 0\n ? {\n intermediatePlaces: places.map(place => formatPlace(place))\n }\n : undefined\n },\n {\n // Time penalty in seconds the requester is willing to accept in order to\n // complete journey on preferred route. I.e., number of seconds that we are\n // willing to wait for the preferred route.\n name: \"otherThanPreferredRoutesPenalty\",\n default: 15 * 60, // 15 minutes\n routingTypes: [\"ITINERARY\"]\n },\n // Below are less commonly used query params included so that in case they are\n // passed in a query parameter they do not get filtered out from the ultimate\n // API request.\n {\n name: \"preferredRoutes\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"maxPreTransitTime\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"waitReluctance\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"driveDistanceReluctance\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"driveTimeReluctance\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"waitAtBeginningFactor\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bikeSwitchTime\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bikeSwitchCost\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"minTransferTime\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"preferredAgencies\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"unpreferredRoutes\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"unpreferredAgencies\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"walkBoardCost\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bikeBoardCost\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"whiteListedRoutes\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bannedAgencies\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"whiteListedAgencies\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bannedTrips\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bannedStops\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"bannedStopsHard\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"transferPenalty\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"nonpreferredTransferPenalty\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"maxTransfers\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"batch\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"startTransitStopId\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"startTransitTripId\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"clampInitialWait\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"reverseOptimizeOnTheFly\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"boardSlack\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"alightSlack\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"locale\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"disableRemainingWeightHeuristic\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"flexFlagStopBufferSize\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"flexUseReservationServices\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"flexUseEligibilityServices\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"flexIgnoreDrtAdvanceBookMin\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"maxHours\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"useRequestedDateTimeInMaxHours\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"disableAlertFiltering\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"geoidElevation\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"invalidDateStrategy\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"minTransitDistance\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"searchTimeout\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"pathComparator\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"onlyTransitTrips\",\n routingTypes: [\"ITINERARY\"]\n },\n {\n name: \"minimumMicromobilitySpeed\",\n routingTypes: [\"ITINERARY\"]\n }\n];\n// Iterate over stored settings and update query param defaults.\n// FIXME: this does not get updated if the user defaults are cleared\nqueryParams.forEach(param => {\n if (param.name in storedSettings) {\n param.default = storedSettings[param.name];\n param.userDefaultOverride = true;\n }\n});\n\nexport default queryParams;\n\n/**\n * You can customize the queryParams labels and options, and labels and values for each option.\n * @param customizations The optional customizations to apply: an object whose fields\n * correspond to the items in queryParams with the corresponding name,\n * the value for those fields being an object which fields (label, options...)\n * will override the originals.\n * Example:\n * {\n * // Matches the name param\n * maxWalkDistance: {\n * // Any fields that should be overridden go here\n * options: [\n * // ...new options\n * ],\n * default: 500,\n * label: \"max walk dist\"\n * }\n * }\n * @returns A copy of the default queryParams that has the given customizations applied.\n * If no customizations parameter is provided, returns the queryParams object itself.\n */\nexport function getCustomQueryParams(customizations) {\n if (!customizations) return queryParams;\n\n const clonedParams = cloneDeep(queryParams);\n Object.keys(customizations).forEach(k => {\n // Merge fields into the cloned object\n const paramIndex = clonedParams.findIndex(param => param.name === k);\n if (paramIndex !== -1) {\n clonedParams[paramIndex] = {\n ...clonedParams[paramIndex],\n ...customizations[k]\n };\n }\n });\n return clonedParams;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/itinerary.js
CHANGED
|
@@ -78,7 +78,7 @@ function isTransit(mode) {
|
|
|
78
78
|
* property which encodes this info.
|
|
79
79
|
*/
|
|
80
80
|
function isReservationRequired(leg) {
|
|
81
|
-
return leg
|
|
81
|
+
return (leg === null || leg === void 0 ? void 0 : leg.boardRule) === "mustPhone" || (leg === null || leg === void 0 ? void 0 : leg.alightRule) === "mustPhone";
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
84
|
* Returns true if a user must ask the driver to let the user off
|
|
@@ -86,25 +86,27 @@ function isReservationRequired(leg) {
|
|
|
86
86
|
* "coordinateWithDriver" in board/alight rule encodes this info.
|
|
87
87
|
*/
|
|
88
88
|
function isCoordinationRequired(leg) {
|
|
89
|
-
return leg
|
|
89
|
+
return (leg === null || leg === void 0 ? void 0 : leg.boardRule) === "coordinateWithDriver" || (leg === null || leg === void 0 ? void 0 : leg.alightRule) === "coordinateWithDriver";
|
|
90
90
|
}
|
|
91
91
|
function containsGeometry(place) {
|
|
92
|
-
|
|
92
|
+
var _place$stop, _place$stop2;
|
|
93
|
+
return (place === null || place === void 0 || (_place$stop = place.stop) === null || _place$stop === void 0 ? void 0 : _place$stop.geometries) !== null && (place === null || place === void 0 || (_place$stop2 = place.stop) === null || _place$stop2 === void 0 ? void 0 : _place$stop2.geometries) !== undefined;
|
|
93
94
|
}
|
|
94
95
|
function endsWithGeometry(leg) {
|
|
95
|
-
return containsGeometry(leg
|
|
96
|
+
return containsGeometry(leg === null || leg === void 0 ? void 0 : leg.to);
|
|
96
97
|
}
|
|
97
98
|
function startsWithGeometry(leg) {
|
|
98
|
-
return containsGeometry(leg
|
|
99
|
+
return containsGeometry(leg === null || leg === void 0 ? void 0 : leg.from);
|
|
99
100
|
}
|
|
100
101
|
function legContainsGeometry(leg) {
|
|
101
102
|
return endsWithGeometry(leg) || startsWithGeometry(leg);
|
|
102
103
|
}
|
|
103
104
|
function isAdvanceBookingRequired(info) {
|
|
104
|
-
|
|
105
|
+
var _info$latestBookingTi;
|
|
106
|
+
return (info === null || info === void 0 || (_info$latestBookingTi = info.latestBookingTime) === null || _info$latestBookingTi === void 0 ? void 0 : _info$latestBookingTi.daysPrior) > 0;
|
|
105
107
|
}
|
|
106
108
|
function legDropoffRequiresAdvanceBooking(leg) {
|
|
107
|
-
return isAdvanceBookingRequired(leg
|
|
109
|
+
return isAdvanceBookingRequired(leg === null || leg === void 0 ? void 0 : leg.dropOffBookingInfo);
|
|
108
110
|
}
|
|
109
111
|
|
|
110
112
|
/**
|
|
@@ -112,12 +114,13 @@ function legDropoffRequiresAdvanceBooking(leg) {
|
|
|
112
114
|
* returned by OTP when a leg is a flex leg.
|
|
113
115
|
*/
|
|
114
116
|
function isFlex(leg) {
|
|
115
|
-
return isReservationRequired(leg) || isCoordinationRequired(leg) || legDropoffRequiresAdvanceBooking(leg) || isAdvanceBookingRequired(leg
|
|
117
|
+
return isReservationRequired(leg) || isCoordinationRequired(leg) || legDropoffRequiresAdvanceBooking(leg) || isAdvanceBookingRequired(leg === null || leg === void 0 ? void 0 : leg.pickupBookingInfo) || legContainsGeometry(leg);
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
// alpha-only comment
|
|
119
121
|
function isRideshareLeg(leg) {
|
|
120
|
-
|
|
122
|
+
var _leg$rideHailingEstim;
|
|
123
|
+
return !!((_leg$rideHailingEstim = leg.rideHailingEstimate) !== null && _leg$rideHailingEstim !== void 0 && (_leg$rideHailingEstim = _leg$rideHailingEstim.provider) !== null && _leg$rideHailingEstim !== void 0 && _leg$rideHailingEstim.id);
|
|
121
124
|
}
|
|
122
125
|
function isWalk(mode) {
|
|
123
126
|
if (!mode) return false;
|
|
@@ -331,8 +334,9 @@ function getElevationProfile(steps, unitConversion = 1) {
|
|
|
331
334
|
let previous = null;
|
|
332
335
|
const points = [];
|
|
333
336
|
steps.forEach(step => {
|
|
337
|
+
var _step$elevation;
|
|
334
338
|
// Support for old REST response data (in step.elevation)
|
|
335
|
-
const stepElevationProfile = step.elevationProfile || Array.isArray(step.elevation) && step.elevation
|
|
339
|
+
const stepElevationProfile = step.elevationProfile || Array.isArray(step.elevation) && ((_step$elevation = step.elevation) === null || _step$elevation === void 0 ? void 0 : _step$elevation.map(mapOldElevationComponentToNew));
|
|
336
340
|
if (!stepElevationProfile || stepElevationProfile.length === 0) {
|
|
337
341
|
traversed += step.distance;
|
|
338
342
|
return;
|
|
@@ -493,6 +497,7 @@ const CARBON_INTENSITY_DEFAULTS = {
|
|
|
493
497
|
function calculateEmissions(
|
|
494
498
|
// This type makes all the properties from Itinerary optional except legs.
|
|
495
499
|
itinerary, carbonIntensity = {}, units) {
|
|
500
|
+
var _itinerary$legs;
|
|
496
501
|
// Apply defaults for any values that we don't have.
|
|
497
502
|
const carbonIntensityWithDefaults = {
|
|
498
503
|
...CARBON_INTENSITY_DEFAULTS,
|
|
@@ -500,9 +505,9 @@ itinerary, carbonIntensity = {}, units) {
|
|
|
500
505
|
};
|
|
501
506
|
|
|
502
507
|
// Distance is in meters, totalCarbon is in grams
|
|
503
|
-
const totalCarbon = itinerary
|
|
508
|
+
const totalCarbon = (itinerary === null || itinerary === void 0 || (_itinerary$legs = itinerary.legs) === null || _itinerary$legs === void 0 ? void 0 : _itinerary$legs.reduce((total, leg) => {
|
|
504
509
|
return (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] || 0) + total;
|
|
505
|
-
}, 0) || 0;
|
|
510
|
+
}, 0)) || 0;
|
|
506
511
|
switch (units) {
|
|
507
512
|
case "ounce":
|
|
508
513
|
return totalCarbon / 28.35;
|
|
@@ -523,6 +528,7 @@ itinerary, carbonIntensity = {}, units) {
|
|
|
523
528
|
* 3. stop id, whether null or not (this is the fallback case).
|
|
524
529
|
*/
|
|
525
530
|
function getDisplayedStopId(placeOrStop) {
|
|
531
|
+
var _stopId;
|
|
526
532
|
let stopId;
|
|
527
533
|
let stopCode;
|
|
528
534
|
if ("stopId" in placeOrStop) {
|
|
@@ -536,7 +542,7 @@ function getDisplayedStopId(placeOrStop) {
|
|
|
536
542
|
id: stopId
|
|
537
543
|
} = placeOrStop);
|
|
538
544
|
}
|
|
539
|
-
return stopCode || stopId
|
|
545
|
+
return stopCode || ((_stopId = stopId) === null || _stopId === void 0 ? void 0 : _stopId.split(":")[1]) || stopId;
|
|
540
546
|
}
|
|
541
547
|
|
|
542
548
|
/**
|
|
@@ -562,9 +568,9 @@ function getLegCost(leg, mediumId, riderCategoryId) {
|
|
|
562
568
|
const totalCostProduct = relevantFareProducts.find(fp => fp.product.name === "rideCost" || fp.product.name === "regular");
|
|
563
569
|
const transferFareProduct = relevantFareProducts.find(fp => fp.product.name === "transfer");
|
|
564
570
|
return {
|
|
565
|
-
price: totalCostProduct
|
|
566
|
-
transferAmount: transferFareProduct
|
|
567
|
-
productUseId: totalCostProduct
|
|
571
|
+
price: totalCostProduct === null || totalCostProduct === void 0 ? void 0 : totalCostProduct.product.price,
|
|
572
|
+
transferAmount: transferFareProduct === null || transferFareProduct === void 0 ? void 0 : transferFareProduct.product.price,
|
|
573
|
+
productUseId: totalCostProduct === null || totalCostProduct === void 0 ? void 0 : totalCostProduct.id
|
|
568
574
|
};
|
|
569
575
|
}
|
|
570
576
|
|
|
@@ -578,7 +584,10 @@ function getLegCost(leg, mediumId, riderCategoryId) {
|
|
|
578
584
|
function getItineraryCost(legs, mediumId, riderCategoryId) {
|
|
579
585
|
const legCosts = legs
|
|
580
586
|
// Only legs with fares (no walking legs)
|
|
581
|
-
.filter(leg =>
|
|
587
|
+
.filter(leg => {
|
|
588
|
+
var _leg$fareProducts;
|
|
589
|
+
return ((_leg$fareProducts = leg.fareProducts) === null || _leg$fareProducts === void 0 ? void 0 : _leg$fareProducts.length) > 0;
|
|
590
|
+
})
|
|
582
591
|
// Get the leg cost object of each leg
|
|
583
592
|
.map(leg => getLegCost(leg, mediumId, riderCategoryId)).filter(cost => cost.price !== undefined)
|
|
584
593
|
// Filter out duplicate use IDs
|
|
@@ -598,8 +607,8 @@ function getItineraryCost(legs, mediumId, riderCategoryId) {
|
|
|
598
607
|
return legCosts.reduce((prev, cur) => {
|
|
599
608
|
var _prev$currency;
|
|
600
609
|
return {
|
|
601
|
-
amount: prev.amount + cur
|
|
602
|
-
currency: (_prev$currency = prev.currency) !== null && _prev$currency !== void 0 ? _prev$currency : cur
|
|
610
|
+
amount: prev.amount + (cur === null || cur === void 0 ? void 0 : cur.amount) || 0,
|
|
611
|
+
currency: (_prev$currency = prev.currency) !== null && _prev$currency !== void 0 ? _prev$currency : cur === null || cur === void 0 ? void 0 : cur.currency
|
|
603
612
|
};
|
|
604
613
|
}, {
|
|
605
614
|
amount: 0,
|
|
@@ -620,36 +629,39 @@ const pickupDropoffTypeToOtp1 = otp2Type => {
|
|
|
620
629
|
return null;
|
|
621
630
|
}
|
|
622
631
|
};
|
|
623
|
-
const convertGraphQLResponseToLegacy = leg =>
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
632
|
+
const convertGraphQLResponseToLegacy = leg => {
|
|
633
|
+
var _leg$agency, _leg$agency2, _leg$agency3, _leg$agency4, _leg$from$stop, _leg$from$stop2, _leg$route, _leg$route2, _leg$route3, _leg$route4, _leg$route5, _leg$route6, _leg$to$stop, _leg$to$stop2, _leg$trip, _leg$trip2;
|
|
634
|
+
return {
|
|
635
|
+
...leg,
|
|
636
|
+
agencyBrandingUrl: (_leg$agency = leg.agency) === null || _leg$agency === void 0 ? void 0 : _leg$agency.url,
|
|
637
|
+
agencyId: (_leg$agency2 = leg.agency) === null || _leg$agency2 === void 0 ? void 0 : _leg$agency2.id,
|
|
638
|
+
agencyName: (_leg$agency3 = leg.agency) === null || _leg$agency3 === void 0 ? void 0 : _leg$agency3.name,
|
|
639
|
+
agencyUrl: (_leg$agency4 = leg.agency) === null || _leg$agency4 === void 0 ? void 0 : _leg$agency4.url,
|
|
640
|
+
alightRule: pickupDropoffTypeToOtp1(leg.dropoffType),
|
|
641
|
+
boardRule: pickupDropoffTypeToOtp1(leg.pickupType),
|
|
642
|
+
dropOffBookingInfo: {
|
|
643
|
+
latestBookingTime: leg.dropOffBookingInfo
|
|
644
|
+
},
|
|
645
|
+
from: {
|
|
646
|
+
...leg.from,
|
|
647
|
+
stopCode: (_leg$from$stop = leg.from.stop) === null || _leg$from$stop === void 0 ? void 0 : _leg$from$stop.code,
|
|
648
|
+
stopId: (_leg$from$stop2 = leg.from.stop) === null || _leg$from$stop2 === void 0 ? void 0 : _leg$from$stop2.gtfsId
|
|
649
|
+
},
|
|
650
|
+
route: (_leg$route = leg.route) === null || _leg$route === void 0 ? void 0 : _leg$route.shortName,
|
|
651
|
+
routeColor: (_leg$route2 = leg.route) === null || _leg$route2 === void 0 ? void 0 : _leg$route2.color,
|
|
652
|
+
routeId: (_leg$route3 = leg.route) === null || _leg$route3 === void 0 ? void 0 : _leg$route3.gtfsId,
|
|
653
|
+
routeLongName: (_leg$route4 = leg.route) === null || _leg$route4 === void 0 ? void 0 : _leg$route4.longName,
|
|
654
|
+
routeShortName: (_leg$route5 = leg.route) === null || _leg$route5 === void 0 ? void 0 : _leg$route5.shortName,
|
|
655
|
+
routeTextColor: (_leg$route6 = leg.route) === null || _leg$route6 === void 0 ? void 0 : _leg$route6.textColor,
|
|
656
|
+
to: {
|
|
657
|
+
...leg.to,
|
|
658
|
+
stopCode: (_leg$to$stop = leg.to.stop) === null || _leg$to$stop === void 0 ? void 0 : _leg$to$stop.code,
|
|
659
|
+
stopId: (_leg$to$stop2 = leg.to.stop) === null || _leg$to$stop2 === void 0 ? void 0 : _leg$to$stop2.gtfsId
|
|
660
|
+
},
|
|
661
|
+
tripHeadsign: (_leg$trip = leg.trip) === null || _leg$trip === void 0 ? void 0 : _leg$trip.tripHeadsign,
|
|
662
|
+
tripId: (_leg$trip2 = leg.trip) === null || _leg$trip2 === void 0 ? void 0 : _leg$trip2.gtfsId
|
|
663
|
+
};
|
|
664
|
+
};
|
|
653
665
|
|
|
654
666
|
/** Extracts the route number for a leg returned from OTP1 or OTP2. */
|
|
655
667
|
exports.convertGraphQLResponseToLegacy = convertGraphQLResponseToLegacy;
|
|
@@ -659,7 +671,7 @@ const getLegRouteShortName = leg => {
|
|
|
659
671
|
routeShortName
|
|
660
672
|
} = leg;
|
|
661
673
|
// typeof route === "object" denotes newer OTP2 responses. routeShortName and route as string is OTP1.
|
|
662
|
-
return typeof route === "object" ? route
|
|
674
|
+
return typeof route === "object" ? route === null || route === void 0 ? void 0 : route.shortName : routeShortName || route;
|
|
663
675
|
};
|
|
664
676
|
|
|
665
677
|
/** Extract the route long name for a leg returned from OTP1 or OTP2. */
|
|
@@ -670,7 +682,7 @@ const getLegRouteLongName = leg => {
|
|
|
670
682
|
routeLongName
|
|
671
683
|
} = leg;
|
|
672
684
|
// typeof route === "object" denotes newer OTP2 responses. routeLongName is OTP1.
|
|
673
|
-
return typeof route === "object" ? route
|
|
685
|
+
return typeof route === "object" ? route === null || route === void 0 ? void 0 : route.longName : routeLongName;
|
|
674
686
|
};
|
|
675
687
|
|
|
676
688
|
/**
|
package/lib/itinerary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itinerary.js","names":["_polyline","_interopRequireDefault","require","_along","transitModes","exports","getTransitModes","config","modes","map","tm","mode","isTransitLeg","leg","transitLeg","isTransit","includes","isReservationRequired","boardRule","alightRule","isCoordinationRequired","containsGeometry","place","stop","geometries","undefined","endsWithGeometry","to","startsWithGeometry","from","legContainsGeometry","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","isFlex","pickupBookingInfo","isRideshareLeg","rideHailingEstimate","provider","id","isWalk","isBicycle","isBicycleRent","isCar","startsWith","isMicromobility","isAccessMode","hasTransit","modesStr","split","some","hasCar","hasBike","hasMicromobility","hasHail","indexOf","hasRental","getMapColor","get","toSentenceCase","str","String","charAt","toUpperCase","substr","toLowerCase","getCompanyFromLeg","rentedBike","rentedCar","rentedVehicle","networks","rentalVehicle","network","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","polyline","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","legLocationAtDistance","distance","line","pt","turfAlong","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","mapOldElevationComponentToNew","oldElev","first","elevation","second","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","stepElevationProfile","elevationProfile","Array","isArray","elev","diff","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","company","find","co","getCompaniesLabelFromNetworks","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","calculateTncFares","reduce","maxTNCFare","minTNCFare","minPrice","maxPrice","currencyCode","currency","code","amount","CARBON_INTENSITY_DEFAULTS","walk","bicycle","car","tram","trolleybus","subway","rail","bus","ferry","cable_car","gondola","funicular","transit","leg_switch","airplane","micromobility","calculateEmissions","carbonIntensity","carbonIntensityWithDefaults","totalCarbon","total","getDisplayedStopId","placeOrStop","stopId","stopCode","getLegCost","mediumId","riderCategoryId","fareProducts","price","relevantFareProducts","product","riderCategory","medium","totalCostProduct","fp","name","transferFareProduct","transferAmount","productUseId","getItineraryCost","legCosts","cost","prev","cur","p","productUse","_prev$currency","pickupDropoffTypeToOtp1","otp2Type","convertGraphQLResponseToLegacy","agencyBrandingUrl","agency","url","agencyId","agencyName","agencyUrl","dropoffType","pickupType","gtfsId","route","shortName","routeColor","color","routeId","routeLongName","longName","routeShortName","routeTextColor","textColor","tripHeadsign","trip","tripId","getLegRouteShortName","getLegRouteLongName","getLegRouteName"],"sources":["../src/itinerary.ts"],"sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n ElevationProfileComponent,\n FlexBookingInfo,\n ItineraryOnlyLegsRequired,\n LatLngArray,\n Leg,\n MassUnitOption,\n Money,\n Place,\n Step,\n Stop,\n TncFare\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\n \"TROLLEYBUS\",\n \"BUS\",\n \"SUBWAY\",\n \"FERRY\",\n \"RAIL\",\n \"GONDOLA\"\n];\n\n/**\n * @param {config} config OTP-RR configuration object\n * @return {Array} List of all transit modes defined in config; otherwise default mode list\n */\n\nexport function getTransitModes(config: Config): string[] {\n if (!config || !config.modes || !config.modes.transitModes)\n return transitModes;\n\n return config.modes.transitModes.map(tm =>\n typeof tm !== \"string\" ? tm.mode : tm\n );\n}\n\nexport function isTransitLeg(leg: Leg): boolean {\n return leg.transitLeg;\n}\n\nexport function isTransit(mode: string): boolean {\n return transitModes.includes(mode) || mode === \"TRANSIT\";\n}\n\n/**\n * Returns true if the leg pickup rules enabled which require\n * calling ahead for the service to run. \"mustPhone\" is the only\n * property which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg?.boardRule === \"mustPhone\" || leg?.alightRule === \"mustPhone\";\n}\n/**\n * Returns true if a user must ask the driver to let the user off\n * or if the user must flag the driver down for pickup.\n * \"coordinateWithDriver\" in board/alight rule encodes this info.\n */\nexport function isCoordinationRequired(leg: Leg): boolean {\n return (\n leg?.boardRule === \"coordinateWithDriver\" ||\n leg?.alightRule === \"coordinateWithDriver\"\n );\n}\n\nexport function containsGeometry(place: Place): boolean {\n return (\n place?.stop?.geometries !== null && place?.stop?.geometries !== undefined\n );\n}\nexport function endsWithGeometry(leg: Leg): boolean {\n return containsGeometry(leg?.to);\n}\nexport function startsWithGeometry(leg: Leg): boolean {\n return containsGeometry(leg?.from);\n}\nexport function legContainsGeometry(leg: Leg): boolean {\n return endsWithGeometry(leg) || startsWithGeometry(leg);\n}\nexport function isAdvanceBookingRequired(info: FlexBookingInfo): boolean {\n return info?.latestBookingTime?.daysPrior > 0;\n}\nexport function legDropoffRequiresAdvanceBooking(leg: Leg): boolean {\n return isAdvanceBookingRequired(leg?.dropOffBookingInfo);\n}\n\n/**\n * The two rules checked by the above two functions are the only values\n * returned by OTP when a leg is a flex leg.\n */\nexport function isFlex(leg: Leg): boolean {\n return (\n isReservationRequired(leg) ||\n isCoordinationRequired(leg) ||\n legDropoffRequiresAdvanceBooking(leg) ||\n isAdvanceBookingRequired(leg?.pickupBookingInfo) ||\n legContainsGeometry(leg)\n );\n}\n\n// alpha-only comment\nexport function isRideshareLeg(leg: Leg): boolean {\n return !!leg.rideHailingEstimate?.provider?.id;\n}\n\nexport function isWalk(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"WALK\";\n}\n\nexport function isBicycle(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE\";\n}\n\nexport function isBicycleRent(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE_RENT\";\n}\n\nexport function isCar(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"CAR\");\n}\n\nexport function isMicromobility(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"MICROMOBILITY\") || mode.startsWith(\"SCOOTER\");\n}\n\nexport function isAccessMode(mode: string): boolean {\n return (\n isWalk(mode) ||\n isBicycle(mode) ||\n isBicycleRent(mode) ||\n isCar(mode) ||\n isMicromobility(mode)\n );\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are transit modes\n */\nexport function hasTransit(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isTransit(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are car-based modes\n */\nexport function hasCar(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isCar(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are bicycle-based modes\n */\nexport function hasBike(modesStr: string): boolean {\n return modesStr\n .split(\",\")\n .some(mode => isBicycle(mode) || isBicycleRent(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are micromobility-based modes\n */\nexport function hasMicromobility(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isMicromobility(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a hailing mode\n */\nexport function hasHail(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_HAIL\") > -1);\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a rental mode\n */\nexport function hasRental(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_RENT\") > -1);\n}\n\nexport function getMapColor(mode: string): string {\n mode = mode || this.get(\"mode\");\n if (mode === \"WALK\") return \"#444\";\n if (mode === \"BICYCLE\") return \"#0073e5\";\n if (mode === \"SUBWAY\") return \"#e60000\";\n if (mode === \"RAIL\") return \"#b00\";\n if (mode === \"BUS\") return \"#080\";\n if (mode === \"TROLLEYBUS\") return \"#080\";\n if (mode === \"TRAM\") return \"#800\";\n if (mode === \"FERRY\") return \"#008\";\n if (mode === \"CAR\") return \"#444\";\n if (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") return \"#f5a729\";\n return \"#aaa\";\n}\n\nexport function toSentenceCase(str: string): string {\n if (str == null) {\n return \"\";\n }\n str = String(str);\n return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();\n}\n\n/**\n * Derive the company string based on mode and network associated with leg.\n */\nexport function getCompanyFromLeg(leg: Leg): string {\n if (!leg) return null;\n const {\n from,\n mode,\n rentedBike,\n rentedCar,\n rentedVehicle,\n rideHailingEstimate\n } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && rideHailingEstimate) {\n return rideHailingEstimate.provider.id;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\n }\n if (from.rentalVehicle) {\n return from.rentalVehicle.network;\n }\n if (\n (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") &&\n rentedVehicle &&\n from.networks\n ) {\n return from.networks[0];\n }\n return null;\n}\n\nexport function getItineraryBounds(\n itinerary: ItineraryOnlyLegsRequired\n): LatLngArray[] {\n let coords = [];\n itinerary.legs.forEach(leg => {\n const legCoords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map((c: number[]) => [c[1], c[0]]);\n coords = [...coords, ...legCoords];\n });\n return coords;\n}\n\n/**\n * Return a coords object that encloses the given leg's geometry.\n */\nexport function getLegBounds(leg: Leg): number[][] {\n const coords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map(c => [c[1], c[0]]);\n\n // in certain cases, there might be zero-length coordinates in the leg\n // geometry. In these cases, build us an array of coordinates using the from\n // and to data of the leg.\n if (coords.length === 0) {\n coords.push([leg.from.lat, leg.from.lon], [leg.to.lat, leg.to.lon]);\n }\n return coords;\n}\n\n/* Returns an interpolated lat-lon at a specified distance along a leg */\n\nexport function legLocationAtDistance(leg: Leg, distance: number): number[] {\n if (!leg.legGeometry) return null;\n\n try {\n const line = polyline.toGeoJSON(leg.legGeometry.points);\n const pt = turfAlong(line, distance, { units: \"meters\" });\n if (pt && pt.geometry && pt.geometry.coordinates) {\n return [pt.geometry.coordinates[1], pt.geometry.coordinates[0]];\n }\n } catch (e) {\n // FIXME handle error!\n }\n\n return null;\n}\n\n/* Returns an interpolated elevation at a specified distance along a leg */\n\nexport function legElevationAtDistance(\n points: number[][],\n distance: number\n): number {\n // Iterate through the combined elevation profile\n let traversed = 0;\n // If first point distance is not zero, insert starting point at zero with\n // null elevation. Encountering this value should trigger the warning below.\n if (points[0][0] > 0) {\n points.unshift([0, null]);\n }\n for (let i = 1; i < points.length; i++) {\n const start = points[i - 1];\n const elevDistanceSpan = points[i][0] - start[0];\n if (distance >= traversed && distance <= traversed + elevDistanceSpan) {\n // Distance falls within this point and the previous one;\n // compute & return interpolated elevation value\n if (start[1] === null) {\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n }\n const pct = (distance - traversed) / elevDistanceSpan;\n const elevSpan = points[i][1] - start[1];\n return start[1] + elevSpan * pct;\n }\n traversed += elevDistanceSpan;\n }\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n}\n\nexport function mapOldElevationComponentToNew(oldElev: {\n first: number;\n second: number;\n}): ElevationProfileComponent {\n return {\n distance: oldElev.first,\n elevation: oldElev.second\n };\n}\n\n// Iterate through the steps, building the array of elevation points and\n// keeping track of the minimum and maximum elevations reached\nexport function getElevationProfile(\n steps: Step[],\n unitConversion = 1\n): ElevationProfile {\n let minElev = 100000;\n let maxElev = -100000;\n let traversed = 0;\n let gain = 0;\n let loss = 0;\n let previous: ElevationProfileComponent | null = null;\n const points = [];\n steps.forEach(step => {\n // Support for old REST response data (in step.elevation)\n const stepElevationProfile =\n step.elevationProfile ||\n (Array.isArray(step.elevation) &&\n step.elevation?.map<ElevationProfileComponent>(\n mapOldElevationComponentToNew\n ));\n\n if (!stepElevationProfile || stepElevationProfile.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < stepElevationProfile.length; i++) {\n const elev = stepElevationProfile[i];\n if (previous) {\n const diff = (elev.elevation - previous.elevation) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.distance !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.elevation * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.distance, elev.elevation]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (\n i === stepElevationProfile.length - 1 &&\n elev.distance !== step.distance\n ) {\n // points.push([traversed + step.distance, elev.second])\n }\n previous = elev;\n }\n traversed += step.distance;\n });\n return { maxElev, minElev, points, traversed, gain, loss };\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {string} text The text to be rendered.\n * @param {string} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, font = \"22px Arial\"): number {\n // Create custom type for function including reused canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // reuse canvas object for better performance\n const canvas =\n (getTextWidth as GetTextWidth).canvas ||\n ((getTextWidth as GetTextWidth).canvas = document.createElement(\"canvas\"));\n const context = canvas.getContext(\"2d\");\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n}\n\n/**\n * Get the configured company object for the given network string if the company\n * has been defined in the provided companies array config.\n */\nexport function getCompanyForNetwork(\n networkString: string,\n companies: Company[] = []\n): Company {\n const company = companies.find(co => co.id === networkString);\n if (!company) {\n console.warn(\n `No company found in config.yml that matches rented vehicle network: ${networkString}`,\n companies\n );\n }\n return company;\n}\n\n/**\n * Get a string label to display from a list of vehicle rental networks.\n *\n * @param {Array<string>} networks A list of network ids.\n * @param {Array<object>} [companies=[]] An optional list of the companies config.\n * @return {string} A label for use in presentation on a website.\n */\nexport function getCompaniesLabelFromNetworks(\n networks: string[] | string,\n companies: Company[] = []\n): string {\n return (Array.isArray(networks) ? networks : [networks])\n .map(network => getCompanyForNetwork(network, companies))\n .filter(co => !!co)\n .map(co => co.label)\n .join(\"/\");\n}\n\nexport function getTNCLocation(leg: Leg, type: string): string {\n const location = leg[type];\n return `${location.lat.toFixed(5)},${location.lon.toFixed(5)}`;\n}\n\nexport function calculatePhysicalActivity(\n itinerary: ItineraryOnlyLegsRequired\n): {\n bikeDuration: number;\n caloriesBurned: number;\n walkDuration: number;\n} {\n let walkDuration = 0;\n let bikeDuration = 0;\n itinerary.legs.forEach(leg => {\n if (leg.mode.startsWith(\"WALK\")) walkDuration += leg.duration;\n if (leg.mode.startsWith(\"BICYCLE\")) bikeDuration += leg.duration;\n });\n const caloriesBurned =\n (walkDuration / 3600) * 280 + (bikeDuration / 3600) * 290;\n return {\n bikeDuration,\n caloriesBurned,\n walkDuration\n };\n}\n\n/**\n * For an itinerary, calculates the TNC fares and returns an object with\n * these values and currency info.\n * It is assumed that the same currency is used for all TNC legs.\n */\nexport function calculateTncFares(\n itinerary: ItineraryOnlyLegsRequired\n): TncFare {\n return itinerary.legs\n .filter(leg => leg.mode === \"CAR\" && leg.rideHailingEstimate)\n .reduce(\n ({ maxTNCFare, minTNCFare }, { rideHailingEstimate }) => {\n const { minPrice, maxPrice } = rideHailingEstimate;\n return {\n // Assumes a single currency for entire itinerary.\n currencyCode: minPrice.currency.code,\n maxTNCFare: maxTNCFare + maxPrice.amount,\n minTNCFare: minTNCFare + minPrice.amount\n };\n },\n {\n currencyCode: null,\n maxTNCFare: 0,\n minTNCFare: 0\n }\n );\n}\n\n/**\n * Sources:\n * - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf\n * - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey\n * - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx\n * Other values extrapolated.\n */\nconst CARBON_INTENSITY_DEFAULTS = {\n walk: 0.026,\n bicycle: 0.017,\n car: 0.162,\n tram: 0.066,\n trolleybus: 0.066,\n subway: 0.066,\n rail: 0.066,\n bus: 0.09,\n ferry: 0.082,\n cable_car: 0.021,\n gondola: 0.021,\n funicular: 0.066,\n transit: 0.066,\n leg_switch: 0,\n airplane: 0.382,\n micromobility: 0.095\n};\n\n/**\n * @param {itinerary} itinerary OTP trip itinierary, only legs is required.\n * @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter\n * @param {units} units units to be used in return value\n * @return Amount of carbon in chosen unit\n */\nexport function calculateEmissions(\n // This type makes all the properties from Itinerary optional except legs.\n itinerary: ItineraryOnlyLegsRequired,\n carbonIntensity: Record<string, number> = {},\n units?: MassUnitOption\n): number {\n // Apply defaults for any values that we don't have.\n const carbonIntensityWithDefaults = {\n ...CARBON_INTENSITY_DEFAULTS,\n ...carbonIntensity\n };\n\n // Distance is in meters, totalCarbon is in grams\n const totalCarbon =\n itinerary?.legs?.reduce((total, leg) => {\n return (\n (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] ||\n 0) + total\n );\n }, 0) || 0;\n\n switch (units) {\n case \"ounce\":\n return totalCarbon / 28.35;\n case \"kilogram\":\n return totalCarbon / 1000;\n case \"pound\":\n return totalCarbon / 454;\n case \"gram\":\n default:\n return totalCarbon;\n }\n}\n\n/**\n * Returns the user-facing stop id to display for a stop or place, using the following priority:\n * 1. stop code,\n * 2. stop id without the agency id portion, if stop id contains an agency portion,\n * 3. stop id, whether null or not (this is the fallback case).\n */\nexport function getDisplayedStopId(placeOrStop: Place | Stop): string {\n let stopId;\n let stopCode;\n if (\"stopId\" in placeOrStop) {\n ({ stopCode, stopId } = placeOrStop);\n } else if (\"id\" in placeOrStop) {\n ({ code: stopCode, id: stopId } = placeOrStop);\n }\n return stopCode || stopId?.split(\":\")[1] || stopId;\n}\n\n/**\n * Extracts useful data from the fare products on a leg, such as the leg cost and transfer info.\n * @param leg Leg with fare products (must have used getLegsWithFares)\n * @param category Rider category\n * @param container Fare container (cash, electronic)\n * @returns Object containing price as well as the transfer discount amount, if a transfer was used.\n */\nexport function getLegCost(\n leg: Leg,\n mediumId: string | null,\n riderCategoryId: string | null\n): {\n price?: Money;\n transferAmount?: Money | undefined;\n productUseId?: string;\n} {\n if (!leg.fareProducts) return { price: undefined };\n const relevantFareProducts = leg.fareProducts.filter(({ product }) => {\n // riderCategory and medium can be specifically defined as null to handle\n // generic GTFS based fares from OTP when there is no fare model\n return (\n (product.riderCategory === null ? null : product.riderCategory.id) ===\n riderCategoryId &&\n (product.medium === null ? null : product.medium.id) === mediumId\n );\n });\n\n // Custom fare models return \"rideCost\", generic GTFS fares return \"regular\"\n const totalCostProduct = relevantFareProducts.find(\n fp => fp.product.name === \"rideCost\" || fp.product.name === \"regular\"\n );\n const transferFareProduct = relevantFareProducts.find(\n fp => fp.product.name === \"transfer\"\n );\n\n return {\n price: totalCostProduct?.product.price,\n transferAmount: transferFareProduct?.product.price,\n productUseId: totalCostProduct?.id\n };\n}\n\n/**\n * Returns the total itinerary cost for a given set of legs.\n * @param legs Itinerary legs with fare products (must have used getLegsWithFares)\n * @param category Rider category (youth, regular, senior)\n * @param container Fare container (cash, electronic)\n * @returns Money object for the total itinerary cost.\n */\nexport function getItineraryCost(\n legs: Leg[],\n mediumId: string | null,\n riderCategoryId: string | null\n): Money | undefined {\n const legCosts = legs\n // Only legs with fares (no walking legs)\n .filter(leg => leg.fareProducts?.length > 0)\n // Get the leg cost object of each leg\n .map(leg => getLegCost(leg, mediumId, riderCategoryId))\n .filter(cost => cost.price !== undefined)\n // Filter out duplicate use IDs\n // One fare product can be used on multiple legs,\n // and we don't want to count it more than once.\n .reduce<{ productUseId: string; price: Money }[]>((prev, cur) => {\n if (!prev.some(p => p.productUseId === cur.productUseId)) {\n prev.push({ productUseId: cur.productUseId, price: cur.price });\n }\n return prev;\n }, [])\n .map(productUse => productUse.price);\n\n if (legCosts.length === 0) return undefined;\n // Calculate the total\n return legCosts.reduce<Money>(\n (prev, cur) => ({\n amount: prev.amount + cur?.amount || 0,\n currency: prev.currency ?? cur?.currency\n }),\n { amount: 0, currency: null }\n );\n}\n\nconst pickupDropoffTypeToOtp1 = otp2Type => {\n switch (otp2Type) {\n case \"COORDINATE_WITH_DRIVER\":\n return \"coordinateWithDriver\";\n case \"CALL_AGENCY\":\n return \"mustPhone\";\n case \"SCHEDULED\":\n return \"scheduled\";\n case \"NONE\":\n return \"none\";\n default:\n return null;\n }\n};\n\nexport const convertGraphQLResponseToLegacy = (leg: any): any => ({\n ...leg,\n agencyBrandingUrl: leg.agency?.url,\n agencyId: leg.agency?.id,\n agencyName: leg.agency?.name,\n agencyUrl: leg.agency?.url,\n alightRule: pickupDropoffTypeToOtp1(leg.dropoffType),\n boardRule: pickupDropoffTypeToOtp1(leg.pickupType),\n dropOffBookingInfo: {\n latestBookingTime: leg.dropOffBookingInfo\n },\n from: {\n ...leg.from,\n stopCode: leg.from.stop?.code,\n stopId: leg.from.stop?.gtfsId\n },\n route: leg.route?.shortName,\n routeColor: leg.route?.color,\n routeId: leg.route?.gtfsId,\n routeLongName: leg.route?.longName,\n routeShortName: leg.route?.shortName,\n routeTextColor: leg.route?.textColor,\n to: {\n ...leg.to,\n stopCode: leg.to.stop?.code,\n stopId: leg.to.stop?.gtfsId\n },\n tripHeadsign: leg.trip?.tripHeadsign,\n tripId: leg.trip?.gtfsId\n});\n\n/** Extracts the route number for a leg returned from OTP1 or OTP2. */\nexport const getLegRouteShortName = (\n leg: Pick<Leg, \"route\" | \"routeShortName\">\n): string | null => {\n const { route, routeShortName } = leg;\n // typeof route === \"object\" denotes newer OTP2 responses. routeShortName and route as string is OTP1.\n return typeof route === \"object\"\n ? route?.shortName\n : routeShortName || (route as string);\n};\n\n/** Extract the route long name for a leg returned from OTP1 or OTP2. */\nexport const getLegRouteLongName = (\n leg: Pick<Leg, \"route\" | \"routeLongName\">\n): string | null => {\n const { route, routeLongName } = leg;\n // typeof route === \"object\" denotes newer OTP2 responses. routeLongName is OTP1.\n return typeof route === \"object\" ? route?.longName : routeLongName;\n};\n\n/**\n * Returns the route short name, or the route long name if no short name is provided.\n * This is happens with Seattle area streetcars and ferries.\n */\nexport const getLegRouteName = (\n leg: Pick<Leg, \"route\" | \"routeLongName\" | \"routeShortName\">\n): string => {\n return getLegRouteShortName(leg) || getLegRouteLongName(leg);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"itinerary.js","names":["_polyline","_interopRequireDefault","require","_along","transitModes","exports","getTransitModes","config","modes","map","tm","mode","isTransitLeg","leg","transitLeg","isTransit","includes","isReservationRequired","boardRule","alightRule","isCoordinationRequired","containsGeometry","place","_place$stop","_place$stop2","stop","geometries","undefined","endsWithGeometry","to","startsWithGeometry","from","legContainsGeometry","isAdvanceBookingRequired","info","_info$latestBookingTi","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","isFlex","pickupBookingInfo","isRideshareLeg","_leg$rideHailingEstim","rideHailingEstimate","provider","id","isWalk","isBicycle","isBicycleRent","isCar","startsWith","isMicromobility","isAccessMode","hasTransit","modesStr","split","some","hasCar","hasBike","hasMicromobility","hasHail","indexOf","hasRental","getMapColor","get","toSentenceCase","str","String","charAt","toUpperCase","substr","toLowerCase","getCompanyFromLeg","rentedBike","rentedCar","rentedVehicle","networks","rentalVehicle","network","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","polyline","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","legLocationAtDistance","distance","line","pt","turfAlong","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","mapOldElevationComponentToNew","oldElev","first","elevation","second","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","_step$elevation","stepElevationProfile","elevationProfile","Array","isArray","elev","diff","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","company","find","co","getCompaniesLabelFromNetworks","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","calculateTncFares","reduce","maxTNCFare","minTNCFare","minPrice","maxPrice","currencyCode","currency","code","amount","CARBON_INTENSITY_DEFAULTS","walk","bicycle","car","tram","trolleybus","subway","rail","bus","ferry","cable_car","gondola","funicular","transit","leg_switch","airplane","micromobility","calculateEmissions","carbonIntensity","_itinerary$legs","carbonIntensityWithDefaults","totalCarbon","total","getDisplayedStopId","placeOrStop","_stopId","stopId","stopCode","getLegCost","mediumId","riderCategoryId","fareProducts","price","relevantFareProducts","product","riderCategory","medium","totalCostProduct","fp","name","transferFareProduct","transferAmount","productUseId","getItineraryCost","legCosts","_leg$fareProducts","cost","prev","cur","p","productUse","_prev$currency","pickupDropoffTypeToOtp1","otp2Type","convertGraphQLResponseToLegacy","_leg$agency","_leg$agency2","_leg$agency3","_leg$agency4","_leg$from$stop","_leg$from$stop2","_leg$route","_leg$route2","_leg$route3","_leg$route4","_leg$route5","_leg$route6","_leg$to$stop","_leg$to$stop2","_leg$trip","_leg$trip2","agencyBrandingUrl","agency","url","agencyId","agencyName","agencyUrl","dropoffType","pickupType","gtfsId","route","shortName","routeColor","color","routeId","routeLongName","longName","routeShortName","routeTextColor","textColor","tripHeadsign","trip","tripId","getLegRouteShortName","getLegRouteLongName","getLegRouteName"],"sources":["../src/itinerary.ts"],"sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n ElevationProfileComponent,\n FlexBookingInfo,\n ItineraryOnlyLegsRequired,\n LatLngArray,\n Leg,\n MassUnitOption,\n Money,\n Place,\n Step,\n Stop,\n TncFare\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\n \"TROLLEYBUS\",\n \"BUS\",\n \"SUBWAY\",\n \"FERRY\",\n \"RAIL\",\n \"GONDOLA\"\n];\n\n/**\n * @param {config} config OTP-RR configuration object\n * @return {Array} List of all transit modes defined in config; otherwise default mode list\n */\n\nexport function getTransitModes(config: Config): string[] {\n if (!config || !config.modes || !config.modes.transitModes)\n return transitModes;\n\n return config.modes.transitModes.map(tm =>\n typeof tm !== \"string\" ? tm.mode : tm\n );\n}\n\nexport function isTransitLeg(leg: Leg): boolean {\n return leg.transitLeg;\n}\n\nexport function isTransit(mode: string): boolean {\n return transitModes.includes(mode) || mode === \"TRANSIT\";\n}\n\n/**\n * Returns true if the leg pickup rules enabled which require\n * calling ahead for the service to run. \"mustPhone\" is the only\n * property which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg?.boardRule === \"mustPhone\" || leg?.alightRule === \"mustPhone\";\n}\n/**\n * Returns true if a user must ask the driver to let the user off\n * or if the user must flag the driver down for pickup.\n * \"coordinateWithDriver\" in board/alight rule encodes this info.\n */\nexport function isCoordinationRequired(leg: Leg): boolean {\n return (\n leg?.boardRule === \"coordinateWithDriver\" ||\n leg?.alightRule === \"coordinateWithDriver\"\n );\n}\n\nexport function containsGeometry(place: Place): boolean {\n return (\n place?.stop?.geometries !== null && place?.stop?.geometries !== undefined\n );\n}\nexport function endsWithGeometry(leg: Leg): boolean {\n return containsGeometry(leg?.to);\n}\nexport function startsWithGeometry(leg: Leg): boolean {\n return containsGeometry(leg?.from);\n}\nexport function legContainsGeometry(leg: Leg): boolean {\n return endsWithGeometry(leg) || startsWithGeometry(leg);\n}\nexport function isAdvanceBookingRequired(info: FlexBookingInfo): boolean {\n return info?.latestBookingTime?.daysPrior > 0;\n}\nexport function legDropoffRequiresAdvanceBooking(leg: Leg): boolean {\n return isAdvanceBookingRequired(leg?.dropOffBookingInfo);\n}\n\n/**\n * The two rules checked by the above two functions are the only values\n * returned by OTP when a leg is a flex leg.\n */\nexport function isFlex(leg: Leg): boolean {\n return (\n isReservationRequired(leg) ||\n isCoordinationRequired(leg) ||\n legDropoffRequiresAdvanceBooking(leg) ||\n isAdvanceBookingRequired(leg?.pickupBookingInfo) ||\n legContainsGeometry(leg)\n );\n}\n\n// alpha-only comment\nexport function isRideshareLeg(leg: Leg): boolean {\n return !!leg.rideHailingEstimate?.provider?.id;\n}\n\nexport function isWalk(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"WALK\";\n}\n\nexport function isBicycle(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE\";\n}\n\nexport function isBicycleRent(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE_RENT\";\n}\n\nexport function isCar(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"CAR\");\n}\n\nexport function isMicromobility(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"MICROMOBILITY\") || mode.startsWith(\"SCOOTER\");\n}\n\nexport function isAccessMode(mode: string): boolean {\n return (\n isWalk(mode) ||\n isBicycle(mode) ||\n isBicycleRent(mode) ||\n isCar(mode) ||\n isMicromobility(mode)\n );\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are transit modes\n */\nexport function hasTransit(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isTransit(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are car-based modes\n */\nexport function hasCar(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isCar(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are bicycle-based modes\n */\nexport function hasBike(modesStr: string): boolean {\n return modesStr\n .split(\",\")\n .some(mode => isBicycle(mode) || isBicycleRent(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are micromobility-based modes\n */\nexport function hasMicromobility(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isMicromobility(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a hailing mode\n */\nexport function hasHail(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_HAIL\") > -1);\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a rental mode\n */\nexport function hasRental(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_RENT\") > -1);\n}\n\nexport function getMapColor(mode: string): string {\n mode = mode || this.get(\"mode\");\n if (mode === \"WALK\") return \"#444\";\n if (mode === \"BICYCLE\") return \"#0073e5\";\n if (mode === \"SUBWAY\") return \"#e60000\";\n if (mode === \"RAIL\") return \"#b00\";\n if (mode === \"BUS\") return \"#080\";\n if (mode === \"TROLLEYBUS\") return \"#080\";\n if (mode === \"TRAM\") return \"#800\";\n if (mode === \"FERRY\") return \"#008\";\n if (mode === \"CAR\") return \"#444\";\n if (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") return \"#f5a729\";\n return \"#aaa\";\n}\n\nexport function toSentenceCase(str: string): string {\n if (str == null) {\n return \"\";\n }\n str = String(str);\n return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();\n}\n\n/**\n * Derive the company string based on mode and network associated with leg.\n */\nexport function getCompanyFromLeg(leg: Leg): string {\n if (!leg) return null;\n const {\n from,\n mode,\n rentedBike,\n rentedCar,\n rentedVehicle,\n rideHailingEstimate\n } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && rideHailingEstimate) {\n return rideHailingEstimate.provider.id;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\n }\n if (from.rentalVehicle) {\n return from.rentalVehicle.network;\n }\n if (\n (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") &&\n rentedVehicle &&\n from.networks\n ) {\n return from.networks[0];\n }\n return null;\n}\n\nexport function getItineraryBounds(\n itinerary: ItineraryOnlyLegsRequired\n): LatLngArray[] {\n let coords = [];\n itinerary.legs.forEach(leg => {\n const legCoords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map((c: number[]) => [c[1], c[0]]);\n coords = [...coords, ...legCoords];\n });\n return coords;\n}\n\n/**\n * Return a coords object that encloses the given leg's geometry.\n */\nexport function getLegBounds(leg: Leg): number[][] {\n const coords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map(c => [c[1], c[0]]);\n\n // in certain cases, there might be zero-length coordinates in the leg\n // geometry. In these cases, build us an array of coordinates using the from\n // and to data of the leg.\n if (coords.length === 0) {\n coords.push([leg.from.lat, leg.from.lon], [leg.to.lat, leg.to.lon]);\n }\n return coords;\n}\n\n/* Returns an interpolated lat-lon at a specified distance along a leg */\n\nexport function legLocationAtDistance(leg: Leg, distance: number): number[] {\n if (!leg.legGeometry) return null;\n\n try {\n const line = polyline.toGeoJSON(leg.legGeometry.points);\n const pt = turfAlong(line, distance, { units: \"meters\" });\n if (pt && pt.geometry && pt.geometry.coordinates) {\n return [pt.geometry.coordinates[1], pt.geometry.coordinates[0]];\n }\n } catch (e) {\n // FIXME handle error!\n }\n\n return null;\n}\n\n/* Returns an interpolated elevation at a specified distance along a leg */\n\nexport function legElevationAtDistance(\n points: number[][],\n distance: number\n): number {\n // Iterate through the combined elevation profile\n let traversed = 0;\n // If first point distance is not zero, insert starting point at zero with\n // null elevation. Encountering this value should trigger the warning below.\n if (points[0][0] > 0) {\n points.unshift([0, null]);\n }\n for (let i = 1; i < points.length; i++) {\n const start = points[i - 1];\n const elevDistanceSpan = points[i][0] - start[0];\n if (distance >= traversed && distance <= traversed + elevDistanceSpan) {\n // Distance falls within this point and the previous one;\n // compute & return interpolated elevation value\n if (start[1] === null) {\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n }\n const pct = (distance - traversed) / elevDistanceSpan;\n const elevSpan = points[i][1] - start[1];\n return start[1] + elevSpan * pct;\n }\n traversed += elevDistanceSpan;\n }\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n}\n\nexport function mapOldElevationComponentToNew(oldElev: {\n first: number;\n second: number;\n}): ElevationProfileComponent {\n return {\n distance: oldElev.first,\n elevation: oldElev.second\n };\n}\n\n// Iterate through the steps, building the array of elevation points and\n// keeping track of the minimum and maximum elevations reached\nexport function getElevationProfile(\n steps: Step[],\n unitConversion = 1\n): ElevationProfile {\n let minElev = 100000;\n let maxElev = -100000;\n let traversed = 0;\n let gain = 0;\n let loss = 0;\n let previous: ElevationProfileComponent | null = null;\n const points = [];\n steps.forEach(step => {\n // Support for old REST response data (in step.elevation)\n const stepElevationProfile =\n step.elevationProfile ||\n (Array.isArray(step.elevation) &&\n step.elevation?.map<ElevationProfileComponent>(\n mapOldElevationComponentToNew\n ));\n\n if (!stepElevationProfile || stepElevationProfile.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < stepElevationProfile.length; i++) {\n const elev = stepElevationProfile[i];\n if (previous) {\n const diff = (elev.elevation - previous.elevation) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.distance !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.elevation * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.distance, elev.elevation]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (\n i === stepElevationProfile.length - 1 &&\n elev.distance !== step.distance\n ) {\n // points.push([traversed + step.distance, elev.second])\n }\n previous = elev;\n }\n traversed += step.distance;\n });\n return { maxElev, minElev, points, traversed, gain, loss };\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {string} text The text to be rendered.\n * @param {string} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, font = \"22px Arial\"): number {\n // Create custom type for function including reused canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // reuse canvas object for better performance\n const canvas =\n (getTextWidth as GetTextWidth).canvas ||\n ((getTextWidth as GetTextWidth).canvas = document.createElement(\"canvas\"));\n const context = canvas.getContext(\"2d\");\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n}\n\n/**\n * Get the configured company object for the given network string if the company\n * has been defined in the provided companies array config.\n */\nexport function getCompanyForNetwork(\n networkString: string,\n companies: Company[] = []\n): Company {\n const company = companies.find(co => co.id === networkString);\n if (!company) {\n console.warn(\n `No company found in config.yml that matches rented vehicle network: ${networkString}`,\n companies\n );\n }\n return company;\n}\n\n/**\n * Get a string label to display from a list of vehicle rental networks.\n *\n * @param {Array<string>} networks A list of network ids.\n * @param {Array<object>} [companies=[]] An optional list of the companies config.\n * @return {string} A label for use in presentation on a website.\n */\nexport function getCompaniesLabelFromNetworks(\n networks: string[] | string,\n companies: Company[] = []\n): string {\n return (Array.isArray(networks) ? networks : [networks])\n .map(network => getCompanyForNetwork(network, companies))\n .filter(co => !!co)\n .map(co => co.label)\n .join(\"/\");\n}\n\nexport function getTNCLocation(leg: Leg, type: string): string {\n const location = leg[type];\n return `${location.lat.toFixed(5)},${location.lon.toFixed(5)}`;\n}\n\nexport function calculatePhysicalActivity(\n itinerary: ItineraryOnlyLegsRequired\n): {\n bikeDuration: number;\n caloriesBurned: number;\n walkDuration: number;\n} {\n let walkDuration = 0;\n let bikeDuration = 0;\n itinerary.legs.forEach(leg => {\n if (leg.mode.startsWith(\"WALK\")) walkDuration += leg.duration;\n if (leg.mode.startsWith(\"BICYCLE\")) bikeDuration += leg.duration;\n });\n const caloriesBurned =\n (walkDuration / 3600) * 280 + (bikeDuration / 3600) * 290;\n return {\n bikeDuration,\n caloriesBurned,\n walkDuration\n };\n}\n\n/**\n * For an itinerary, calculates the TNC fares and returns an object with\n * these values and currency info.\n * It is assumed that the same currency is used for all TNC legs.\n */\nexport function calculateTncFares(\n itinerary: ItineraryOnlyLegsRequired\n): TncFare {\n return itinerary.legs\n .filter(leg => leg.mode === \"CAR\" && leg.rideHailingEstimate)\n .reduce(\n ({ maxTNCFare, minTNCFare }, { rideHailingEstimate }) => {\n const { minPrice, maxPrice } = rideHailingEstimate;\n return {\n // Assumes a single currency for entire itinerary.\n currencyCode: minPrice.currency.code,\n maxTNCFare: maxTNCFare + maxPrice.amount,\n minTNCFare: minTNCFare + minPrice.amount\n };\n },\n {\n currencyCode: null,\n maxTNCFare: 0,\n minTNCFare: 0\n }\n );\n}\n\n/**\n * Sources:\n * - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf\n * - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey\n * - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx\n * Other values extrapolated.\n */\nconst CARBON_INTENSITY_DEFAULTS = {\n walk: 0.026,\n bicycle: 0.017,\n car: 0.162,\n tram: 0.066,\n trolleybus: 0.066,\n subway: 0.066,\n rail: 0.066,\n bus: 0.09,\n ferry: 0.082,\n cable_car: 0.021,\n gondola: 0.021,\n funicular: 0.066,\n transit: 0.066,\n leg_switch: 0,\n airplane: 0.382,\n micromobility: 0.095\n};\n\n/**\n * @param {itinerary} itinerary OTP trip itinierary, only legs is required.\n * @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter\n * @param {units} units units to be used in return value\n * @return Amount of carbon in chosen unit\n */\nexport function calculateEmissions(\n // This type makes all the properties from Itinerary optional except legs.\n itinerary: ItineraryOnlyLegsRequired,\n carbonIntensity: Record<string, number> = {},\n units?: MassUnitOption\n): number {\n // Apply defaults for any values that we don't have.\n const carbonIntensityWithDefaults = {\n ...CARBON_INTENSITY_DEFAULTS,\n ...carbonIntensity\n };\n\n // Distance is in meters, totalCarbon is in grams\n const totalCarbon =\n itinerary?.legs?.reduce((total, leg) => {\n return (\n (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] ||\n 0) + total\n );\n }, 0) || 0;\n\n switch (units) {\n case \"ounce\":\n return totalCarbon / 28.35;\n case \"kilogram\":\n return totalCarbon / 1000;\n case \"pound\":\n return totalCarbon / 454;\n case \"gram\":\n default:\n return totalCarbon;\n }\n}\n\n/**\n * Returns the user-facing stop id to display for a stop or place, using the following priority:\n * 1. stop code,\n * 2. stop id without the agency id portion, if stop id contains an agency portion,\n * 3. stop id, whether null or not (this is the fallback case).\n */\nexport function getDisplayedStopId(placeOrStop: Place | Stop): string {\n let stopId;\n let stopCode;\n if (\"stopId\" in placeOrStop) {\n ({ stopCode, stopId } = placeOrStop);\n } else if (\"id\" in placeOrStop) {\n ({ code: stopCode, id: stopId } = placeOrStop);\n }\n return stopCode || stopId?.split(\":\")[1] || stopId;\n}\n\n/**\n * Extracts useful data from the fare products on a leg, such as the leg cost and transfer info.\n * @param leg Leg with fare products (must have used getLegsWithFares)\n * @param category Rider category\n * @param container Fare container (cash, electronic)\n * @returns Object containing price as well as the transfer discount amount, if a transfer was used.\n */\nexport function getLegCost(\n leg: Leg,\n mediumId: string | null,\n riderCategoryId: string | null\n): {\n price?: Money;\n transferAmount?: Money | undefined;\n productUseId?: string;\n} {\n if (!leg.fareProducts) return { price: undefined };\n const relevantFareProducts = leg.fareProducts.filter(({ product }) => {\n // riderCategory and medium can be specifically defined as null to handle\n // generic GTFS based fares from OTP when there is no fare model\n return (\n (product.riderCategory === null ? null : product.riderCategory.id) ===\n riderCategoryId &&\n (product.medium === null ? null : product.medium.id) === mediumId\n );\n });\n\n // Custom fare models return \"rideCost\", generic GTFS fares return \"regular\"\n const totalCostProduct = relevantFareProducts.find(\n fp => fp.product.name === \"rideCost\" || fp.product.name === \"regular\"\n );\n const transferFareProduct = relevantFareProducts.find(\n fp => fp.product.name === \"transfer\"\n );\n\n return {\n price: totalCostProduct?.product.price,\n transferAmount: transferFareProduct?.product.price,\n productUseId: totalCostProduct?.id\n };\n}\n\n/**\n * Returns the total itinerary cost for a given set of legs.\n * @param legs Itinerary legs with fare products (must have used getLegsWithFares)\n * @param category Rider category (youth, regular, senior)\n * @param container Fare container (cash, electronic)\n * @returns Money object for the total itinerary cost.\n */\nexport function getItineraryCost(\n legs: Leg[],\n mediumId: string | null,\n riderCategoryId: string | null\n): Money | undefined {\n const legCosts = legs\n // Only legs with fares (no walking legs)\n .filter(leg => leg.fareProducts?.length > 0)\n // Get the leg cost object of each leg\n .map(leg => getLegCost(leg, mediumId, riderCategoryId))\n .filter(cost => cost.price !== undefined)\n // Filter out duplicate use IDs\n // One fare product can be used on multiple legs,\n // and we don't want to count it more than once.\n .reduce<{ productUseId: string; price: Money }[]>((prev, cur) => {\n if (!prev.some(p => p.productUseId === cur.productUseId)) {\n prev.push({ productUseId: cur.productUseId, price: cur.price });\n }\n return prev;\n }, [])\n .map(productUse => productUse.price);\n\n if (legCosts.length === 0) return undefined;\n // Calculate the total\n return legCosts.reduce<Money>(\n (prev, cur) => ({\n amount: prev.amount + cur?.amount || 0,\n currency: prev.currency ?? cur?.currency\n }),\n { amount: 0, currency: null }\n );\n}\n\nconst pickupDropoffTypeToOtp1 = otp2Type => {\n switch (otp2Type) {\n case \"COORDINATE_WITH_DRIVER\":\n return \"coordinateWithDriver\";\n case \"CALL_AGENCY\":\n return \"mustPhone\";\n case \"SCHEDULED\":\n return \"scheduled\";\n case \"NONE\":\n return \"none\";\n default:\n return null;\n }\n};\n\nexport const convertGraphQLResponseToLegacy = (leg: any): any => ({\n ...leg,\n agencyBrandingUrl: leg.agency?.url,\n agencyId: leg.agency?.id,\n agencyName: leg.agency?.name,\n agencyUrl: leg.agency?.url,\n alightRule: pickupDropoffTypeToOtp1(leg.dropoffType),\n boardRule: pickupDropoffTypeToOtp1(leg.pickupType),\n dropOffBookingInfo: {\n latestBookingTime: leg.dropOffBookingInfo\n },\n from: {\n ...leg.from,\n stopCode: leg.from.stop?.code,\n stopId: leg.from.stop?.gtfsId\n },\n route: leg.route?.shortName,\n routeColor: leg.route?.color,\n routeId: leg.route?.gtfsId,\n routeLongName: leg.route?.longName,\n routeShortName: leg.route?.shortName,\n routeTextColor: leg.route?.textColor,\n to: {\n ...leg.to,\n stopCode: leg.to.stop?.code,\n stopId: leg.to.stop?.gtfsId\n },\n tripHeadsign: leg.trip?.tripHeadsign,\n tripId: leg.trip?.gtfsId\n});\n\n/** Extracts the route number for a leg returned from OTP1 or OTP2. */\nexport const getLegRouteShortName = (\n leg: Pick<Leg, \"route\" | \"routeShortName\">\n): string | null => {\n const { route, routeShortName } = leg;\n // typeof route === \"object\" denotes newer OTP2 responses. routeShortName and route as string is OTP1.\n return typeof route === \"object\"\n ? route?.shortName\n : routeShortName || (route as string);\n};\n\n/** Extract the route long name for a leg returned from OTP1 or OTP2. */\nexport const getLegRouteLongName = (\n leg: Pick<Leg, \"route\" | \"routeLongName\">\n): string | null => {\n const { route, routeLongName } = leg;\n // typeof route === \"object\" denotes newer OTP2 responses. routeLongName is OTP1.\n return typeof route === \"object\" ? route?.longName : routeLongName;\n};\n\n/**\n * Returns the route short name, or the route long name if no short name is provided.\n * This is happens with Seattle area streetcars and ferries.\n */\nexport const getLegRouteName = (\n leg: Pick<Leg, \"route\" | \"routeLongName\" | \"routeShortName\">\n): string => {\n return getLegRouteShortName(leg) || getLegRouteLongName(leg);\n};\n"],"mappings":"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","ignoreList":[]}
|
package/lib/profile.js
CHANGED
|
@@ -27,7 +27,7 @@ function filterProfileOptions(response) {
|
|
|
27
27
|
return response;
|
|
28
28
|
}
|
|
29
29
|
function locationString(str) {
|
|
30
|
-
return str
|
|
30
|
+
return str === null || str === void 0 ? void 0 : str.split(",")[0];
|
|
31
31
|
}
|
|
32
32
|
function accessToLeg(access, origin, destination) {
|
|
33
33
|
return {
|