@opentripplanner/core-utils 6.0.1-alpha.1 → 7.0.0-alpha.3

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.
Files changed (45) hide show
  1. package/esm/itinerary.js +74 -11
  2. package/esm/itinerary.js.map +1 -1
  3. package/esm/map.js +19 -16
  4. package/esm/map.js.map +1 -1
  5. package/esm/query.js +14 -11
  6. package/esm/query.js.map +1 -1
  7. package/esm/time.js +5 -56
  8. package/esm/time.js.map +1 -1
  9. package/lib/itinerary.d.ts +14 -7
  10. package/lib/itinerary.d.ts.map +1 -1
  11. package/lib/itinerary.js +79 -65
  12. package/lib/itinerary.js.map +1 -1
  13. package/lib/map.d.ts +3 -3
  14. package/lib/map.d.ts.map +1 -1
  15. package/lib/map.js +18 -32
  16. package/lib/map.js.map +1 -1
  17. package/lib/query.js +11 -15
  18. package/lib/query.js.map +1 -1
  19. package/lib/time.d.ts +1 -16
  20. package/lib/time.d.ts.map +1 -1
  21. package/lib/time.js +4 -72
  22. package/lib/time.js.map +1 -1
  23. package/package.json +6 -7
  24. package/src/__tests__/__snapshots__/itinerary.js.snap +2 -38
  25. package/src/__tests__/__snapshots__/time.js.snap +7 -13
  26. package/src/__tests__/itinerary.js +6 -29
  27. package/src/__tests__/time.js +7 -27
  28. package/src/itinerary.ts +72 -27
  29. package/src/map.ts +17 -22
  30. package/src/query.js +19 -16
  31. package/src/time.ts +11 -76
  32. package/tsconfig.tsbuildinfo +1294 -1311
  33. package/esm/deprecated-with-types.js +0 -47
  34. package/esm/deprecated-with-types.js.map +0 -1
  35. package/esm/deprecated.js +0 -325
  36. package/esm/deprecated.js.map +0 -1
  37. package/lib/deprecated-with-types.d.ts +0 -23
  38. package/lib/deprecated-with-types.d.ts.map +0 -1
  39. package/lib/deprecated-with-types.js +0 -61
  40. package/lib/deprecated-with-types.js.map +0 -1
  41. package/lib/deprecated.js +0 -355
  42. package/lib/deprecated.js.map +0 -1
  43. package/src/__tests__/__mocks__/multi-currency-itinerary.json +0 -1728
  44. package/src/deprecated-with-types.ts +0 -62
  45. package/src/deprecated.js +0 -334
