Skip to content

Commit

Permalink
feat(ns-openapi-3-1): add support for Tag Object
Browse files Browse the repository at this point in the history
  • Loading branch information
char0n committed Apr 26, 2021
1 parent 5bb977e commit e9c1f11
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 1 deletion.
2 changes: 1 addition & 1 deletion apidom/packages/apidom-ns-openapi-3-1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ Only fully implemented specification objects should be checked here.
- [ ] [Example Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#exampleObject)
- [ ] [Link Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#linkObject)
- [ ] [Header Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#headerObject)
- [ ] [Tag Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#tagObject)
- [x] [Tag Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#tagObject)
- [x] [Reference Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#referenceObject)
- [x] [Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#schemaObject)
- [x] [Discriminator Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#discriminatorObject)
Expand Down
37 changes: 37 additions & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/elements/Tag.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Attributes, Meta } from 'minim';
import { ObjectElement, StringElement } from 'apidom';

import ExternalDocumentationElement from './ExternalDocumentation';

class Tag extends ObjectElement {
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
super(content, meta, attributes);
this.element = 'tag';
}

get name(): StringElement {
return this.get('name');
}

set name(name: StringElement) {
this.set('name', name);
}

get description(): StringElement {
return this.get('description');
}

set description(description: StringElement) {
this.set('description', description);
}

get externalDocs(): ExternalDocumentationElement {
return this.get('externalDocs');
}

set externalDocs(externalDocs: ExternalDocumentationElement) {
this.set('externalDocs', externalDocs);
}
}

export default Tag;
1 change: 1 addition & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,5 @@ export { default as SecurityRequirementElement } from './elements/SecurityRequir
export { default as SecurityScheme } from './elements/SecurityScheme';
export { default as ServerElement } from './elements/Server';
export { default as ServerVariableElement } from './elements/ServerVariable';
export { default as TagElement } from './elements/Tag';
export { default as XmlElement } from './elements/Xml';
2 changes: 2 additions & 0 deletions apidom/packages/apidom-ns-openapi-3-1/src/namespace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import SecurityRequirementElement from './elements/SecurityRequirement';
import SecuritySchemeElement from './elements/SecurityScheme';
import ServerElement from './elements/Server';
import ServerVariableElement from './elements/ServerVariable';
import TagElement from './elements/Tag';
import XmlElement from './elements/Xml';

const openApi3_1 = {
Expand Down Expand Up @@ -58,6 +59,7 @@ const openApi3_1 = {
base.register('securityScheme', SecuritySchemeElement);
base.register('server', ServerElement);
base.register('serverVariable', ServerVariableElement);
base.register('tag', TagElement);
base.register('xml', XmlElement);

return base;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import SecurityRequirementElement from '../elements/SecurityRequirement';
import SecuritySchemeElement from '../elements/SecurityScheme';
import ServerElement from '../elements/Server';
import ServerVariableElement from '../elements/ServerVariable';
import TagElement from '../elements/Tag';
import XmlElement from '../elements/Xml';
import { createRefractor } from './index';

Expand Down Expand Up @@ -188,4 +189,5 @@ ServerVariableElement.refract = createRefractor([
'ServerVariable',
'$visitor',
]);
TagElement.refract = createRefractor(['visitors', 'document', 'objects', 'Tag', '$visitor']);
XmlElement.refract = createRefractor(['visitors', 'document', 'objects', 'XML', '$visitor']);
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ import FallbackVisitor from './visitors/FallbackVisitor';
import SecurityRequirementVisitor from './visitors/open-api-3-1/security-requirement';
import SecurityVisitor from './visitors/open-api-3-1/SecurityVisitor';
import ComponentsVisitor from './visitors/open-api-3-1/components';
import TagVisitor from './visitors/open-api-3-1/tag';
import TagNameVisitor from './visitors/open-api-3-1/tag/NameVisitor';
import TagDescriptionVisitor from './visitors/open-api-3-1/tag/DescriptionVisitor';
import ReferenceVisitor from './visitors/open-api-3-1/reference';
import Reference$RefVisitor from './visitors/open-api-3-1/reference/$RefVisitor';
import ReferenceSummaryVisitor from './visitors/open-api-3-1/reference/SummaryVisitor';
Expand Down Expand Up @@ -349,6 +352,16 @@ const specification = {
$visitor: CallbackVisitor,
fixedFields: {},
},
Tag: {
$visitor: TagVisitor,
fixedFields: {
name: TagNameVisitor,
description: TagDescriptionVisitor,
externalDocs: {
$ref: '#/visitors/document/objects/ExternalDocumentation',
},
},
},
Reference: {
$visitor: ReferenceVisitor,
fixedFields: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const DescriptionVisitor = stampit(FallbackVisitor);

export default DescriptionVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import stampit from 'stampit';

import FallbackVisitor from '../../FallbackVisitor';

const NameVisitor = stampit(FallbackVisitor);

export default NameVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import stampit from 'stampit';
import { always } from 'ramda';

import TagElement from '../../../../elements/Tag';
import FallbackVisitor from '../../FallbackVisitor';
import FixedFieldsVisitor from '../../generics/FixedFieldsVisitor';

const TagVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, {
props: {
specPath: always(['document', 'objects', 'Tag']),
canSupportSpecificationExtensions: true,
},
init() {
this.element = new TagElement();
},
});

export default TagVisitor;

0 comments on commit e9c1f11

Please sign in to comment.