Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit 9ae7df3

Browse files
committed
feat(oas3): warn for unsupported 3.1 feature jsonSchemaDialect
1 parent ff27419 commit 9ae7df3

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

packages/openapi3-parser/lib/parser/oas/parseOpenAPIObject.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const parseSecurityRequirementsArray = require('./parseSecurityRequirementsArray
1919
const name = 'OpenAPI Object';
2020
const requiredKeys = ['openapi', 'info', 'paths'];
2121
const unsupportedKeys = ['tags', 'externalDocs'];
22+
const unsupportedOpenAPI31Keys = ['webhooks', 'jsonSchemaDialect'];
2223

2324
/**
2425
* Returns whether the given member element is unsupported
@@ -28,6 +29,7 @@ const unsupportedKeys = ['tags', 'externalDocs'];
2829
* @private
2930
*/
3031
const isUnsupportedKey = R.anyPass(R.map(hasKey, unsupportedKeys));
32+
const isUnsupportedOpenAPI31Key = R.anyPass(R.map(hasKey, unsupportedOpenAPI31Keys));
3133

3234
function parseOASObject(context, object) {
3335
const { namespace } = context;
@@ -52,7 +54,7 @@ function parseOASObject(context, object) {
5254
[isExtension, () => new namespace.elements.ParseResult()],
5355

5456
[
55-
R.both(hasKey('webhooks'), isOpenAPI31OrHigher),
57+
R.both(isUnsupportedOpenAPI31Key, isOpenAPI31OrHigher),
5658
createUnsupportedMemberWarning(namespace, name),
5759
],
5860
[isUnsupportedKey, createUnsupportedMemberWarning(namespace, name)],

packages/openapi3-parser/test/unit/parser/oas/parseOpenAPIObject-test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,38 @@ describe('#parseOpenAPIObject', () => {
255255
expect(parseResult.warnings.get(1).toValue()).to.equal("'OpenAPI Object' contains unsupported key 'webhooks'");
256256
});
257257

258+
it('provides warning for invalid key jsonSchemaDialect in OpenAPI 3.0', () => {
259+
const object = new namespace.elements.Object({
260+
openapi: '3.0.0',
261+
info: {
262+
title: 'My API',
263+
version: '1.0.0',
264+
},
265+
paths: {},
266+
jsonSchemaDialect: 'https://spec.openapis.org/oas/3.1/dialect/base',
267+
});
268+
269+
const parseResult = parse(context, object);
270+
271+
expect(parseResult).to.contain.warning("'OpenAPI Object' contains invalid key 'jsonSchemaDialect'");
272+
});
273+
274+
it('provides warning for unsupported jsonSchemaDialect key in OpenAPI 3.1', () => {
275+
const object = new namespace.elements.Object({
276+
openapi: '3.1.0',
277+
info: {
278+
title: 'My API',
279+
version: '1.0.0',
280+
},
281+
paths: {},
282+
jsonSchemaDialect: 'https://spec.openapis.org/oas/3.1/dialect/base',
283+
});
284+
285+
const parseResult = parse(context, object);
286+
287+
expect(parseResult.warnings.get(1).toValue()).to.equal("'OpenAPI Object' contains unsupported key 'jsonSchemaDialect'");
288+
});
289+
258290
it('provides warning for invalid key webhooks in OpenAPI 3.0', () => {
259291
const object = new namespace.elements.Object({
260292
openapi: '3.0.0',

0 commit comments

Comments
 (0)