package/esm/time.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/time.ts"],"names":["startOfDay","add","format","formatDuration","dateFnsFormatDuration","utcToZonedTime","formatTime","formatDurationWithSeconds","OTP_API_DATE_FORMAT","OTP_API_DATE_FORMAT_DATE_FNS","OTP_API_TIME_FORMAT","formatDurationLikeMoment","seconds","showSeconds","localize","enabled","code","hours","Math","floor","minutes","secondsLeftOver","specLookup","xHours","xMinutes","xSeconds","locale","formatDistance","spec","val","undefined","toHoursMinutesSeconds","getTimeFormat","config","dateTime","timeFormat","getDateFormat","dateFormat","getLongDateFormat","longDateFormat","offsetTime","ms","options","offset","formatSecondsAfterMidnight","time","Date","getUserTimezone","fallbackTimezone","process","env","NODE_ENV","TZ","Intl","DateTimeFormat","resolvedOptions","timeZone","getCurrentTime","timezone","now","getCurrentDate"],"mappings":"AACA,SACEA,UADF,EAEEC,GAFF,EAGEC,MAHF,EAIEC,cAAc,IAAIC,qBAJpB,QAKO,UALP;AAMA,SAASC,cAAT,QAA+B,aAA/B;AAEA;;AACA,SACEC,UADF,EAEEC,yBAFF,EAGEJ,cAHF,QAIO,yBAJP;AAMA,SAASG,UAAT,EAAqBH,cAArB,EAAqCI,yBAArC,G,CAEA;AACA;;AACA,OAAO,IAAMC,mBAAmB,GAAG,YAA5B,C,CACP;AACA;;AACA,OAAO,IAAMC,4BAA4B,GAAG,YAArC;AACP,OAAO,IAAMC,mBAAmB,GAAG,OAA5B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,wBAAT,CACLC,OADK,EAELC,WAFK,EAOG;AAAA,MAJRC,QAIQ,uEAJuC;AAC7CC,IAAAA,OAAO,EAAE,IADoC;AAE7CC,IAAAA,IAAI,EAAE;AAFuC,GAIvC;;AACR;AACA,MAAK,CAACH,WAAD,IAAgBD,OAAO,GAAG,EAA3B,IAAkCA,OAAO,KAAK,CAAlD,EAAqD;AACnD,WAAO,OAAP;AACD;;AAED,MAAMK,KAAK,GAAGC,IAAI,CAACC,KAAL,CAAWP,OAAO,GAAG,IAArB,CAAd;AACA,MAAMQ,OAAO,GAAGF,IAAI,CAACC,KAAL,CAAW,CAACP,OAAO,GAAGK,KAAK,GAAG,IAAnB,IAA2B,EAAtC,CAAhB;AACA,MAAMI,eAAe,GAAGR,WAAW,GAC/BD,OAAO,GAAGK,KAAK,GAAG,IAAlB,GAAyBG,OAAO,GAAG,EADJ,GAE/B,CAFJ;AAGA,MAAME,UAAU,GAAG;AACjBC,IAAAA,MAAM,EAAE,IADS;AAEjBC,IAAAA,QAAQ,EAAE,KAFO;AAGjBC,IAAAA,QAAQ,EAAE;AAHO,GAAnB;AAKA,MAAMC,MAAM,GAAGZ,QAAQ,GACnB;AACE;AACAE,IAAAA,IAAI,EAAE,CAAAF,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEE,IAAV,KAAkB,OAF1B;AAGEW,IAAAA,cAAc,EAAE,wBAACC,IAAD,EAAOC,GAAP,EAAe;AAC7B,uBAAUA,GAAV,cAAiBP,UAAU,CAACM,IAAD,CAA3B;AACD;AALH,GADmB,GAQnBE,SARJ;AAUA,SAAO1B,qBAAqB,CAC1B;AACEa,IAAAA,KAAK,EAALA,KADF;AAEEG,IAAAA,OAAO,EAAPA,OAFF;AAGER,IAAAA,OAAO,EAAES;AAHX,GAD0B,EAM1B;AACEnB,IAAAA,MAAM,EAAE,CAAC,OAAD,EAAU,SAAV,EAAqB,SAArB,CADV;AAEEwB,IAAAA,MAAM,EAANA;AAFF,GAN0B,CAA5B;AAWD;AAED;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASK,qBAAT,CAA+BnB,OAA/B,EAAwC;AAC7C,MAAMK,KAAK,GAAGC,IAAI,CAACC,KAAL,CAAWP,OAAO,GAAG,IAArB,CAAd;AACA,MAAMQ,OAAO,GAAGF,IAAI,CAACC,KAAL,CAAW,CAACP,OAAO,GAAGK,KAAK,GAAG,IAAnB,IAA2B,EAAtC,CAAhB;AACA,SAAO;AACLA,IAAAA,KAAK,EAALA,KADK;AAELG,IAAAA,OAAO,EAAPA,OAFK;AAGLR,IAAAA,OAAO,EAAEA,OAAO,GAAGK,KAAK,GAAG,IAAlB,GAAyBG,OAAO,GAAG;AAHvC,GAAP;AAKD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASY,aAAT,CAAuBC,MAAvB,EAA+C;AAAA;;AACpD,SAAO,CAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,gCAAAA,MAAM,CAAEC,QAAR,sEAAkBC,UAAlB,KAAgCzB,mBAAvC;AACD;AAED,OAAO,SAAS0B,aAAT,CAAuBH,MAAvB,EAA+C;AAAA;;AACpD,SAAO,CAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,iCAAAA,MAAM,CAAEC,QAAR,wEAAkBG,UAAlB,KAAgC7B,mBAAvC;AACD;AAED,OAAO,SAAS8B,iBAAT,CAA2BL,MAA3B,EAAmD;AAAA;;AACxD,SAAO,CAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,iCAAAA,MAAM,CAAEC,QAAR,wEAAkBK,cAAlB,KAAoC,aAA3C;AACD;AACD;AACA;AACA;AACA;;AACA,OAAO,SAASC,UAAT,CAAoBC,EAApB,EAAwBC,OAAxB,EAAiC;AACtC,SAAOD,EAAE,IAAI,CAAAC,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEC,MAAT,KAAmB,CAAvB,CAAT;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,0BAAT,CACLhC,OADK,EAELuB,UAFK,EAGG;AACR,MAAMU,IAAI,GAAG5C,GAAG,CAACD,UAAU,CAAC,IAAI8C,IAAJ,EAAD,CAAX,EAAyB;AAAElC,IAAAA,OAAO,EAAPA;AAAF,GAAzB,CAAhB;AACA,SAAOV,MAAM,CAAC2C,IAAD,EAAOV,UAAP,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASY,eAAT,GAAqE;AAAA;;AAAA,MAA5CC,gBAA4C,uEAAzB,eAAyB;AAC1E,MAAIC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,MAA7B,EAAqC,OAAOF,OAAO,CAACC,GAAR,CAAYE,EAAnB;AACrC,SAAO,UAAAC,IAAI,UAAJ,sCAAMC,cAAN,GAAuBC,eAAvB,GAAyCC,QAAzC,KAAqDR,gBAA5D;AACD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASS,cAAT,GAA8D;AAAA,MAAtCC,QAAsC,uEAA3BX,eAAe,EAAY;AACnE,SAAO7C,MAAM,CAACG,cAAc,CAACyC,IAAI,CAACa,GAAL,EAAD,EAAaD,QAAb,CAAf,EAAuChD,mBAAvC,CAAb;AACD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASkD,cAAT,GAA8D;AAAA,MAAtCF,QAAsC,uEAA3BX,eAAe,EAAY;AACnE,SAAO7C,MAAM,CACXG,cAAc,CAACyC,IAAI,CAACa,GAAL,EAAD,EAAaD,QAAb,CADH,EAEXjD,4BAFW,CAAb;AAID","sourcesContent":["import { Config } from \"@opentripplanner/types\";\nimport {\n startOfDay,\n add,\n format,\n formatDuration as dateFnsFormatDuration\n} from \"date-fns\";\nimport { utcToZonedTime } from \"date-fns-tz\";\n\n/* eslint-disable import/no-cycle */\nimport {\n formatTime,\n formatDurationWithSeconds,\n formatDuration\n} from \"./deprecated-with-types\";\n\nexport { formatTime, formatDuration, formatDurationWithSeconds };\n\n// special constants for making sure the following date format is always sent to\n// OTP regardless of whatever the user has configured as the display format\nexport const OTP_API_DATE_FORMAT = \"YYYY-MM-DD\";\n// Date-Fns uses a different string format than moment.js\n// see https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\nexport const OTP_API_DATE_FORMAT_DATE_FNS = \"yyyy-MM-dd\";\nexport const OTP_API_TIME_FORMAT = \"HH:mm\";\n\n/**\n * To ease the transition away from moment.js, this method uses date-fns to format durations\n * the way moment.js did.\n * @param {number} seconds The number of seconds to format\n * @param {boolean} showSeconds Whether to render seconds or not\n * @param {boolean} localize If true, will create output like moment.js using date-fns locale.\n * Otherwise, uses date-fns default\n * @returns Formatted duration\n */\nexport function formatDurationLikeMoment(\n seconds: number,\n showSeconds: boolean,\n localize: { enabled: boolean; code: string } = {\n enabled: true,\n code: \"en-US\"\n }\n): string {\n // date-fns doesn't do this automatically\n if ((!showSeconds && seconds < 60) || seconds === 0) {\n return \"0 min\";\n }\n\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds - hours * 3600) / 60);\n const secondsLeftOver = showSeconds\n ? seconds - hours * 3600 - minutes * 60\n : 0;\n const specLookup = {\n xHours: \"hr\",\n xMinutes: \"min\",\n xSeconds: \"sec\"\n };\n const locale = localize\n ? {\n // Maintain backwards compatibility when called with localize=true\n code: localize?.code || \"en-US\",\n formatDistance: (spec, val) => {\n return `${val} ${specLookup[spec]}`;\n }\n }\n : undefined;\n\n return dateFnsFormatDuration(\n {\n hours,\n minutes,\n seconds: secondsLeftOver\n },\n {\n format: [\"hours\", \"minutes\", \"seconds\"],\n locale\n }\n );\n}\n\n/**\n * Breaks up a duration in seconds into hours, minutes, and seconds.\n * @param {number} seconds The number of seconds to break up\n * @returns an object with fields with the corresponding, hours, minutes, seconds.\n */\nexport function toHoursMinutesSeconds(seconds) {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds - hours * 3600) / 60);\n return {\n hours,\n minutes,\n seconds: seconds - hours * 3600 - minutes * 60\n };\n}\n\n/**\n * @param {[type]} config the OTP config object found in store\n * @return {string} the config-defined time formatter or HH:mm (24-hr time)\n */\nexport function getTimeFormat(config: Config): string {\n return config?.dateTime?.timeFormat || OTP_API_TIME_FORMAT;\n}\n\nexport function getDateFormat(config: Config): string {\n return config?.dateTime?.dateFormat || OTP_API_DATE_FORMAT;\n}\n\nexport function getLongDateFormat(config: Config): string {\n return config?.dateTime?.longDateFormat || \"D MMMM YYYY\";\n}\n/**\n * Offsets a time according to the provided time options\n * and returns the result.\n */\nexport function offsetTime(ms, options) {\n return ms + (options?.offset || 0);\n}\n\n/**\n * Formats a seconds after midnight value for display in narrative\n * @param {number} seconds time since midnight in seconds\n * @param {string} timeFormat A valid date-fns time format\n * @return {string} formatted text representation\n */\nexport function formatSecondsAfterMidnight(\n seconds: number,\n timeFormat: string\n): string {\n const time = add(startOfDay(new Date()), { seconds });\n return format(time, timeFormat);\n}\n\n/**\n * Uses Intl.DateTimeFormat() api to get the user's time zone. In a test\n * environment, pulls timezone information from an env variable. Default to\n * GMT+0 if the Intl API is unavailable.\n */\nexport function getUserTimezone(fallbackTimezone = \"Etc/Greenwich\"): string {\n if (process.env.NODE_ENV === \"test\") return process.env.TZ;\n return Intl?.DateTimeFormat().resolvedOptions().timeZone || fallbackTimezone;\n}\n\n/**\n * Formats current time for use in OTP query\n * The conversion to the user's timezone is needed for testing purposes.\n */\nexport function getCurrentTime(timezone = getUserTimezone()): string {\n return format(utcToZonedTime(Date.now(), timezone), OTP_API_TIME_FORMAT);\n}\n\n/**\n * Formats current date for use in OTP query\n * The conversion to the user's timezone is needed for testing purposes.\n */\nexport function getCurrentDate(timezone = getUserTimezone()): string {\n return format(\n utcToZonedTime(Date.now(), timezone),\n OTP_API_DATE_FORMAT_DATE_FNS\n );\n}\n"],"file":"time.js"}
1
+ {"version":3,"sources":["../src/time.ts"],"names":["startOfDay","add","format","utcToZonedTime","OTP_API_DATE_FORMAT","OTP_API_DATE_FORMAT_DATE_FNS","OTP_API_TIME_FORMAT","toHoursMinutesSeconds","seconds","hours","Math","floor","minutes","getTimeFormat","config","dateTime","timeFormat","getDateFormat","dateFormat","getLongDateFormat","longDateFormat","offsetTime","ms","options","offset","formatSecondsAfterMidnight","time","Date","getUserTimezone","fallbackTimezone","process","env","NODE_ENV","TZ","Intl","DateTimeFormat","resolvedOptions","timeZone","getCurrentTime","timezone","now","getCurrentDate"],"mappings":"AACA,SAASA,UAAT,EAAqBC,GAArB,EAA0BC,MAA1B,QAAwC,UAAxC;AACA,SAASC,cAAT,QAA+B,aAA/B,C,CAEA;AACA;;AACA,OAAO,IAAMC,mBAAmB,GAAG,YAA5B,C,CACP;AACA;;AACA,OAAO,IAAMC,4BAA4B,GAAG,YAArC;AACP,OAAO,IAAMC,mBAAmB,GAAG,OAA5B;AAEP;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,qBAAT,CACLC,OADK,EAML;AACA,SAAO;AACLC,IAAAA,KAAK,EAAEC,IAAI,CAACC,KAAL,CAAWH,OAAO,GAAG,IAArB,CADF;AAELI,IAAAA,OAAO,EAAEF,IAAI,CAACC,KAAL,CAAWH,OAAO,GAAG,EAArB,IAA2B,EAF/B;AAGLA,IAAAA,OAAO,EAAEA,OAAO,GAAG;AAHd,GAAP;AAKD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASK,aAAT,CAAuBC,MAAvB,EAA+C;AAAA;;AACpD,SAAO,CAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,gCAAAA,MAAM,CAAEC,QAAR,sEAAkBC,UAAlB,KAAgCV,mBAAvC;AACD;AAED,OAAO,SAASW,aAAT,CAAuBH,MAAvB,EAA+C;AAAA;;AACpD,SAAO,CAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,iCAAAA,MAAM,CAAEC,QAAR,wEAAkBG,UAAlB,KAAgCd,mBAAvC;AACD;AAED,OAAO,SAASe,iBAAT,CAA2BL,MAA3B,EAAmD;AAAA;;AACxD,SAAO,CAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,iCAAAA,MAAM,CAAEC,QAAR,wEAAkBK,cAAlB,KAAoC,aAA3C;AACD;AACD;AACA;AACA;AACA;;AACA,OAAO,SAASC,UAAT,CAAoBC,EAApB,EAAwBC,OAAxB,EAAiC;AACtC,SAAOD,EAAE,IAAI,CAAAC,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEC,MAAT,KAAmB,CAAvB,CAAT;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,0BAAT,CACLjB,OADK,EAELQ,UAFK,EAGG;AACR,MAAMU,IAAI,GAAGzB,GAAG,CAACD,UAAU,CAAC,IAAI2B,IAAJ,EAAD,CAAX,EAAyB;AAAEnB,IAAAA,OAAO,EAAPA;AAAF,GAAzB,CAAhB;AACA,SAAON,MAAM,CAACwB,IAAD,EAAOV,UAAP,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASY,eAAT,GAAqE;AAAA;;AAAA,MAA5CC,gBAA4C,uEAAzB,eAAyB;AAC1E,MAAIC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,MAA7B,EAAqC,OAAOF,OAAO,CAACC,GAAR,CAAYE,EAAnB;AACrC,SAAO,UAAAC,IAAI,UAAJ,sCAAMC,cAAN,GAAuBC,eAAvB,GAAyCC,QAAzC,KAAqDR,gBAA5D;AACD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASS,cAAT,GAA8D;AAAA,MAAtCC,QAAsC,uEAA3BX,eAAe,EAAY;AACnE,SAAO1B,MAAM,CAACC,cAAc,CAACwB,IAAI,CAACa,GAAL,EAAD,EAAaD,QAAb,CAAf,EAAuCjC,mBAAvC,CAAb;AACD;AAED;AACA;AACA;AACA;;AACA,OAAO,SAASmC,cAAT,GAA8D;AAAA,MAAtCF,QAAsC,uEAA3BX,eAAe,EAAY;AACnE,SAAO1B,MAAM,CACXC,cAAc,CAACwB,IAAI,CAACa,GAAL,EAAD,EAAaD,QAAb,CADH,EAEXlC,4BAFW,CAAb;AAID","sourcesContent":["import { Config } from \"@opentripplanner/types\";\nimport { startOfDay, add, format } from \"date-fns\";\nimport { utcToZonedTime } from \"date-fns-tz\";\n\n// special constants for making sure the following date format is always sent to\n// OTP regardless of whatever the user has configured as the display format\nexport const OTP_API_DATE_FORMAT = \"YYYY-MM-DD\";\n// Date-Fns uses a different string format than moment.js\n// see https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\nexport const OTP_API_DATE_FORMAT_DATE_FNS = \"yyyy-MM-dd\";\nexport const OTP_API_TIME_FORMAT = \"HH:mm\";\n\n/**\n * Breaks up a duration in seconds into hours, minutes, and seconds.\n * @param {number} seconds The number of seconds to break up\n * @returns an object with fields with the corresponding, hours, minutes, seconds.\n */\nexport function toHoursMinutesSeconds(\n seconds: number\n): {\n hours: number;\n minutes: number;\n seconds: number;\n} {\n return {\n hours: Math.floor(seconds / 3600),\n minutes: Math.floor(seconds / 60) % 60,\n seconds: seconds % 60\n };\n}\n\n/**\n * @param {[type]} config the OTP config object found in store\n * @return {string} the config-defined time formatter or HH:mm (24-hr time)\n */\nexport function getTimeFormat(config: Config): string {\n return config?.dateTime?.timeFormat || OTP_API_TIME_FORMAT;\n}\n\nexport function getDateFormat(config: Config): string {\n return config?.dateTime?.dateFormat || OTP_API_DATE_FORMAT;\n}\n\nexport function getLongDateFormat(config: Config): string {\n return config?.dateTime?.longDateFormat || \"D MMMM YYYY\";\n}\n/**\n * Offsets a time according to the provided time options\n * and returns the result.\n */\nexport function offsetTime(ms, options) {\n return ms + (options?.offset || 0);\n}\n\n/**\n * Formats a seconds after midnight value for display in narrative\n * @param {number} seconds time since midnight in seconds\n * @param {string} timeFormat A valid date-fns time format\n * @return {string} formatted text representation\n */\nexport function formatSecondsAfterMidnight(\n seconds: number,\n timeFormat: string\n): string {\n const time = add(startOfDay(new Date()), { seconds });\n return format(time, timeFormat);\n}\n\n/**\n * Uses Intl.DateTimeFormat() api to get the user's time zone. In a test\n * environment, pulls timezone information from an env variable. Default to\n * GMT+0 if the Intl API is unavailable.\n */\nexport function getUserTimezone(fallbackTimezone = \"Etc/Greenwich\"): string {\n if (process.env.NODE_ENV === \"test\") return process.env.TZ;\n return Intl?.DateTimeFormat().resolvedOptions().timeZone || fallbackTimezone;\n}\n\n/**\n * Formats current time for use in OTP query\n * The conversion to the user's timezone is needed for testing purposes.\n */\nexport function getCurrentTime(timezone = getUserTimezone()): string {\n return format(utcToZonedTime(Date.now(), timezone), OTP_API_TIME_FORMAT);\n}\n\n/**\n * Formats current date for use in OTP query\n * The conversion to the user's timezone is needed for testing purposes.\n */\nexport function getCurrentDate(timezone = getUserTimezone()): string {\n return format(\n utcToZonedTime(Date.now(), timezone),\n OTP_API_DATE_FORMAT_DATE_FNS\n );\n}\n"],"file":"time.js"}
@@ -1,6 +1,4 @@
1
- import { Company, Config, ElevationProfile, FlexBookingInfo, Itinerary, LatLngArray, Leg, Step } from "@opentripplanner/types";
2
- import { calculateFares, getLegModeLabel, getModeForPlace, getPlaceName, getStepDirection, getStepInstructions, getStepStreetName, getTimeZoneOffset, getTransitFare } from "./deprecated";
3
- export { calculateFares, getLegModeLabel, getModeForPlace, getPlaceName, getStepDirection, getStepInstructions, getStepStreetName, getTimeZoneOffset, getTransitFare };
1
+ import { Company, Config, ElevationProfile, FlexBookingInfo, Itinerary, LatLngArray, Leg, Money, Step, TncFare } from "@opentripplanner/types";
4
2
  export declare const transitModes: string[];
