Skip to content

Commit 1e39cc9

Browse files
committed
improves reusability of code and error handling
1 parent c760f57 commit 1e39cc9

File tree

1 file changed

+45
-25
lines changed

1 file changed

+45
-25
lines changed

src/schemaHandler.js

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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(`converting 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,24 @@ 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, model);
155+
156+
return schema;
157+
}
158+
);
159+
160+
this.logger.verbose(`converting model: ${name}`);
161+
const convertedSchemas = SchemaConvertor.convert(dereferencedSchema, name);
162+
163+
return convertedSchemas;
164+
}
165+
160166
async __dereferenceSchema(schema) {
161167
const bundledSchema = await $RefParser
162168
.bundle(schema, this.refParserOptions)
@@ -238,9 +244,23 @@ class SchemaHandler {
238244
}
239245
}
240246

247+
__checkForMissingPathAndThrow(error, model) {
248+
if (error.message === "Expected a file path, URL, or object. Got undefined")
249+
throw error;
250+
}
251+
252+
__checkForHTTPErrorsAndThrow(error, model) {
253+
if (error.errors) {
254+
for (const err of error?.errors) {
255+
this.__HTTPError(err, model);
256+
}
257+
} else {
258+
this.__HTTPError(error, model);
259+
}
260+
}
261+
241262
__HTTPError(error, model) {
242263
if (error.message.includes("HTTP ERROR")) {
243-
// throw err;
244264
throw new Error(
245265
`There was an error dereferencing ${
246266
model.name

0 commit comments

Comments
 (0)