1+ const mime = require ( "mime" ) ;
12const yaml = require ( "js-yaml" ) ;
23const { bold, yellow } = require ( "kleur" ) ;
34
45const loadFromFs = require ( "./loadFromFs" ) ;
56const loadFromHttp = require ( "./loadFromHttp" ) ;
67
7- async function load ( pathToSpec ) {
8+ async function load ( pathToSpec , { auth } ) {
89 // option 1: remote URL
910 if ( / ^ h t t p s ? : \/ \/ / . test ( pathToSpec ) ) {
1011 try {
11- const rawSpec = await loadFromHttp ( pathToSpec ) ;
12+ const rawSpec = await loadFromHttp ( pathToSpec , { auth } ) ;
1213 return rawSpec ;
1314 } catch ( e ) {
1415 if ( e . code === "ENOTFOUND" ) {
@@ -24,33 +25,32 @@ async function load(pathToSpec) {
2425 return loadFromFs ( pathToSpec ) ;
2526}
2627
27- function isYamlSpec ( rawSpec , pathToSpec ) {
28- return / \. y a ? m l $ / i. test ( pathToSpec ) || rawSpec [ 0 ] !== "{" ;
29- }
30-
31- module . exports . loadSpec = async ( pathToSpec , { log = true } ) => {
28+ async function loadSpec ( pathToSpec , { auth, log = true } ) {
3229 if ( log === true ) {
3330 console . log ( yellow ( `🤞 Loading spec from ${ bold ( pathToSpec ) } …` ) ) ; // only log if not writing to stdout
3431 }
35- const rawSpec = await load ( pathToSpec ) ;
3632
37- try {
38- if ( isYamlSpec ( rawSpec , pathToSpec ) ) {
39- return yaml . load ( rawSpec ) ;
40- }
41- } catch ( err ) {
42- let message = `The spec under ${ pathToSpec } seems to be YAML, but it couldn’t be parsed.` ;
33+ const rawSpec = await load ( pathToSpec , { auth } ) ;
4334
44- if ( err . message ) {
45- message += `\n${ err . message } ` ;
35+ switch ( mime . getType ( pathToSpec ) ) {
36+ case "text/yaml" : {
37+ try {
38+ return yaml . load ( rawSpec ) ;
39+ } catch ( err ) {
40+ throw new Error ( `YAML: ${ err . toString ( ) } ` ) ;
41+ }
42+ }
43+ case "application/json" :
44+ case "application/json5" : {
45+ try {
46+ return JSON . parse ( rawSpec ) ;
47+ } catch ( err ) {
48+ throw new Error ( `JSON: ${ err . toString ( ) } ` ) ;
49+ }
50+ }
51+ default : {
52+ throw new Error ( `Unknown format: "${ contentType } ". Only YAML or JSON supported.` ) ;
4653 }
47-
48- throw new Error ( message ) ;
49- }
50-
51- try {
52- return JSON . parse ( rawSpec ) ;
53- } catch {
54- throw new Error ( `The spec under ${ pathToSpec } couldn’t be parsed neither as YAML nor JSON.` ) ;
5554 }
56- } ;
55+ }
56+ exports . loadSpec = loadSpec ;
0 commit comments