5
3
  /**
6
4
  * @param {config} config OTP-RR configuration object
@@ -105,9 +103,18 @@ export declare function calculatePhysicalActivity(itinerary: Itinerary): {
105
103
  caloriesBurned: number;
106
104
  walkDuration: number;
107
105
  };
108
- export declare function calculateTncFares(itinerary: any): {
109
- maxTNCFare: any;
110
- minTNCFare: any;
111
- tncCurrencyCode: any;
106
+ /**
107
+ * For an itinerary, calculates the TNC fares and returns an object with
108
+ * these values and currency info.
109
+ * It is assumed that the same currency is used for all TNC legs.
110
+ */
111
+ export declare function calculateTncFares(itinerary: Itinerary): TncFare;
112
+ /**
113
+ * For a given fare component (either total fare or component parts), returns
114
+ * an object with the fare value (in cents).
115
+ */
116
+ export declare function getTransitFare(fareComponent: Money): {
117
+ currencyCode: string;
118
+ transitFare: number;
112
119
  };
113
120
  //# sourceMappingURL=itinerary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../src/itinerary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../src/itinerary.ts"],"names":[],"mappings":"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"}
package/lib/itinerary.js CHANGED
@@ -38,68 +38,38 @@ exports.getCompaniesLabelFromNetworks = getCompaniesLabelFromNetworks;
38
38
  exports.getTNCLocation = getTNCLocation;
