Skip to content

Commit fca088b

Browse files
authored
Merge pull request #211 from JaredCE/do-not-throw-on-validation-warnings
Do not throw on validation warnings
2 parents 8f4a1b1 + f8ff0f8 commit fca088b

File tree

5 files changed

+40
-32
lines changed

5 files changed

+40
-32
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Options:
4848
--format -f Whether to output the OpenAPI Description as json or yaml. Default: json
4949
--indent -i File indentation in spaces. Default: 2
5050
--openApiVersion -a OpenAPI version to generate for. Default: 3.0.0
51-
--postmanCollection -p Will generate a postman collection (from the generated OpenAPI Description), in json only, if passed in. Default postman.json
51+
--postmanCollection -p Will generate a postman collection (from the generated OpenAPI Description), in json only, if passed in. Default: postman.json
5252
--validationWarn -w Warn about validation errors only. Will write the OpenAPI file if generation is successful. Default: false
5353
```
5454

@@ -968,6 +968,8 @@ However, you can configure your own rules from the [ruleset available on the Red
968968
}
969969
```
970970

971+
Since rules can be set to "warn", you no longer are required to tell the plugin to ignore errors with the `--validationWarn` flag.
972+
971973
## Example configuration
972974

973975
Please view the example [serverless.yml](test/serverless-tests/best/serverless.yml).

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "serverless-openapi-documenter",
3-
"version": "0.0.100",
3+
"version": "0.0.101",
44
"description": "Generate OpenAPI v3 documentation and Postman Collections from your Serverless Config",
55
"main": "index.js",
66
"keywords": [

src/definitionGenerator.js

+1-7
Original file line numberDiff line numberDiff line change
@@ -1021,19 +1021,13 @@ class DefinitionGenerator {
10211021

10221022
const apiDesc = stringifyYaml(this.openAPI);
10231023

1024-
const results = await lintFromString({
1024+
return await lintFromString({
10251025
source: apiDesc,
10261026
config: config,
10271027
}).catch((err) => {
10281028
console.error(err);
10291029
throw err;
10301030
});
1031-
1032-
if (results.length) {
1033-
throw results;
1034-
}
1035-
1036-
return true;
10371031
}
10381032
}
10391033

src/openAPIGenerator.js

+33-21
Original file line numberDiff line numberDiff line change
@@ -195,23 +195,29 @@ class OpenAPIGenerator {
195195

196196
this.log(`Validating generated OpenAPI Description`, this.logTypes.NOTICE);
197197

198-
await generator.validate().catch((err) => {
198+
const validationResults = await generator.validate().catch((err) => {
199199
this.log(
200200
`ERROR: An error was thrown validating the OpenAPI v3 Description`,
201201
this.logTypes.ERROR
202202
);
203203

204-
this.validationErrorDetails(err);
204+
throw new this.serverless.classes.Error(err);
205+
});
205206

206-
if (this.config.validationWarn === false) {
207-
let message = "Error validating OpenAPI Description:\r\n";
208-
for (const errorMessage of err) {
209-
message += `${errorMessage.message}\r\n`;
210-
}
207+
this.validationErrorDetails(validationResults);
211208

212-
throw new this.serverless.classes.Error(message);
209+
if (validationResults.length && this.config.validationWarn === false) {
210+
let message = "Error validating OpenAPI Description:\r\n";
211+
let shouldThrow = false;
212+
for (const error of validationResults) {
213+
message += `${error.message}\r\n`;
214+
if (error.severity === "error") {
215+
shouldThrow = true;
216+
}
213217
}
214-
});
218+
219+
if (shouldThrow) throw new this.serverless.classes.Error(message);
220+
}
215221

216222
this.log(
217223
"OpenAPI v3 Description Successfully Generated",
@@ -306,24 +312,30 @@ class OpenAPIGenerator {
306312
this.config = config;
307313
}
308314

309-
validationErrorDetails(validationError) {
310-
this.log(
311-
`${chalk.bold.yellow(
312-
"[VALIDATION]"
313-
)} Validation errors found in OpenAPI Description: \n`,
314-
this.logTypes.ERROR
315-
);
316-
317-
for (const error of validationError) {
315+
validationErrorDetails(validationErrors) {
316+
if (validationErrors.length) {
318317
this.log(
319-
`${chalk.bold.yellow("Message:")} ${error.message}`,
318+
`${chalk.bold.yellow(
319+
"[VALIDATION]"
320+
)} Validation errors found in OpenAPI Description: \n`,
320321
this.logTypes.ERROR
321322
);
322-
for (const location of error.location) {
323+
324+
for (const error of validationErrors) {
323325
this.log(
324-
`${chalk.bold.yellow("found at location:")} ${location.pointer}`,
326+
`${chalk.bold.red("Severity:")} ${error.severity}`,
325327
this.logTypes.ERROR
326328
);
329+
this.log(
330+
`${chalk.bold.yellow("Message:")} ${error.message}`,
331+
this.logTypes.ERROR
332+
);
333+
for (const location of error.location) {
334+
this.log(
335+
`${chalk.bold.yellow("found at location:")} ${location.pointer}`,
336+
this.logTypes.ERROR
337+
);
338+
}
327339
}
328340
}
329341
}

0 commit comments

Comments
 (0)