@@ -9,7 +9,7 @@ const knownAdapters = {
99}
1010
1111utils . forEach ( knownAdapters , ( fn , value ) => {
12- if ( fn ) {
12+ if ( fn ) {
1313 try {
1414 Object . defineProperty ( fn , 'name' , { value} ) ;
1515 } catch ( e ) {
@@ -19,6 +19,10 @@ utils.forEach(knownAdapters, (fn, value) => {
1919 }
2020} ) ;
2121
22+ const renderReason = ( reason ) => `- ${ reason } ` ;
23+
24+ const isResolvedHandle = ( adapter ) => utils . isFunction ( adapter ) || adapter === null || adapter === false ;
25+
2226export default {
2327 getAdapter : ( adapters ) => {
2428 adapters = utils . isArray ( adapters ) ? adapters : [ adapters ] ;
@@ -27,30 +31,44 @@ export default {
2731 let nameOrAdapter ;
2832 let adapter ;
2933
34+ const rejectedReasons = { } ;
35+
3036 for ( let i = 0 ; i < length ; i ++ ) {
3137 nameOrAdapter = adapters [ i ] ;
32- if ( ( adapter = utils . isString ( nameOrAdapter ) ? knownAdapters [ nameOrAdapter . toLowerCase ( ) ] : nameOrAdapter ) ) {
38+ let id ;
39+
40+ adapter = nameOrAdapter ;
41+
42+ if ( ! isResolvedHandle ( nameOrAdapter ) ) {
43+ adapter = knownAdapters [ ( id = String ( nameOrAdapter ) ) . toLowerCase ( ) ] ;
44+
45+ if ( adapter === undefined ) {
46+ throw new AxiosError ( `Unknown adapter '${ id } '` ) ;
47+ }
48+ }
49+
50+ if ( adapter ) {
3351 break ;
3452 }
53+
54+ rejectedReasons [ id || '#' + i ] = adapter ;
3555 }
3656
3757 if ( ! adapter ) {
38- if ( adapter === false ) {
39- throw new AxiosError (
40- `Adapter ${ nameOrAdapter } is not supported by the environment` ,
41- 'ERR_NOT_SUPPORT'
58+
59+ const reasons = Object . entries ( rejectedReasons )
60+ . map ( ( [ id , state ] ) => `adapter ${ id } ` +
61+ ( state === false ? 'is not supported by the environment' : 'is not available in the build' )
4262 ) ;
43- }
4463
45- throw new Error (
46- utils . hasOwnProp ( knownAdapters , nameOrAdapter ) ?
47- `Adapter '${ nameOrAdapter } ' is not available in the build` :
48- `Unknown adapter '${ nameOrAdapter } '`
49- ) ;
50- }
64+ let s = length ?
65+ ( reasons . length > 1 ? 'since :\n' + reasons . map ( renderReason ) . join ( '\n' ) : ' ' + renderReason ( reasons [ 0 ] ) ) :
66+ 'as no adapter specified' ;
5167
52- if ( ! utils . isFunction ( adapter ) ) {
53- throw new TypeError ( 'adapter is not a function' ) ;
68+ throw new AxiosError (
69+ `There is no suitable adapter to dispatch the request ` + s ,
70+ 'ERR_NOT_SUPPORT'
71+ ) ;
5472 }
5573
5674 return adapter ;
0 commit comments