39
39
  exports.calculatePhysicalActivity = calculatePhysicalActivity;
40
40
  exports.calculateTncFares = calculateTncFares;
41
- Object.defineProperty(exports, "calculateFares", {
42
- enumerable: true,
43
- get: function () {
44
- return _deprecated.calculateFares;
45
- }
46
- });
47
- Object.defineProperty(exports, "getLegModeLabel", {
48
- enumerable: true,
49
- get: function () {
50
- return _deprecated.getLegModeLabel;
51
- }
52
- });
53
- Object.defineProperty(exports, "getModeForPlace", {
54
- enumerable: true,
55
- get: function () {
56
- return _deprecated.getModeForPlace;
57
- }
58
- });
59
- Object.defineProperty(exports, "getPlaceName", {
60
- enumerable: true,
61
- get: function () {
62
- return _deprecated.getPlaceName;
63
- }
64
- });
65
- Object.defineProperty(exports, "getStepDirection", {
66
- enumerable: true,
67
- get: function () {
68
- return _deprecated.getStepDirection;
69
- }
70
- });
71
- Object.defineProperty(exports, "getStepInstructions", {
72
- enumerable: true,
73
- get: function () {
74
- return _deprecated.getStepInstructions;
75
- }
76
- });
77
- Object.defineProperty(exports, "getStepStreetName", {
78
- enumerable: true,
79
- get: function () {
80
- return _deprecated.getStepStreetName;
81
- }
82
- });
83
- Object.defineProperty(exports, "getTimeZoneOffset", {
84
- enumerable: true,
85
- get: function () {
86
- return _deprecated.getTimeZoneOffset;
87
- }
88
- });
89
- Object.defineProperty(exports, "getTransitFare", {
90
- enumerable: true,
91
- get: function () {
92
- return _deprecated.getTransitFare;
93
- }
94
- });
41
+ exports.getTransitFare = getTransitFare;
95
42
  exports.transitModes = void 0;
