@@ -71,26 +71,15 @@ class SchemaHandler {
7171 const modelName = model . name ;
7272 const modelSchema = model . schema ;
7373
74- this . logger . verbose ( `dereferencing model: ${ model . name } ` ) ;
75- const dereferencedSchema = await this . __dereferenceSchema (
76- modelSchema
74+ const convertedSchemas = await this . __dereferenceAndConvert (
75+ modelSchema ,
76+ modelName ,
77+ model
7778 ) . catch ( ( err ) => {
78- if ( err . errors ) {
79- for ( const error of err ?. errors ) {
80- this . __HTTPError ( error , model ) ;
81- }
82- } else {
83- this . __HTTPError ( err , model ) ;
84- }
85- return modelSchema ;
79+ if ( err instanceof Error ) throw err ;
80+ else return err ;
8681 } ) ;
8782
88- this . logger . verbose ( `convering model: ${ model . name } ` ) ;
89- const convertedSchemas = SchemaConvertor . convert (
90- dereferencedSchema ,
91- modelName
92- ) ;
93-
9483 if (
9584 typeof convertedSchemas . schemas === "object" &&
9685 ! Array . isArray ( convertedSchemas . schemas ) &&
@@ -129,13 +118,12 @@ class SchemaHandler {
129118 return this . modelReferences [ name ] ;
130119 }
131120
132- const dereferencedSchema = await this . __dereferenceSchema ( schema ) . catch (
133- ( err ) => {
134- throw err ;
135- }
136- ) ;
137-
138- const convertedSchemas = SchemaConvertor . convert ( dereferencedSchema , name ) ;
121+ const convertedSchemas = await this . __dereferenceAndConvert ( schema , name , {
122+ name,
123+ schema,
124+ } ) . catch ( ( err ) => {
125+ throw err ;
126+ } ) ;
139127
140128 for ( const [ schemaName , schemaValue ] of Object . entries (
141129 convertedSchemas . schemas
@@ -157,6 +145,32 @@ class SchemaHandler {
157145 return `#/components/schemas/${ finalName } ` ;
158146 }
159147
148+ async __dereferenceAndConvert ( schema , name , model ) {
149+ this . logger . verbose ( `dereferencing model: ${ name } ` ) ;
150+ const dereferencedSchema = await this . __dereferenceSchema ( schema ) . catch (
151+ ( err ) => {
152+ this . __checkForHTTPErrorsAndThrow ( err , model ) ;
153+
154+ this . __checkForMissingPathAndThrow ( err ) ;
155+
156+ return schema ;
157+ }
158+ ) ;
159+
160+ this . logger . verbose (
161+ `dereferenced model: ${ JSON . stringify ( dereferencedSchema ) } `
162+ ) ;
163+
164+ this . logger . verbose ( `converting model: ${ name } ` ) ;
165+ const convertedSchemas = SchemaConvertor . convert ( dereferencedSchema , name ) ;
166+
167+ this . logger . verbose (
168+ `converted schemas: ${ JSON . stringify ( convertedSchemas ) } `
169+ ) ;
170+
171+ return convertedSchemas ;
172+ }
173+
160174 async __dereferenceSchema ( schema ) {
161175 const bundledSchema = await $RefParser
162176 . bundle ( schema , this . refParserOptions )
@@ -238,9 +252,23 @@ class SchemaHandler {
238252 }
239253 }
240254
255+ __checkForMissingPathAndThrow ( error ) {
256+ if ( error . message === "Expected a file path, URL, or object. Got undefined" )
257+ throw error ;
258+ }
259+
260+ __checkForHTTPErrorsAndThrow ( error , model ) {
261+ if ( error . errors ) {
262+ for ( const err of error ?. errors ) {
263+ this . __HTTPError ( err , model ) ;
264+ }
265+ } else {
266+ this . __HTTPError ( error , model ) ;
267+ }
268+ }
269+
241270 __HTTPError ( error , model ) {
242271 if ( error . message . includes ( "HTTP ERROR" ) ) {
243- // throw err;
244272 throw new Error (
245273 `There was an error dereferencing ${
246274 model . name
0 commit comments