From f116da37ec4efe1f35b3854bc1b998e65d955fd3 Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Mon, 28 Jun 2021 13:41:06 +0200 Subject: [PATCH] feat(ns-openapi-3-1): add additional metadata to outside context objs Affected specification Objects: - Path Item Object - Media Type Object - Header Object - Response Object Closes #450 --- .../src/elements/Response.ts | 33 ++- .../visitors/open-api-3-1/WebhooksVisitor.ts | 19 +- .../visitors/open-api-3-1/callback/index.ts | 15 +- .../open-api-3-1/components/HeadersVisitor.ts | 8 +- .../components/ResponsesVisitor.ts | 8 +- .../visitors/open-api-3-1/encoding/index.ts | 20 ++ .../visitors/open-api-3-1/parameter/index.ts | 20 ++ .../visitors/open-api-3-1/paths/index.ts | 18 ++ .../open-api-3-1/request-body/index.ts | 20 ++ .../visitors/open-api-3-1/response/index.ts | 30 +++ .../open-api-3-1/responses/DefaultVisitor.ts | 4 +- .../visitors/open-api-3-1/responses/index.ts | 8 +- .../refractor/__snapshots__/index.ts.snap | 200 +++++++++++++++++- .../test/refractor/fixtures/openapi.json | 8 +- 14 files changed, 373 insertions(+), 38 deletions(-) diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/elements/Response.ts b/apidom/packages/apidom-ns-openapi-3-1/src/elements/Response.ts index 08fa67b481..c41fc5b91e 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/elements/Response.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/elements/Response.ts @@ -1,6 +1,5 @@ -import { Attributes, Meta, ObjectElement } from 'minim'; - -import MediaType from './MediaType'; +import { Attributes, Meta } from 'minim'; +import { ObjectElement, StringElement } from 'apidom'; class Response extends ObjectElement { constructor(content?: Record, meta?: Meta, attributes?: Attributes) { @@ -8,13 +7,37 @@ class Response extends ObjectElement { this.element = 'response'; } - get contentProp(): Record { + get description(): StringElement { + return this.get('description'); + } + + set description(description: StringElement) { + this.set('description', description); + } + + get headers(): ObjectElement | undefined { + return this.get('headers'); + } + + set headers(headers: ObjectElement | undefined) { + this.set('headers', headers); + } + + get contentProp(): ObjectElement | undefined { return this.get('content'); } - set contentProp(contentProp: Record) { + set contentProp(contentProp: ObjectElement | undefined) { this.set('content', contentProp); } + + get links(): ObjectElement | undefined { + return this.get('links'); + } + + set links(links: ObjectElement | undefined) { + this.set('links', links); + } } export default Response; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/WebhooksVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/WebhooksVisitor.ts index fb552e029a..8b7a8eb4ba 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/WebhooksVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/WebhooksVisitor.ts @@ -1,11 +1,12 @@ import stampit from 'stampit'; -import { ObjectElement, Element } from 'apidom'; +import { ObjectElement, StringElement, Element } from 'apidom'; import ReferenceElement from '../../../elements/Reference'; +import PathItemElement from '../../../elements/PathItem'; import MapVisitor from '../generics/MapVisitor'; import FallbackVisitor from '../FallbackVisitor'; -import { isPathItemLikeElement, isReferenceLikeElement } from '../../predicates'; -import { isReferenceElement } from '../../../predicates'; +import { isReferenceLikeElement } from '../../predicates'; +import { isPathItemElement, isReferenceElement } from '../../../predicates'; const WebhooksVisitor = stampit(MapVisitor, FallbackVisitor, { props: { @@ -13,9 +14,7 @@ const WebhooksVisitor = stampit(MapVisitor, FallbackVisitor, { // eslint-disable-next-line no-nested-ternary return isReferenceLikeElement(element) ? ['document', 'objects', 'Reference'] - : isPathItemLikeElement(element) - ? ['document', 'objects', 'PathItem'] - : ['value']; + : ['document', 'objects', 'PathItem']; }, }, init() { @@ -27,10 +26,18 @@ const WebhooksVisitor = stampit(MapVisitor, FallbackVisitor, { // @ts-ignore const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement); + // decorate every ReferenceElement with metadata about their referencing type this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => { referenceElement.setMetaProperty('referenced-element', 'pathItem'); }); + // decorate every PathItemElement with Webhook name metadata + this.element + .filter(isPathItemElement) + .forEach((pathItemElement: PathItemElement, key: StringElement) => { + pathItemElement.setMetaProperty('webhook-name', key.toValue()); + }); + return result; }, }, diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/callback/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/callback/index.ts index 13591701fe..aeb2893484 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/callback/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/callback/index.ts @@ -1,14 +1,15 @@ import stampit from 'stampit'; import { test } from 'ramda'; -import { Element, ObjectElement } from 'apidom'; +import { Element, ObjectElement, StringElement } from 'apidom'; import CallbackElement from '../../../../elements/Callback'; +import PathItemElement from '../../../../elements/PathItem'; +import ReferenceElement from '../../../../elements/Reference'; import PatternedFieldsJsonObjectVisitor from '../../generics/PatternedFieldsVisitor'; import FallbackVisitor from '../../FallbackVisitor'; import MapVisitor from '../../generics/MapVisitor'; import { isReferenceLikeElement } from '../../../predicates'; -import { isReferenceElement } from '../../../../predicates'; -import ReferenceElement from '../../../../elements/Reference'; +import { isReferenceElement, isPathItemElement } from '../../../../predicates'; const CallbackVisitor = stampit(PatternedFieldsJsonObjectVisitor, FallbackVisitor, { props: { @@ -29,10 +30,18 @@ const CallbackVisitor = stampit(PatternedFieldsJsonObjectVisitor, FallbackVisito // @ts-ignore const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement); + // decorate every ReferenceElement with metadata about their referencing type this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => { referenceElement.setMetaProperty('referenced-element', 'pathItem'); }); + // decorate every PathItemElement with Callback Object expression metadata + this.element + .filter(isPathItemElement) + .forEach((pathItemElement: PathItemElement, key: StringElement) => { + pathItemElement.setMetaProperty('runtime-expression', key.toValue()); + }); + return result; }, }, diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/HeadersVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/HeadersVisitor.ts index 1d3361d76b..9ec6770e6d 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/HeadersVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/HeadersVisitor.ts @@ -31,12 +31,8 @@ const HeadersVisitor = stampit(MapVisitor, FallbackVisitor, { }); // decorate every HeaderElement with metadata about their name - this.element.forEach((value: Element, key: StringElement): void => { - if (!isHeaderElement(value)) return; - - const headerName = key.toValue(); - - value.setMetaProperty('headerName', headerName); + this.element.filter(isHeaderElement).forEach((value: Element, key: StringElement) => { + value.setMetaProperty('header-name', key.toValue()); }); return result; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/ResponsesVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/ResponsesVisitor.ts index f8b50940a2..29918e0a55 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/ResponsesVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/components/ResponsesVisitor.ts @@ -31,12 +31,8 @@ const ResponsesVisitor = stampit(MapVisitor, FallbackVisitor, { }); // decorate every ResponseElement with metadata about their status code - this.element.forEach((value: Element, key: StringElement): void => { - if (!isResponseElement(value)) return; - - const httpStatusCode = key.toValue(); - - value.setMetaProperty('httpStatusCode', httpStatusCode); + this.element.filter(isResponseElement).forEach((value: Element, key: StringElement) => { + value.setMetaProperty('http-status-code', key.toValue()); }); return result; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/encoding/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/encoding/index.ts index f8309b38ea..08493e36a9 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/encoding/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/encoding/index.ts @@ -1,9 +1,12 @@ import stampit from 'stampit'; import { always } from 'ramda'; +import { isObjectElement, ObjectElement, StringElement } from 'apidom'; import EncodingElement from '../../../../elements/Encoding'; +import HeaderElement from '../../../../elements/Header'; import FallbackVisitor from '../../FallbackVisitor'; import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor'; +import { isHeaderElement } from '../../../../predicates'; const EncodingVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { props: { @@ -13,6 +16,23 @@ const EncodingVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { init() { this.element = new EncodingElement(); }, + methods: { + ObjectElement(objectElement: ObjectElement) { + // @ts-ignore + const result = FixedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement); + + // decorate every Header with media type metadata + if (isObjectElement(this.element.headers)) { + this.element.headers + .filter(isHeaderElement) + .forEach((headerElement: HeaderElement, key: StringElement) => { + headerElement.setMetaProperty('header-name', key.toValue()); + }); + } + + return result; + }, + }, }); export default EncodingVisitor; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/parameter/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/parameter/index.ts index b90acde55c..ce1b7461c5 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/parameter/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/parameter/index.ts @@ -1,9 +1,12 @@ import stampit from 'stampit'; import { always } from 'ramda'; +import { isObjectElement, ObjectElement, StringElement } from 'apidom'; import ParameterElement from '../../../../elements/Parameter'; +import MediaTypeElement from '../../../../elements/MediaType'; import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor'; import FallbackVisitor from '../../FallbackVisitor'; +import { isMediaTypeElement } from '../../../../predicates'; const ParameterVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { props: { @@ -13,6 +16,23 @@ const ParameterVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { init() { this.element = new ParameterElement(); }, + methods: { + ObjectElement(objectElement: ObjectElement) { + // @ts-ignore + const result = FixedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement); + + // decorate every MediaTypeElement with media type metadata + if (isObjectElement(this.element.contentProp)) { + this.element.contentProp + .filter(isMediaTypeElement) + .forEach((mediaTypeElement: MediaTypeElement, key: StringElement) => { + mediaTypeElement.setMetaProperty('media-type', key.toValue()); + }); + } + + return result; + }, + }, }); export default ParameterVisitor; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/paths/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/paths/index.ts index 79935c23af..f812ea0d9c 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/paths/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/paths/index.ts @@ -1,9 +1,12 @@ import stampit from 'stampit'; import { test, always } from 'ramda'; +import { ObjectElement, StringElement } from 'apidom'; import PathsElement from '../../../../elements/Paths'; +import PathItemElement from '../../../../elements/PathItem'; import PatternedFieldsVisitor from '../../generics/PatternedFieldsVisitor'; import FallbackVisitor from '../../FallbackVisitor'; +import { isPathItemElement } from '../../../../predicates'; const PathsVisitor = stampit(PatternedFieldsVisitor, FallbackVisitor, { props: { @@ -14,6 +17,21 @@ const PathsVisitor = stampit(PatternedFieldsVisitor, FallbackVisitor, { init() { this.element = new PathsElement(); }, + methods: { + ObjectElement(objectElement: ObjectElement) { + // @ts-ignore + const result = PatternedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement); + + // decorate every PathItemElement with path metadata + this.element + .filter(isPathItemElement) + .forEach((pathItemElement: PathItemElement, key: StringElement) => { + pathItemElement.setMetaProperty('path', key.toValue()); + }); + + return result; + }, + }, }); export default PathsVisitor; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/request-body/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/request-body/index.ts index 494fa188a2..945d6181ca 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/request-body/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/request-body/index.ts @@ -1,9 +1,12 @@ import stampit from 'stampit'; import { always } from 'ramda'; +import { StringElement, ObjectElement, isObjectElement } from 'apidom'; import RequestBodyElement from '../../../../elements/RequestBody'; +import MediaTypeElement from '../../../../elements/MediaType'; import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor'; import FallbackVisitor from '../../FallbackVisitor'; +import { isMediaTypeElement } from '../../../../predicates'; const RequestBodyVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { props: { @@ -12,6 +15,23 @@ const RequestBodyVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { init() { this.element = new RequestBodyElement(); }, + methods: { + ObjectElement(objectElement: ObjectElement) { + // @ts-ignore + const result = FixedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement); + + // decorate every MediaTypeElement with media type metadata + if (isObjectElement(this.element.contentProp)) { + this.element.contentProp + .filter(isMediaTypeElement) + .forEach((mediaTypeElement: MediaTypeElement, key: StringElement) => { + mediaTypeElement.setMetaProperty('media-type', key.toValue()); + }); + } + + return result; + }, + }, }); export default RequestBodyVisitor; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/response/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/response/index.ts index c842735cc0..4be1b25df6 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/response/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/response/index.ts @@ -1,9 +1,13 @@ import stampit from 'stampit'; import { always } from 'ramda'; +import { isObjectElement, ObjectElement, StringElement } from 'apidom'; import ResponseElement from '../../../../elements/Response'; +import MediaTypeElement from '../../../../elements/MediaType'; +import HeaderElement from '../../../../elements/Header'; import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor'; import FallbackVisitor from '../../FallbackVisitor'; +import { isHeaderElement, isMediaTypeElement } from '../../../../predicates'; const ResponseVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { props: { @@ -12,6 +16,32 @@ const ResponseVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { init() { this.element = new ResponseElement(); }, + methods: { + ObjectElement(objectElement: ObjectElement) { + // @ts-ignore + const result = FixedFieldsVisitor.compose.methods.ObjectElement.call(this, objectElement); + + // decorate every MediaTypeElement with media type metadata + if (isObjectElement(this.element.contentProp)) { + this.element.contentProp + .filter(isMediaTypeElement) + .forEach((mediaTypeElement: MediaTypeElement, key: StringElement) => { + mediaTypeElement.setMetaProperty('media-type', key.toValue()); + }); + } + + // decorate every MediaTypeElement with media type metadata + if (isObjectElement(this.element.headers)) { + this.element.headers + .filter(isHeaderElement) + .forEach((headerElement: HeaderElement, key: StringElement) => { + headerElement.setMetaProperty('header-name', key.toValue()); + }); + } + + return result; + }, + }, }); export default ResponseVisitor; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/DefaultVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/DefaultVisitor.ts index 85c2849e65..de495983a8 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/DefaultVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/DefaultVisitor.ts @@ -3,7 +3,7 @@ import { T as stubTrue } from 'ramda'; import { ObjectElement } from 'apidom'; import { isReferenceLikeElement } from '../../../predicates'; -import { isReferenceElement } from '../../../../predicates'; +import { isReferenceElement, isResponseElement } from '../../../../predicates'; import AlternatingVisitor from '../../generics/AlternatingVisitor'; import FallbackVisitor from '../../FallbackVisitor'; @@ -22,6 +22,8 @@ const DefaultVisitor = stampit(AlternatingVisitor, FallbackVisitor, { // decorate ReferenceElement with type of referencing element if (isReferenceElement(this.element)) { this.element.setMetaProperty('referenced-element', 'response'); + } else if (isResponseElement(this.element)) { + this.element.setMetaProperty('http-status-code', 'default'); } return result; diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/index.ts index ed1865b7d7..2425da213a 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/responses/index.ts @@ -36,14 +36,10 @@ const ResponsesVisitor = stampit(MixedFieldsVisitor, FallbackVisitor, { }); // decorate every ResponseElement with metadata about their status code - this.element.forEach((value: Element, key: StringElement): void => { - if (!isResponseElement(value)) return; - + this.element.filter(isResponseElement).forEach((value: Element, key: StringElement) => { const httpStatusCode = key.toValue(); - if (!this.fieldPatternPredicate(httpStatusCode)) return; - - value.setMetaProperty('httpStatusCode', httpStatusCode); + value.setMetaProperty('http-status-code', httpStatusCode); }); return result; diff --git a/apidom/packages/apidom-ns-openapi-3-1/test/refractor/__snapshots__/index.ts.snap b/apidom/packages/apidom-ns-openapi-3-1/test/refractor/__snapshots__/index.ts.snap index 12999180f1..d8e3290ab2 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/test/refractor/__snapshots__/index.ts.snap +++ b/apidom/packages/apidom-ns-openapi-3-1/test/refractor/__snapshots__/index.ts.snap @@ -700,6 +700,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "pathItem", + "meta": { + "path": { + "element": "string", + "content": "/path1" + } + }, "content": [ { "element": "member", @@ -1320,6 +1326,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "mediaType", + "meta": { + "media-type": { + "element": "string", + "content": "application/json" + } + }, "content": [ { "element": "member", @@ -1771,6 +1783,10 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "headerName": { "element": "string", "content": "X-Rate-Limit-Limit" + }, + "header-name": { + "element": "string", + "content": "X-Rate-Limit-Limit" } }, "content": [ @@ -2085,6 +2101,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "response", + "meta": { + "http-status-code": { + "element": "string", + "content": "default" + } + }, "content": [ { "element": "member", @@ -2110,6 +2132,71 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra } } }, + { + "element": "member", + "meta": { + "classes": { + "element": "array", + "content": [ + { + "element": "string", + "content": "fixed-field" + } + ] + } + }, + "content": { + "key": { + "element": "string", + "content": "content" + }, + "value": { + "element": "object", + "meta": { + "classes": { + "element": "array", + "content": [ + { + "element": "string", + "content": "content" + } + ] + } + }, + "content": [ + { + "element": "member", + "meta": { + "classes": { + "element": "array", + "content": [ + { + "element": "string", + "content": "patterned-field" + } + ] + } + }, + "content": { + "key": { + "element": "string", + "content": "application/json" + }, + "value": { + "element": "mediaType", + "meta": { + "media-type": { + "element": "string", + "content": "application/json" + } + } + } + } + } + ] + } + } + }, { "element": "member", "meta": { @@ -2559,6 +2646,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "pathItem", + "meta": { + "runtime-expression": { + "element": "string", + "content": "{$request.query.queryUrl}" + } + }, "content": [ { "element": "member", @@ -2684,6 +2777,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "mediaType", + "meta": { + "media-type": { + "element": "string", + "content": "application/json" + } + }, "content": [ { "element": "member", @@ -2797,7 +2896,7 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "value": { "element": "response", "meta": { - "httpStatusCode": { + "http-status-code": { "element": "string", "content": "200" } @@ -4069,6 +4168,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "pathItem", + "meta": { + "path": { + "element": "string", + "content": "/path2" + } + }, "content": [ { "element": "member", @@ -4202,6 +4307,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "pathItem", + "meta": { + "webhook-name": { + "element": "string", + "content": "webhook1" + } + }, "content": [ { "element": "member", @@ -4624,7 +4735,7 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "value": { "element": "response", "meta": { - "httpStatusCode": { + "http-status-code": { "element": "string", "content": "201" } @@ -4710,6 +4821,10 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "headerName": { "element": "string", "content": "Content-Type" + }, + "header-name": { + "element": "string", + "content": "Content-Type" } }, "content": [ @@ -5071,6 +5186,71 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "content": true } } + }, + { + "element": "member", + "meta": { + "classes": { + "element": "array", + "content": [ + { + "element": "string", + "content": "fixed-field" + } + ] + } + }, + "content": { + "key": { + "element": "string", + "content": "content" + }, + "value": { + "element": "object", + "meta": { + "classes": { + "element": "array", + "content": [ + { + "element": "string", + "content": "content" + } + ] + } + }, + "content": [ + { + "element": "member", + "meta": { + "classes": { + "element": "array", + "content": [ + { + "element": "string", + "content": "patterned-field" + } + ] + } + }, + "content": { + "key": { + "element": "string", + "content": "application/json" + }, + "value": { + "element": "mediaType", + "meta": { + "media-type": { + "element": "string", + "content": "application/json" + } + } + } + } + } + ] + } + } } ] } @@ -5591,7 +5771,7 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "value": { "element": "header", "meta": { - "headerName": { + "header-name": { "element": "string", "content": "Content-Type" } @@ -6292,6 +6472,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "pathItem", + "meta": { + "runtime-expression": { + "element": "string", + "content": "{$request.query.queryUrl}" + } + }, "content": [ { "element": "member", @@ -6417,6 +6603,12 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra }, "value": { "element": "mediaType", + "meta": { + "media-type": { + "element": "string", + "content": "application/json" + } + }, "content": [ { "element": "member", @@ -6530,7 +6722,7 @@ exports[`refractor given generic ApiDOM object in OpenApi 3.1 shape should refra "value": { "element": "response", "meta": { - "httpStatusCode": { + "http-status-code": { "element": "string", "content": "200" } diff --git a/apidom/packages/apidom-ns-openapi-3-1/test/refractor/fixtures/openapi.json b/apidom/packages/apidom-ns-openapi-3-1/test/refractor/fixtures/openapi.json index d370a269e3..b64f77fd52 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/test/refractor/fixtures/openapi.json +++ b/apidom/packages/apidom-ns-openapi-3-1/test/refractor/fixtures/openapi.json @@ -105,6 +105,9 @@ "responses": { "default": { "description": "default response", + "content": { + "application/json": {} + }, "links": { "link1": { "operationRef": "https://example.com/external-link", @@ -266,7 +269,10 @@ "description": "parameter2 description", "required": false, "deprecated": false, - "allowEmptyValue": true + "allowEmptyValue": true, + "content": { + "application/json": {} + } }, "parameter3": { "$ref": "#/components/parameters/parameter2"