96
43
 
97
44
  var _polyline = _interopRequireDefault(require("@mapbox/polyline"));
98
45
 
99
46
  var _along = _interopRequireDefault(require("@turf/along"));
100
47
 
101
- var _deprecated = require("./deprecated");
102
-
48
+ /*
49
+ import {
50
+ // calculateFares,
51
+ // getLegModeLabel,
52
+ // getModeForPlace,
53
+ // getPlaceName,
54
+ // getStepDirection,
55
+ // getStepInstructions,
56
+ // getStepStreetName,
57
+ // getTimeZoneOffset,
58
+ // getTransitFare
59
+ } from "./deprecated";
60
+
61
+ export {
62
+ // calculateFares,
63
+ // getLegModeLabel,
64
+ // getModeForPlace,
65
+ // getPlaceName,
66
+ // getStepDirection,
67
+ // getStepInstructions,
68
+ // getStepStreetName,
69
+ // getTimeZoneOffset,
70
+ // getTransitFare
71
+ };
72
+ */
103
73
  // All OTP transit modes
104
74
  const transitModes = ["TRAM", "BUS", "SUBWAY", "FERRY", "RAIL", "GONDOLA"];
105
75
  /**
@@ -496,19 +466,63 @@ function calculatePhysicalActivity(itinerary) {
496
466
  walkDuration
497
467
  };
498
468
  }
469
+ /**
470
+ * For an itinerary, calculates the TNC fares and returns an object with
471
+ * these values and currency info.
472
+ * It is assumed that the same currency is used for all TNC legs.
473
+ */
474
+
499
475
 
500
476
  function calculateTncFares(itinerary) {
501
- // TODO: don't rely on deprecated methods!
502
- // At the moment this is safe as none of these exported variables contain strings
503
- const {
504
- maxTNCFare,
505
- minTNCFare,
506
- tncCurrencyCode
507
- } = (0, _deprecated.calculateFares)(itinerary, true);
477
+ let minTNCFare = 0;
478
+ let maxTNCFare = 0;
479
+ let currencyCode;
480
+ itinerary.legs.forEach(({
481
+ hailedCar,
482
+ mode,
483
+ tncData
484
+ }) => {
485
+ if (mode === "CAR" && hailedCar && tncData) {
486
+ const {
487
+ currency,
488
+ maxCost,
489
+ minCost
490
+ } = tncData;
491
+ minTNCFare += minCost;
492
+ maxTNCFare += maxCost; // Assumes a single currency for entire itinerary.
493
+
494
+ currencyCode = currency;
495
+ }
496
+ });
508
497
  return {
498
+ currencyCode,
509
499
  maxTNCFare,
510
- minTNCFare,
511
- tncCurrencyCode
500
+ minTNCFare
501
+ };
502
+ }
503
+ /**
504
+ * For a given fare component (either total fare or component parts), returns
505
+ * an object with the fare value (in cents).
506
+ */
507
+
508
+
509
+ function getTransitFare(fareComponent) {
510
+ // Default values (if fare component is not valid).
511
+ let transitFare = 0;
512
+ let currencyCode = "USD";
513
+
514
+ if (fareComponent) {
515
+ // Assign values without declaration.
516
+ // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#assignment_without_declaration
517
+ ({
518
+ currencyCode
519
+ } = fareComponent.currency);
520
+ transitFare = fareComponent.cents;
521
+ }
522
+
523
+ return {
524
+ currencyCode,
525
+ transitFare
512
526
  };
513
527
  }
514
528
  //# sourceMappingURL=itinerary.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/itinerary.ts"],"names":["transitModes","getTransitModes","config","modes","map","tm","mode","isTransit","includes","isReservationRequired","leg","boardRule","isContinuousDropoff","alightRule","isFlex","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","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","from","rentedBike","rentedCar","rentedVehicle","tncData","networks","company","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","polyline","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","to","legLocationAtDistance","distance","line","pt","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","elevation","elev","diff","second","first","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","find","co","id","getCompaniesLabelFromNetworks","network","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","calculateTncFares","maxTNCFare","minTNCFare","tncCurrencyCode"],"mappings":"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","sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n FlexBookingInfo,\n Itinerary,\n LatLngArray,\n Leg,\n Step\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\nimport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n} from \"./deprecated\";\n\nexport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n};\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\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 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 of boardRule which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg.boardRule === \"mustPhone\";\n}\n/**\n * Returns true if the leg has continuous dropoff enabled which requires\n * asking the driver to let the user off. \"coordinateWithDriver\" is the only\n * property of alightRule which encodes this info.\n */\nexport function isContinuousDropoff(leg: Leg): boolean {\n return leg.alightRule === \"coordinateWithDriver\";\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 isReservationRequired(leg) || isContinuousDropoff(leg);\n}\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\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 === \"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 { from, mode, rentedBike, rentedCar, rentedVehicle, tncData } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && tncData) {\n return tncData.company;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\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(itinerary: Itinerary): 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 iterpolated 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\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 = null;\n const points = [];\n steps.forEach(step => {\n if (!step.elevation || step.elevation.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < step.elevation.length; i++) {\n const elev = step.elevation[i];\n if (previous) {\n const diff = (elev.second - previous.second) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.first !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.second * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.first, elev.second]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (i === step.elevation.length - 1 && elev.first !== step.distance) {\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 re-used canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // re-use 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[],\n companies: Company[] = []\n): string {\n return 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: Itinerary\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\nexport function calculateTncFares(itinerary) {\n // TODO: don't rely on deprecated methods!\n // At the moment this is safe as none of these exported variables contain strings\n const { maxTNCFare, minTNCFare, tncCurrencyCode } = calculateFares(\n itinerary,\n true\n );\n return { maxTNCFare, minTNCFare, tncCurrencyCode };\n}\n"],"file":"itinerary.js"}
