Skip to content

Commit d971cb9

Browse files
committed
feat(ns-asyncapi-2-0): add full support for AsyncApi2_0 Object
Refs #387
1 parent 3460aea commit d971cb9

File tree

4 files changed

+49
-15
lines changed

4 files changed

+49
-15
lines changed

apidom/packages/apidom-ns-asyncapi-2-0/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ Only fully implemented specification objects should be checked here.
138138

139139
### Specification Objects
140140

141-
- [ ] [AsyncAPI Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#A2SObject) (partial)
141+
- [x] [AsyncAPI Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#A2SObject)
142142
- [x] [AsyncAPI Version String](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#A2SVersionString)
143143
- [x] [Identifier](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#A2SIdString)
144144
- [x] [Info Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#A2SIdString)

apidom/packages/apidom-ns-asyncapi-2-0/src/elements/AsyncApi2-0.ts

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import { Attributes, Meta, ObjectElement } from 'minim';
22

33
import AsyncApiVersionElement from './AsyncApiVersion';
4+
import DefaultContentTypeElement from './DefaultContentType';
45
import IdentifierElement from './Identifier';
56
import ComponentsElement from './Components';
67
import InfoElement from './Info';
78
import ChannelsElement from './Channels';
89
import ServersElement from './Servers';
10+
import TagsElement from './Tags';
11+
import ExternalDocumentationElement from './ExternalDocumentation';
912

1013
class AsyncApi2_0 extends ObjectElement {
1114
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
@@ -14,52 +17,76 @@ class AsyncApi2_0 extends ObjectElement {
1417
this.classes.push('api');
1518
}
1619

17-
get asyncapi(): AsyncApiVersionElement {
20+
get asyncapi(): AsyncApiVersionElement | undefined {
1821
return this.get('asyncapi');
1922
}
2023

21-
set asyncapi(asyncapi: AsyncApiVersionElement) {
24+
set asyncapi(asyncapi: AsyncApiVersionElement | undefined) {
2225
this.set('asyncapi', asyncapi);
2326
}
2427

25-
get id(): IdentifierElement {
28+
get id(): IdentifierElement | undefined {
2629
return this.get('id');
2730
}
2831

29-
set id(id: IdentifierElement) {
32+
set id(id: IdentifierElement | undefined) {
3033
this.set('id', id);
3134
}
3235

33-
get info(): InfoElement {
36+
get info(): InfoElement | undefined {
3437
return this.get('info');
3538
}
3639

37-
set info(info: InfoElement) {
40+
set info(info: InfoElement | undefined) {
3841
this.set('info', info);
3942
}
4043

41-
get channels(): ChannelsElement {
44+
get servers(): ServersElement | undefined {
45+
return this.get('servers');
46+
}
47+
48+
set servers(servers: ServersElement | undefined) {
49+
this.set('servers', servers);
50+
}
51+
52+
get defaultContentType(): DefaultContentTypeElement | undefined {
53+
return this.get('defaultContentType');
54+
}
55+
56+
set defaultContentType(defaultContentType: DefaultContentTypeElement | undefined) {
57+
this.set('defaultContentType', defaultContentType);
58+
}
59+
60+
get channels(): ChannelsElement | undefined {
4261
return this.get('channels');
4362
}
4463

45-
set channels(channels: ChannelsElement) {
64+
set channels(channels: ChannelsElement | undefined) {
4665
this.set('channels', channels);
4766
}
4867

49-
get components(): ComponentsElement {
68+
get components(): ComponentsElement | undefined {
5069
return this.get('components');
5170
}
5271

53-
set components(components: ComponentsElement) {
72+
set components(components: ComponentsElement | undefined) {
5473
this.set('components', components);
5574
}
5675

57-
get servers(): ServersElement {
58-
return this.get('servers');
76+
get tags(): TagsElement | undefined {
77+
return this.get('tags');
5978
}
6079

61-
set servers(servers: ServersElement) {
62-
this.set('servers', servers);
80+
set tags(tags: TagsElement | undefined) {
81+
this.set('tags', tags);
82+
}
83+
84+
get externalDocs(): ExternalDocumentationElement | undefined {
85+
return this.get('externalDocs');
86+
}
87+
88+
set externalDocs(externalDocs: ExternalDocumentationElement | undefined) {
89+
this.set('externalDocs', externalDocs);
6390
}
6491
}
6592

apidom/packages/apidom-ns-asyncapi-2-0/src/refractor/specification.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,12 @@ const specification = {
269269
components: {
270270
$ref: '#/visitors/document/objects/Components',
271271
},
272+
tags: {
273+
$ref: '#/visitors/document/objects/Tags',
274+
},
275+
externalDocs: {
276+
$ref: '#/visitors/document/objects/ExternalDocumentation',
277+
},
272278
},
273279
},
274280
AsyncApiVersion: {

apidom/packages/apidom-ns-asyncapi-2-0/src/traversal/visitor.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const keyMap = {
2222
CorrelationIDElement: ['content'],
2323
DefaultContentType: [],
2424
ExternalDocumentationElement: ['content'],
25+
IdentifierElement: ['content'],
2526
InfoElement: ['content'],
2627
LicenseElement: ['content'],
2728
MessageElement: ['content'],

0 commit comments

Comments
 (0)