@@ -9,8 +9,7 @@ async function load(pathToSpec, { auth }) {
9
9
// option 1: remote URL
10
10
if ( / ^ h t t p s ? : \/ \/ / . test ( pathToSpec ) ) {
11
11
try {
12
- const rawSpec = await loadFromHttp ( pathToSpec , { auth } ) ;
13
- return rawSpec ;
12
+ return loadFromHttp ( pathToSpec , { auth } ) ;
14
13
} catch ( e ) {
15
14
if ( e . code === "ENOTFOUND" ) {
16
15
throw new Error (
@@ -22,35 +21,48 @@ async function load(pathToSpec, { auth }) {
22
21
}
23
22
24
23
// option 2: local file
25
- return loadFromFs ( pathToSpec ) ;
24
+ return {
25
+ body : loadFromFs ( pathToSpec ) ,
26
+ contentType : mime . getType ( pathToSpec ) ,
27
+ } ;
26
28
}
27
29
28
30
async function loadSpec ( pathToSpec , { auth, log = true } ) {
29
31
if ( log === true ) {
30
32
console . log ( yellow ( `🔭 Loading spec from ${ bold ( pathToSpec ) } …` ) ) ; // only log if not writing to stdout
31
33
}
32
34
33
- const contentType = mime . getType ( pathToSpec ) ;
34
- const rawSpec = await load ( pathToSpec , { auth } ) ;
35
+ const { body, contentType } = await load ( pathToSpec , { auth } ) ;
35
36
36
37
switch ( contentType ) {
38
+ case "application/openapi+yaml" :
37
39
case "text/yaml" : {
38
40
try {
39
- return yaml . load ( rawSpec ) ;
41
+ return yaml . load ( body ) ;
40
42
} catch ( err ) {
41
43
throw new Error ( `YAML: ${ err . toString ( ) } ` ) ;
42
44
}
43
45
}
44
46
case "application/json" :
45
- case "application/json5" : {
47
+ case "application/json5" :
48
+ case "application/openapi+json" : {
46
49
try {
47
- return JSON . parse ( rawSpec ) ;
50
+ return JSON . parse ( body ) ;
48
51
} catch ( err ) {
49
52
throw new Error ( `JSON: ${ err . toString ( ) } ` ) ;
50
53
}
51
54
}
52
55
default : {
53
- throw new Error ( `Unknown format${ contentType ? `: "${ contentType } "` : "" } . Only YAML or JSON supported.` ) ;
56
+ try {
57
+ return JSON . parse ( body ) ; // unknown attempt 1: JSON
58
+ } catch ( err1 ) {
59
+ try {
60
+ return yaml . load ( body ) ; // unknown attempt 2: YAML
61
+ } catch ( err2 ) {
62
+ // give up: unknown type
63
+ throw new Error ( `Unknown format${ contentType ? `: "${ contentType } "` : "" } . Only YAML or JSON supported.` ) ;
64
+ }
65
+ }
54
66
}
55
67
}
56
68
}
0 commit comments