1
+ {"version":3,"sources":["../src/itinerary.ts"],"names":["transitModes","getTransitModes","config","modes","map","tm","mode","isTransit","includes","isReservationRequired","leg","boardRule","isContinuousDropoff","alightRule","isFlex","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","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","from","rentedBike","rentedCar","rentedVehicle","tncData","networks","company","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","polyline","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","to","legLocationAtDistance","distance","line","pt","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","elevation","elev","diff","second","first","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","find","co","id","getCompaniesLabelFromNetworks","network","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","calculateTncFares","minTNCFare","maxTNCFare","currencyCode","hailedCar","currency","maxCost","minCost","getTransitFare","fareComponent","transitFare","cents"],"mappings":"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","sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n FlexBookingInfo,\n Itinerary,\n LatLngArray,\n Leg,\n Money,\n Step,\n TncFare\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\n/*\nimport {\n // calculateFares,\n // getLegModeLabel,\n // getModeForPlace,\n // getPlaceName,\n // getStepDirection,\n // getStepInstructions,\n // getStepStreetName,\n // getTimeZoneOffset,\n // getTransitFare\n} from \"./deprecated\";\n\nexport {\n // calculateFares,\n // getLegModeLabel,\n // getModeForPlace,\n // getPlaceName,\n // getStepDirection,\n // getStepInstructions,\n // getStepStreetName,\n // getTimeZoneOffset,\n // getTransitFare\n};\n*/\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\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 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 of boardRule which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg.boardRule === \"mustPhone\";\n}\n/**\n * Returns true if the leg has continuous dropoff enabled which requires\n * asking the driver to let the user off. \"coordinateWithDriver\" is the only\n * property of alightRule which encodes this info.\n */\nexport function isContinuousDropoff(leg: Leg): boolean {\n return leg.alightRule === \"coordinateWithDriver\";\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 isReservationRequired(leg) || isContinuousDropoff(leg);\n}\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\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 === \"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 { from, mode, rentedBike, rentedCar, rentedVehicle, tncData } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && tncData) {\n return tncData.company;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\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(itinerary: Itinerary): 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 iterpolated 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\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 = null;\n const points = [];\n steps.forEach(step => {\n if (!step.elevation || step.elevation.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < step.elevation.length; i++) {\n const elev = step.elevation[i];\n if (previous) {\n const diff = (elev.second - previous.second) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.first !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.second * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.first, elev.second]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (i === step.elevation.length - 1 && elev.first !== step.distance) {\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 re-used canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // re-use 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[],\n companies: Company[] = []\n): string {\n return 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: Itinerary\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(itinerary: Itinerary): TncFare {\n let minTNCFare = 0;\n let maxTNCFare = 0;\n let currencyCode;\n itinerary.legs.forEach(({ hailedCar, mode, tncData }) => {\n if (mode === \"CAR\" && hailedCar && tncData) {\n const { currency, maxCost, minCost } = tncData;\n minTNCFare += minCost;\n maxTNCFare += maxCost;\n // Assumes a single currency for entire itinerary.\n currencyCode = currency;\n }\n });\n\n return {\n currencyCode,\n maxTNCFare,\n minTNCFare\n };\n}\n\n/**\n * For a given fare component (either total fare or component parts), returns\n * an object with the fare value (in cents).\n */\nexport function getTransitFare(\n fareComponent: Money\n): {\n currencyCode: string;\n transitFare: number;\n} {\n // Default values (if fare component is not valid).\n let transitFare = 0;\n let currencyCode = \"USD\";\n if (fareComponent) {\n // Assign values without declaration.\n // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#assignment_without_declaration\n ({ currencyCode } = fareComponent.currency);\n transitFare = fareComponent.cents;\n }\n return {\n currencyCode,\n transitFare\n };\n}\n"],"file":"itinerary.js"}
package/lib/map.d.ts CHANGED
@@ -1,13 +1,12 @@
1
1
  import { LatLngArray, Location, UserPosition } from "@opentripplanner/types";
2
- import { coordsToString, getDetailText, latlngToString } from "./deprecated";
3
- export { coordsToString, getDetailText, latlngToString };
4
2
  export declare function currentPositionToLocation(currentPosition: UserPosition): Location;
3
+ export declare function coordsToString(coords: number[]): string;
5
4
  export declare function stringToCoords(str: string): number[];
6
5
  export declare function constructLocation(latlng: {
7
6
  lat: number;
8
7
  lng: number;
9
8
  }): Location;
10
- export declare function formatStoredPlaceName(location: Location, withDetails?: boolean): string;
9
+ export declare function formatStoredPlaceName(location: Location): string;
11
10
  export declare function matchLatLon(location1: Location, location2: Location): boolean;
12
11
  declare type TransitivePlaceRaw = {
13
12
  place_id: string;
@@ -18,4 +17,5 @@ export declare function isCarWalkTransition(place: TransitivePlaceRaw): boolean;
18
17
  export declare function isValidLat(lat: number): boolean;
19
18
  export declare function isValidLng(lng: number): boolean;
20
19
  export declare function isValidLatLng(arr: LatLngArray): boolean;
20
+ export {};
21
21
  //# sourceMappingURL=map.d.ts.map
package/lib/map.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EAEf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAEzD,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,YAAY,GAC5B,QAAQ,CAYV;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,QAAQ,CAKX;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAClB,WAAW,UAAO,GACjB,MAAM,CAcR;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAG7E;AAED,aAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAErE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAEtE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAOvD"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAc7E,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,YAAY,GAC5B,QAAQ,CAYV;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,QAAQ,CAKX;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAIhE;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAG7E;AAED,aAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAErE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAEtE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAOvD"}
package/lib/map.js CHANGED
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.currentPositionToLocation = currentPositionToLocation;
7
+ exports.coordsToString = coordsToString;
7
8
  exports.stringToCoords = stringToCoords;
8
9
  exports.constructLocation = constructLocation;
9
10
  exports.formatStoredPlaceName = formatStoredPlaceName;
@@ -14,29 +15,19 @@ exports.isCarWalkTransition = isCarWalkTransition;
14
15
  exports.isValidLat = isValidLat;
15
16
  exports.isValidLng = isValidLng;
16
17
  exports.isValidLatLng = isValidLatLng;
17
- Object.defineProperty(exports, "coordsToString", {
18
- enumerable: true,
19
- get: function () {
20
- return _deprecated.coordsToString;
21
- }
22
- });
23
- Object.defineProperty(exports, "getDetailText", {
24
- enumerable: true,
25
- get: function () {
26
- return _deprecated.getDetailText;
27
- }
28
- });
29
- Object.defineProperty(exports, "latlngToString", {
30
- enumerable: true,
31
- get: function () {
32
- return _deprecated.latlngToString;
33
- }
34
- });
35
18
 
36
19
  var _itinerary = require("./itinerary");
37
20
 
