diff --git a/packages/openapi3-parser/CHANGELOG.md b/packages/openapi3-parser/CHANGELOG.md index cfe3fff11..01e6264f9 100644 --- a/packages/openapi3-parser/CHANGELOG.md +++ b/packages/openapi3-parser/CHANGELOG.md @@ -1,5 +1,11 @@ # API Elements: OpenAPI 3 Parser Changelog +## Unreleased + +### Enhancements + +- added a Link element to the specific format/version in the parse result. + ## 0.15.0 (2020-08-06) ### Enhancements diff --git a/packages/openapi3-parser/lib/parser.js b/packages/openapi3-parser/lib/parser.js index 4e333dad4..26121ba3d 100644 --- a/packages/openapi3-parser/lib/parser.js +++ b/packages/openapi3-parser/lib/parser.js @@ -3,7 +3,9 @@ const R = require('ramda'); const parseYAML = require('./parser/parseYAML'); -const { isAnnotation, isWarningAnnotation, isObject } = require('./predicates'); +const { + isAnnotation, isWarningAnnotation, isObject, isMember, hasKey, isString, +} = require('./predicates'); const { createError } = require('./elements'); const pipeParseResult = require('./pipeParseResult'); @@ -126,7 +128,7 @@ function parse(source, context) { R.unless(isObjectOrAnnotation, createError(context.namespace, 'Source document is not an object')), R.unless(isAnnotation, parseOpenAPIObject(context))); - return R.chain( + const parseResult = R.chain( R.pipe( parseDocument, deduplicateUnsupportedAnnotations(context.namespace), @@ -134,6 +136,29 @@ function parse(source, context) { ), document ); + + const formatVersion = R.tryCatch( + R.pipe( + R.prop('content'), + R.find(isObject), + R.prop('content'), + R.find(R.both(isMember, hasKey('openapi'))), + R.path(['content', 'value']), + R.ifElse(isString, R.prop('content'), R.always('3.0.3')) + ), R.always('3.0.3') + )(document); + + const formatLink = `https://spec.openapis.org/oas/v${formatVersion}`; + const { Link } = context.namespace.elements; + const link = new Link(); + + link.title = `OpenAPI ${formatVersion}`; + link.relation = 'via'; + link.href = formatLink; + + parseResult.links.push(link); + + return parseResult; } module.exports = parse; diff --git a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.json b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.json index 923a7a5a4..d8a05b983 100644 --- a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.json +++ b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.sourcemap.json b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.sourcemap.json index 8501f67e9..3d727a8dc 100644 --- a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.sourcemap.json +++ b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-does-not-exist.sourcemap.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.json b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.json index c88a4ee9c..15f80bea8 100644 --- a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.json +++ b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.sourcemap.json b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.sourcemap.json index 8c3555125..cb6259f24 100644 --- a/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.sourcemap.json +++ b/packages/openapi3-parser/test/integration/fixtures/auth-scheme-global.sourcemap.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/auth-scheme.json b/packages/openapi3-parser/test/integration/fixtures/auth-scheme.json index fd1d82a10..98b4e43c5 100644 --- a/packages/openapi3-parser/test/integration/fixtures/auth-scheme.json +++ b/packages/openapi3-parser/test/integration/fixtures/auth-scheme.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/auth-scheme.sourcemap.json b/packages/openapi3-parser/test/integration/fixtures/auth-scheme.sourcemap.json index 3175f5ab2..58e9e7863 100644 --- a/packages/openapi3-parser/test/integration/fixtures/auth-scheme.sourcemap.json +++ b/packages/openapi3-parser/test/integration/fixtures/auth-scheme.sourcemap.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-examples.json b/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-examples.json index 8affb954e..cf2d6b408 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-examples.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-examples.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema-multiple.json b/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema-multiple.json index e25854522..dba9056d2 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema-multiple.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema-multiple.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema.json b/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema.json index 1f2af80c3..8f1d91151 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/media-type-object-schema.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/operation-object-requestBody.json b/packages/openapi3-parser/test/integration/fixtures/components/operation-object-requestBody.json index e36f47010..aca7798fd 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/operation-object-requestBody.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/operation-object-requestBody.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-alias.json b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-alias.json index 97906adc8..cb81dc154 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-alias.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-alias.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-multiple.json b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-multiple.json index 18b37e317..7404d24f1 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-multiple.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-multiple.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-unsupported-parameter.json b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-unsupported-parameter.json index ee553bd01..e2ae493f9 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-unsupported-parameter.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters-unsupported-parameter.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters.json b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters.json index 825604169..a6b2e8a0e 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/path-item-object-parameters.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers-multiple.json b/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers-multiple.json index 6db5bfc87..67e78114c 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers-multiple.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers-multiple.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers.json b/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers.json index 8b8ece3ae..d8f0f2e1e 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/response-object-headers.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-multiple.json b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-multiple.json index 26a9e2a42..3c41f5b11 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-multiple.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-multiple.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-headers.json b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-headers.json index fc6f3162c..0bec39c3a 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-headers.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-headers.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-schema.json b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-schema.json index f93ed1a49..82f66c777 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-schema.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response-with-schema.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response.json b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response.json index 4dc22083a..84cfb6241 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/responses-object-response.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/schema-alias.json b/packages/openapi3-parser/test/integration/fixtures/components/schema-alias.json index 1947f98df..3f923bb29 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/schema-alias.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/schema-alias.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/components/schema-object-circular.json b/packages/openapi3-parser/test/integration/fixtures/components/schema-object-circular.json index 8b056ae76..8713c79e6 100644 --- a/packages/openapi3-parser/test/integration/fixtures/components/schema-object-circular.json +++ b/packages/openapi3-parser/test/integration/fixtures/components/schema-object-circular.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/messageBody.json b/packages/openapi3-parser/test/integration/fixtures/messageBody.json index cf0b53356..42e04cf2f 100644 --- a/packages/openapi3-parser/test/integration/fixtures/messageBody.json +++ b/packages/openapi3-parser/test/integration/fixtures/messageBody.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.1" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.1" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/petstore.json b/packages/openapi3-parser/test/integration/fixtures/petstore.json index ab58b6e42..1edf876b2 100644 --- a/packages/openapi3-parser/test/integration/fixtures/petstore.json +++ b/packages/openapi3-parser/test/integration/fixtures/petstore.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/petstore.sourcemap.json b/packages/openapi3-parser/test/integration/fixtures/petstore.sourcemap.json index e4fa50a63..ecd88bd88 100644 --- a/packages/openapi3-parser/test/integration/fixtures/petstore.sourcemap.json +++ b/packages/openapi3-parser/test/integration/fixtures/petstore.sourcemap.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/integration/fixtures/regression/dredd-1685.json b/packages/openapi3-parser/test/integration/fixtures/regression/dredd-1685.json index 31273df0d..e3c5ff1a6 100644 --- a/packages/openapi3-parser/test/integration/fixtures/regression/dredd-1685.json +++ b/packages/openapi3-parser/test/integration/fixtures/regression/dredd-1685.json @@ -1,5 +1,31 @@ { "element": "parseResult", + "meta": { + "links": { + "element": "array", + "content": [ + { + "element": "link", + "meta": { + "title": { + "element": "string", + "content": "OpenAPI 3.0.0" + } + }, + "attributes": { + "relation": { + "element": "string", + "content": "via" + }, + "href": { + "element": "string", + "content": "https://spec.openapis.org/oas/v3.0.0" + } + } + } + ] + } + }, "content": [ { "element": "category", diff --git a/packages/openapi3-parser/test/unit/parser-test.js b/packages/openapi3-parser/test/unit/parser-test.js index 2837c8eed..10fd30b35 100644 --- a/packages/openapi3-parser/test/unit/parser-test.js +++ b/packages/openapi3-parser/test/unit/parser-test.js @@ -2,10 +2,10 @@ const { Fury } = require('@apielements/core'); const { expect } = require('./chai'); const parse = require('../../lib/parser'); +const Context = require('../../lib/context'); const { minim: namespace } = new Fury(); - -const Context = require('../../lib/context'); +const { Link } = namespace.elements; describe('#parse', () => { let context; @@ -40,4 +40,37 @@ describe('#parse', () => { expect(parseResult.length).to.equal(1); expect(parseResult.api.title.toValue()).to.equal('My API'); }); + + it('add the format link', () => { + const source = 'openapi: "3.0.0"\ninfo: {title: My API, version: 1.0.0}\npaths: {}\n'; + const parseResult = parse(source, context); + + const link = parseResult.links.get(0); + expect(link).to.be.instanceof(Link); + expect(link.relation.toValue()).to.equal('via'); + expect(link.title.toValue()).to.equal('OpenAPI 3.0.0'); + expect(link.href.toValue()).to.equal('https://spec.openapis.org/oas/v3.0.0'); + }); + + it('add OpenAPI 3.0.3 format link when fails to parse an OAS3 document', () => { + const source = '{}{}'; + const parseResult = parse(source, context); + + const link = parseResult.links.get(0); + expect(link).to.be.instanceof(Link); + expect(link.relation.toValue()).to.equal('via'); + expect(link.title.toValue()).to.equal('OpenAPI 3.0.3'); + expect(link.href.toValue()).to.equal('https://spec.openapis.org/oas/v3.0.3'); + }); + + it('add OpenAPI 3.0.3 format link when OpenAPI property is not a string', () => { + const source = 'openapi: {"test": "3.0.0"}\ninfo: {title: My API, version: 1.0.0}\npaths: {}\n'; + const parseResult = parse(source, context); + + const link = parseResult.links.get(0); + expect(link).to.be.instanceof(Link); + expect(link.relation.toValue()).to.equal('via'); + expect(link.title.toValue()).to.equal('OpenAPI 3.0.3'); + expect(link.href.toValue()).to.equal('https://spec.openapis.org/oas/v3.0.3'); + }); });