Skip to content

Commit

Permalink
feat(ns-asyncapi-2-0): add support for Tag Object
Browse files Browse the repository at this point in the history
Refs #387
  • Loading branch information
char0n committed May 27, 2021
1 parent e4a66e9 commit d31f532
Show file tree
Hide file tree
Showing 10 changed files with 85 additions and 1 deletion.
2 changes: 1 addition & 1 deletion apidom/packages/apidom-ns-asyncapi-2-0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ Only fully implemented specification objects should be checked here.
- [ ] [Message Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#messageObject)
- [ ] [Message Trait Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#messageTraitObject)
- [ ] [Tags Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#tagsObject)
- [ ] [Tag Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#tag-object)
- [x] [Tag Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#tag-object)
- [x] [External Documentation Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#externalDocumentationObject)
- [ ] [Components Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#componentsObject) (partial)
- [x] [Reference Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#referenceObject)
Expand Down
37 changes: 37 additions & 0 deletions apidom/packages/apidom-ns-asyncapi-2-0/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-asyncapi-2-0/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,4 @@ export { default as ServerElement } from './elements/Server';
export { default as ServerBindingsElement } from './elements/ServerBindings';
export { default as ServersElement } from './elements/Servers';
export { default as ServerVariableElement } from './elements/ServerVariable';
export { default as TagElement } from './elements/Tag';
2 changes: 2 additions & 0 deletions apidom/packages/apidom-ns-asyncapi-2-0/src/namespace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import ServerElement from './elements/Server';
import ServerBindingsElement from './elements/ServerBindings';
import ServersElement from './elements/Servers';
import ServerVariableElement from './elements/ServerVariable';
import TagElement from './elements/Tag';

const asyncApi2_0 = {
namespace: (options: NamespacePluginOptions) => {
Expand Down Expand Up @@ -55,6 +56,7 @@ const asyncApi2_0 = {
base.register('serverBindings', ServerBindingsElement);
base.register('servers', ServersElement);
base.register('serverVariable', ServerVariableElement);
base.register('tag', TagElement);

return base;
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import ServerElement from '../elements/Server';
import ServerBindingsElement from '../elements/ServerBindings';
import ServersElement from '../elements/Servers';
import ServerVariableElement from '../elements/ServerVariable';
import TagElement from '../elements/Tag';
import { createRefractor } from './index';

// register refractors specific to element types
Expand Down Expand Up @@ -183,3 +184,4 @@ ServerVariableElement.refract = createRefractor([
'ServerVariable',
'$visitor',
]);
TagElement.refract = createRefractor(['visitors', 'document', 'objects', 'Tag', '$visitor']);
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ import ComponentsVisitor from './visitors/async-api-2-0/components';
import ComponentsSchemasVisitor from './visitors/async-api-2-0/components/SchemasVisitor';
import ComponentParametersVisitor from './visitors/async-api-2-0/components/ParametersVisitor';
import OperationVisitor from './visitors/async-api-2-0/operation';
import TagVisitor from './visitors/async-api-2-0/tag';
import TagNameVisitor from './visitors/async-api-2-0/tag/NameVisitor';
import TagDescriptionVisitor from './visitors/async-api-2-0/tag/DescriptionVisitor';
import ChannelsVisitor from './visitors/async-api-2-0/channels';
import ChannelBindingsVisitor from './visitors/async-api-2-0/channel-bindings';
import ChannelItemVisitor from './visitors/async-api-2-0/channel-item';
Expand Down Expand Up @@ -190,6 +193,16 @@ const specification = {
$visitor: OperationVisitor,
fixedFields: {},
},
Tag: {
$visitor: TagVisitor,
fixedFields: {
name: TagNameVisitor,
description: TagDescriptionVisitor,
externalDocs: {
$ref: '#/visitors/document/objects/ExternalDocumentation',
},
},
},
ExternalDocumentation: {
$visitor: ExternalDocumentationVisitor,
fixedFields: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import FallbackVisitor from '../../FallbackVisitor';

const DescriptionVisitor = FallbackVisitor;

export default DescriptionVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import FallbackVisitor from '../../FallbackVisitor';

const NameVisitor = 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;
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,6 @@ export const keyMap = {
ServerBindingElement: ['content'],
ServersElement: ['content'],
ServerVariableElement: ['content'],
TagElement: ['content'],
...keyMapBase,
};

0 comments on commit d31f532

Please sign in to comment.