From 1eeb98d53834f1fffe0d895fdcfb1e51135b759c Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Fri, 9 Apr 2021 16:25:34 +0200 Subject: [PATCH] fix(ns-openapi-3-1): fix bugs in Schema Object refracting Closes #337 --- .../schema/DependentRequiredVisitor.ts | 8 ++++--- .../open-api-3-1/schema/ExamplesVisitor.ts | 4 +++- .../open-api-3-1/schema/RequiredVisitor.ts | 4 +++- .../visitors/open-api-3-1/schema/index.ts | 22 ++++++++----------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.ts index 8dbbb36f5c..e933f889d5 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.ts @@ -1,15 +1,17 @@ import stampit from 'stampit'; -import { ArrayElement } from 'apidom'; +import { ObjectElement, BREAK } from 'apidom'; import FallbackVisitor from '../../FallbackVisitor'; import { appendMetadata } from '../../../metadata'; const DependentRequiredVisitor = stampit(FallbackVisitor, { methods: { - ArrayElement(arrayElement: ArrayElement) { - this.element = arrayElement.clone(); + ObjectElement(objectElement: ObjectElement) { + this.element = objectElement.clone(); appendMetadata(['json-schema-dependentRequired'], this.element); + + return BREAK; }, }, }); diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.ts index f5f5d886fa..6df62cabef 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.ts @@ -1,5 +1,5 @@ import stampit from 'stampit'; -import { ArrayElement } from 'apidom'; +import { ArrayElement, BREAK } from 'apidom'; import FallbackVisitor from '../../FallbackVisitor'; import { appendMetadata } from '../../../metadata'; @@ -10,6 +10,8 @@ const ExamplesVisitor = stampit(FallbackVisitor, { this.element = arrayElement.clone(); appendMetadata(['json-schema-examples'], this.element); + + return BREAK; }, }, }); diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/RequiredVisitor.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/RequiredVisitor.ts index d3970e3705..6a51bd1fb3 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/RequiredVisitor.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/RequiredVisitor.ts @@ -1,5 +1,5 @@ import stampit from 'stampit'; -import { ArrayElement } from 'apidom'; +import { ArrayElement, BREAK } from 'apidom'; import FallbackVisitor from '../../FallbackVisitor'; import { appendMetadata } from '../../../metadata'; @@ -10,6 +10,8 @@ const RequiredVisitor = stampit(FallbackVisitor, { this.element = arrayElement.clone(); appendMetadata(['json-schema-required'], this.element); + + return BREAK; }, }, }); diff --git a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/index.ts b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/index.ts index 4a2f3de83b..22432d4ea0 100644 --- a/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/index.ts +++ b/apidom/packages/apidom-ns-openapi-3-1/src/refractor/visitors/open-api-3-1/schema/index.ts @@ -1,21 +1,17 @@ import stampit from 'stampit'; -import { ObjectElement, BREAK } from 'apidom'; +import { always } from 'ramda'; import SchemaElement from '../../../../elements/Schema'; import FallbackVisitor from '../../FallbackVisitor'; -import SpecificationVisitor from '../../SpecificationVisitor'; +import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor'; -const SchemaVisitor = stampit(SpecificationVisitor, FallbackVisitor, { - methods: { - ObjectElement(objectElement: ObjectElement) { - // @ts-ignore - const schemaElement = new SchemaElement(objectElement.content); - - this.copyMetaAndAttributes(objectElement, schemaElement); - - this.element = schemaElement; - return BREAK; - }, +const SchemaVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, { + props: { + specPath: always(['document', 'objects', 'Schema']), + canSupportSpecificationExtensions: true, + }, + init() { + this.element = new SchemaElement(); }, });