38
- var _deprecated = require("./deprecated");
21
+ /*
22
+ import {
23
+ // coordsToString,
24
+ // getDetailText //,
25
+ // latlngToString,
26
+ // logDeprecationWarning
27
+ } from "./deprecated";
39
28
 
29
+ export { coordsToString, getDetailText , latlngToString };
30
+ */
40
31
  function currentPositionToLocation(currentPosition) {
41
32
  if (currentPosition.error || !currentPosition.coords) {
42
33
  console.warn("Cannot construct location from current position due to geolocation error or missing coordinates.");
@@ -48,6 +39,12 @@ function currentPositionToLocation(currentPosition) {
48
39
  lon: currentPosition.coords.longitude,
49
40
  category: "CURRENT_LOCATION"
50
41
  };
42
+ } // TRICKY: It is used in query.js and in the context of
43
+ // otp-rr actions where the intl context is not available.
44
+
45
+
46
+ function coordsToString(coords) {
47
+ return coords.length && coords.map(c => (+c).toFixed(5)).join(", ");
51
48
  }
52
49
 
53
50
  function stringToCoords(str) {
@@ -61,19 +58,8 @@ function constructLocation(latlng) {
61
58
  };
62
59
  }
63
60
 
64
- function formatStoredPlaceName(location, withDetails = true) {
65
- if (withDetails) {
66
- (0, _deprecated.logDeprecationWarning)("the formatStoredPlaceName withDetails parameter");
67
- }
68
-
69
- let displayName = location.type === "home" || location.type === "work" ? (0, _itinerary.toSentenceCase)(location.type) : location.name;
70
-
71
- if (withDetails) {
72
- const detailText = (0, _deprecated.getDetailText)(location);
73
- if (detailText) displayName += ` (${detailText})`;
74
- }
75
-
76
- return displayName;
61
+ function formatStoredPlaceName(location) {
62
+ return location.type === "home" || location.type === "work" ? (0, _itinerary.toSentenceCase)(location.type) : location.name;
77
63
  }
78
64
 
79
65
  function matchLatLon(location1, location2) {
package/lib/map.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/map.ts"],"names":["currentPositionToLocation","currentPosition","error","coords","console","warn","lat","latitude","lon","longitude","category","stringToCoords","str","split","map","c","constructLocation","latlng","lng","formatStoredPlaceName","location","withDetails","displayName","type","name","detailText","matchLatLon","location1","location2","isBikeshareStation","place","place_id","lastIndexOf","isEScooterStation","isCarWalkTransition","isValidLat","Number","isFinite","isValidLng","isValidLatLng","arr","Array","isArray","length"],"mappings":"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","sourcesContent":["import { LatLngArray, Location, UserPosition } from \"@opentripplanner/types\";\nimport { toSentenceCase } from \"./itinerary\";\n\nimport {\n coordsToString,\n getDetailText,\n latlngToString,\n logDeprecationWarning\n} from \"./deprecated\";\n\nexport { coordsToString, getDetailText, latlngToString };\n\nexport function currentPositionToLocation(\n currentPosition: UserPosition\n): Location {\n if (currentPosition.error || !currentPosition.coords) {\n console.warn(\n \"Cannot construct location from current position due to geolocation error or missing coordinates.\"\n );\n return null;\n }\n return {\n lat: currentPosition.coords.latitude,\n lon: currentPosition.coords.longitude,\n category: \"CURRENT_LOCATION\"\n };\n}\n\nexport function stringToCoords(str: string): number[] {\n return (str && str.split(\",\").map(c => +c)) || [];\n}\n\nexport function constructLocation(latlng: {\n lat: number;\n lng: number;\n}): Location {\n return {\n lat: latlng.lat,\n lon: latlng.lng\n };\n}\n\nexport function formatStoredPlaceName(\n location: Location,\n withDetails = true\n): string {\n if (withDetails) {\n logDeprecationWarning(\"the formatStoredPlaceName withDetails parameter\");\n }\n\n let displayName =\n location.type === \"home\" || location.type === \"work\"\n ? toSentenceCase(location.type)\n : location.name;\n if (withDetails) {\n const detailText = getDetailText(location);\n if (detailText) displayName += ` (${detailText})`;\n }\n return displayName;\n}\n\nexport function matchLatLon(location1: Location, location2: Location): boolean {\n if (!location1 || !location2) return location1 === location2;\n return location1.lat === location2.lat && location1.lon === location2.lon;\n}\n\ntype TransitivePlaceRaw = {\n place_id: string;\n};\nexport function isBikeshareStation(place: TransitivePlaceRaw): boolean {\n return place.place_id.lastIndexOf(\"bicycle_rent_station\") !== -1;\n}\n\nexport function isEScooterStation(place: TransitivePlaceRaw): boolean {\n return place.place_id.lastIndexOf(\"escooter_rent_station\") !== -1;\n}\n\nexport function isCarWalkTransition(place: TransitivePlaceRaw): boolean {\n return place.place_id.lastIndexOf(\"itin_car_\") !== -1;\n}\n\nexport function isValidLat(lat: number): boolean {\n return Number.isFinite(lat) && lat >= -90 && lat <= 90;\n}\n\nexport function isValidLng(lng: number): boolean {\n return Number.isFinite(lng) && lng >= -180 && lng <= 180;\n}\n\nexport function isValidLatLng(arr: LatLngArray): boolean {\n return (\n Array.isArray(arr) &&\n arr.length === 2 &&\n isValidLat(arr[0]) &&\n isValidLng(arr[1])\n );\n}\n"],"file":"map.js"}
1
+ {"version":3,"sources":["../src/map.ts"],"names":["currentPositionToLocation","currentPosition","error","coords","console","warn","lat","latitude","lon","longitude","category","coordsToString","length","map","c","toFixed","join","stringToCoords","str","split","constructLocation","latlng","lng","formatStoredPlaceName","location","type","name","matchLatLon","location1","location2","isBikeshareStation","place","place_id","lastIndexOf","isEScooterStation","isCarWalkTransition","isValidLat","Number","isFinite","isValidLng","isValidLatLng","arr","Array","isArray"],"mappings":"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","sourcesContent":["import { LatLngArray, Location, UserPosition } from \"@opentripplanner/types\";\nimport { toSentenceCase } from \"./itinerary\";\n\n/*\nimport {\n // coordsToString,\n // getDetailText //,\n // latlngToString,\n // logDeprecationWarning\n} from \"./deprecated\";\n\nexport { coordsToString, getDetailText , latlngToString };\n*/\n\nexport function currentPositionToLocation(\n currentPosition: UserPosition\n): Location {\n if (currentPosition.error || !currentPosition.coords) {\n console.warn(\n \"Cannot construct location from current position due to geolocation error or missing coordinates.\"\n );\n return null;\n }\n return {\n lat: currentPosition.coords.latitude,\n lon: currentPosition.coords.longitude,\n category: \"CURRENT_LOCATION\"\n };\n}\n\n// TRICKY: It is used in query.js and in the context of\n// otp-rr actions where the intl context is not available.\nexport function coordsToString(coords: number[]): string {\n return coords.length && coords.map(c => (+c).toFixed(5)).join(\", \");\n}\n\nexport function stringToCoords(str: string): number[] {\n return (str && str.split(\",\").map(c => +c)) || [];\n}\n\nexport function constructLocation(latlng: {\n lat: number;\n lng: number;\n}): Location {\n return {\n lat: latlng.lat,\n lon: latlng.lng\n };\n}\n\nexport function formatStoredPlaceName(location: Location): string {\n return location.type === \"home\" || location.type === \"work\"\n ? toSentenceCase(location.type)\n : location.name;\n}\n\nexport function matchLatLon(location1: Location, location2: Location): boolean {\n if (!location1 || !location2) return location1 === location2;\n return location1.lat === location2.lat && location1.lon === location2.lon;\n}\n\ntype TransitivePlaceRaw = {\n place_id: string;\n};\nexport function isBikeshareStation(place: TransitivePlaceRaw): boolean {\n return place.place_id.lastIndexOf(\"bicycle_rent_station\") !== -1;\n}\n\nexport function isEScooterStation(place: TransitivePlaceRaw): boolean {\n return place.place_id.lastIndexOf(\"escooter_rent_station\") !== -1;\n}\n\nexport function isCarWalkTransition(place: TransitivePlaceRaw): boolean {\n return place.place_id.lastIndexOf(\"itin_car_\") !== -1;\n}\n\nexport function isValidLat(lat: number): boolean {\n return Number.isFinite(lat) && lat >= -90 && lat <= 90;\n}\n\nexport function isValidLng(lng: number): boolean {\n return Number.isFinite(lng) && lng >= -180 && lng <= 180;\n}\n\nexport function isValidLatLng(arr: LatLngArray): boolean {\n return (\n Array.isArray(arr) &&\n arr.length === 2 &&\n isValidLat(arr[0]) &&\n isValidLng(arr[1])\n );\n}\n"],"file":"map.js"}
package/lib/query.js CHANGED
@@ -18,15 +18,9 @@ exports.parseLocationString = parseLocationString;
18
18
  exports.planParamsToQuery = planParamsToQuery;
19
19
  exports.planParamsToQueryAsync = planParamsToQueryAsync;
20
20
  exports.getRoutingParams = getRoutingParams;
21
- Object.defineProperty(exports, "summarizeQuery", {
22
- enumerable: true,
23
- get: function () {
24
- return _deprecated.summarizeQuery;
25
- }
26
- });
27
21
  exports.defaultParams = void 0;
28
22
 
29
- var _moment = _interopRequireDefault(require("moment"));
23
+ var _dateFns = require("date-fns");
30
24
 
31
25
  var _lib = _interopRequireDefault(require("@opentripplanner/geocoder/lib"));
32
26
 
@@ -40,7 +34,8 @@ var _queryParams = _interopRequireDefault(require("./query-params"));
40
34
 
41
35
  var _time = require("./time");
42
36
 
43
- var _deprecated = require("./deprecated");
37
+ // import { coordsToString, summarizeQuery } from "./deprecated";
38
+ // export { summarizeQuery };
44
39
 
45
40
  /* The list of default parameters considered in the settings panel */
46
41
  const defaultParams = ["wheelchair", "maxWalkDistance", "walkReluctance", "maxWalkTime", "walkSpeed", "maxBikeDistance", "maxBikeTime", "bikeSpeed", "optimize", "optimizeBike", "maxEScooterDistance", "watts"];
@@ -272,7 +267,7 @@ function parseLocationString(value) {
272
267
  if (!value) return null;
273
268
  const parts = value.split("::");
274
269
  const coordinates = parts[1] ? (0, _map.stringToCoords)(parts[1]) : (0, _map.stringToCoords)(parts[0]);
275
- const name = parts[1] ? parts[0] : (0, _deprecated.coordsToString)(coordinates);
270
+ const name = parts[1] ? parts[0] : (0, _map.coordsToString)(coordinates);
276
271
  return coordinates.length === 2 ? {
277
272
  name: name || null,
278
273
  lat: coordinates[0] || null,
@@ -330,8 +325,9 @@ function planParamsToQuery(params) {
330
325
 
331
326
  case "time":
332
327
  {
333
- const parsedTime = (0, _moment.default)(params.time, TIME_FORMATS);
334
- query.time = parsedTime.isValid() ? parsedTime.format(_time.OTP_API_TIME_FORMAT) : (0, _time.getCurrentTime)();
328
+ // Match one of the supported time formats
329
+ const matchedTimeFormat = TIME_FORMATS.find(timeFormat => (0, _dateFns.isMatch)(params.time, timeFormat));
330
+ query.time = matchedTimeFormat ? (0, _dateFns.format)((0, _dateFns.parse)(params.time, matchedTimeFormat, new Date()), _time.OTP_API_TIME_FORMAT) : (0, _time.getCurrentTime)();
335
331
  }
336
332
  break;
337
333
 
@@ -423,8 +419,8 @@ function getRoutingParams(config, currentQuery, ignoreRealtimeUpdates) {
423
419
  } // check date/time validity; ignore both if either is invalid
424
420
 
425
421
 
426
- const dateValid = (0, _moment.default)(params.date, _time.OTP_API_DATE_FORMAT).isValid();
427
- const timeValid = (0, _moment.default)(params.time, _time.OTP_API_TIME_FORMAT).isValid();
422
+ const dateValid = (0, _dateFns.isMatch)(params.date, _time.OTP_API_DATE_FORMAT_DATE_FNS);
423
+ const timeValid = (0, _dateFns.isMatch)(params.time, _time.OTP_API_TIME_FORMAT);
428
424
 
429
425
  if (!dateValid || !timeValid) {
430
426
  delete params.time;
@@ -445,8 +441,8 @@ function getRoutingParams(config, currentQuery, ignoreRealtimeUpdates) {
445
441
 
446
442
  } else {
447
443
  // check start and end time validity; ignore both if either is invalid
448
- const startTimeValid = (0, _moment.default)(params.startTime, _time.OTP_API_TIME_FORMAT).isValid();
449
- const endTimeValid = (0, _moment.default)(params.endTime, _time.OTP_API_TIME_FORMAT).isValid();
444
+ const startTimeValid = (0, _dateFns.isMatch)(params.startTime, _time.OTP_API_TIME_FORMAT);
445
+ const endTimeValid = (0, _dateFns.isMatch)(params.endTime, _time.OTP_API_TIME_FORMAT);
450
446
 
451
447
  if (!startTimeValid || !endTimeValid) {
452
448
  delete params.startTimeValid;