@@ -7,6 +7,7 @@ const Promise = require('pinkie-promise')
77const { fetch} = require ( 'fetch-ponyfill' ) ( { Promise} )
88const { stringify} = require ( 'qs' )
99const { parse : parseContentType } = require ( 'content-type' )
10+ const { byErrorCode} = require ( './rest-exe-errors' )
1011const findInTree = require ( './lib/find-in-tree' )
1112const parseWhen = require ( './parse-rest/when' )
1213const parsePolyline = require ( './parse-rest/polyline' )
@@ -46,16 +47,25 @@ const request = async (method, query = {}) => {
4647 }
4748 const res = await fetch ( url , fetchCfg )
4849
49- const { type : cType } = parseContentType ( res . headers . get ( 'content-type' ) )
50+ const cTypeHeader = res . headers . get ( 'content-type' )
51+ const { type : cType } = cTypeHeader ? parseContentType ( cTypeHeader ) : { }
5052 const asJSON = cType === 'application/json'
5153 const body = asJSON ? await res . json ( ) : await res . text ( )
54+ if ( DEBUG ) console . error ( asJSON ? JSON . stringify ( body ) : body )
5255
5356 if ( ! res . ok ) {
5457 // todo: parse HTML error messages
5558 let err = new Error ( res . statusText )
5659 if ( asJSON ) {
57- err = new Error ( body . errorText )
58- err . code = body . errorCode
60+ const { errorCode, errorText} = body
61+ if ( errorCode && byErrorCode [ errorCode ] ) {
62+ Object . assign ( err , byErrorCode [ errorCode ] )
63+ err . hafasErrorCode = errorCode
64+ if ( errorText ) err . hafasErrorMessage = errorText
65+ } else {
66+ err = new Error ( errorText )
67+ err . code = errorCode
68+ }
5969 } else if ( body ) err = new Error ( body )
6070
6171 err . statusCode = res . status
@@ -69,8 +79,6 @@ const request = async (method, query = {}) => {
6979 // todo: sometimes it returns a body without any data
7080 // e.g. `location.nearbystops` with an invalid `type`
7181
72- if ( DEBUG ) console . error ( asJSON ? JSON . stringify ( body ) : body )
73-
7482 unwrapNested ( body , '**.ServiceDays[0]' , 'serviceDays' )
7583 unwrapNested ( body , '**.LegList.Leg' , 'legs' )
7684 unwrapNested ( body , '**.Notes.Note' , 'notes' )
0 commit comments