Skip to content

Commit 6c7cd91

Browse files
committed
feat(ns-asyncapi-2-0): add full support for Components Object
Refs #387
1 parent d1f1d72 commit 6c7cd91

14 files changed

+446
-14
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,11 @@ Only fully implemented specification objects should be checked here.
157157
- [x] [Tags Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#tagsObject)
158158
- [x] [Tag Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#tag-object)
159159
- [x] [External Documentation Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#externalDocumentationObject)
160-
- [ ] [Components Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#componentsObject) (partial)
160+
- [x] [Components Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#componentsObject)
161161
- [x] [Reference Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#referenceObject)
162162
- [ ] [Schema Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#schemaObject) (partial)
163163
- [x] [Security Scheme Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#securitySchemeObject)
164-
- [x] [Security Requirement Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#security-requirement-object) (partial)
164+
- [x] [Security Requirement Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#security-requirement-object)
165165
- [x] [OAuth Flows Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#oauth-flows-object)
166166
- [x] [OAuth Flow Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#oauth-flow-object)
167167
- [x] [Server Bindings Object](https://github.com/asyncapi/spec/blob/master/spec/asyncapi.md#serverBindingsObject)
Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,99 @@
1-
import { Attributes, Meta, ObjectElement } from 'minim';
1+
import { Attributes, Meta } from 'minim';
2+
import { ObjectElement } from 'apidom';
23

34
class Components extends ObjectElement {
45
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
56
super(content, meta, attributes);
67
this.element = 'components';
78
}
89

9-
get schemas(): ObjectElement {
10+
get schemas(): ObjectElement | undefined {
1011
return this.get('schemas');
1112
}
13+
14+
set schemas(schemas: ObjectElement | undefined) {
15+
this.set('schemas', schemas);
16+
}
17+
18+
get messages(): ObjectElement | undefined {
19+
return this.get('messages');
20+
}
21+
22+
set messages(messages: ObjectElement | undefined) {
23+
this.set('messages', messages);
24+
}
25+
26+
get securitySchemes(): ObjectElement | undefined {
27+
return this.get('securitySchemes');
28+
}
29+
30+
set securitySchemes(securitySchemes: ObjectElement | undefined) {
31+
this.set('securitySchemes', securitySchemes);
32+
}
33+
34+
get parameters(): ObjectElement | undefined {
35+
return this.get('parameters');
36+
}
37+
38+
set parameters(parameters: ObjectElement | undefined) {
39+
this.set('parameters', parameters);
40+
}
41+
42+
get correlationIds(): ObjectElement | undefined {
43+
return this.get('correlationIds');
44+
}
45+
46+
set correlationIds(correlationIds: ObjectElement | undefined) {
47+
this.set('correlationIds', correlationIds);
48+
}
49+
50+
get operationTraits(): ObjectElement | undefined {
51+
return this.get('operationTraits');
52+
}
53+
54+
set operationTraits(operationTraits: ObjectElement | undefined) {
55+
this.set('operationTraits', operationTraits);
56+
}
57+
58+
get messageTraits(): ObjectElement | undefined {
59+
return this.get('messageTraits');
60+
}
61+
62+
set messageTraits(messageTraits: ObjectElement | undefined) {
63+
this.set('messageTraits', messageTraits);
64+
}
65+
66+
get serverBindings(): ObjectElement | undefined {
67+
return this.get('serverBindings');
68+
}
69+
70+
set serverBindings(serverBindings: ObjectElement | undefined) {
71+
this.set('serverBindings', serverBindings);
72+
}
73+
74+
get channelBindings(): ObjectElement | undefined {
75+
return this.get('channelBindings');
76+
}
77+
78+
set channelBindings(channelBindings: ObjectElement | undefined) {
79+
this.set('channelBindings', channelBindings);
80+
}
81+
82+
get operationBindings(): ObjectElement | undefined {
83+
return this.get('operationBindings');
84+
}
85+
86+
set operationBindings(operationBindings: ObjectElement | undefined) {
87+
this.set('operationBindings', operationBindings);
88+
}
89+
90+
get messageBindings(): ObjectElement | undefined {
91+
return this.get('messageBindings');
92+
}
93+
94+
set messageBindings(messageBindings: ObjectElement | undefined) {
95+
this.set('messageBindings', messageBindings);
96+
}
1297
}
1398

1499
export default Components;

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,16 @@ import ExternalDocumentationDescriptionVisitor from './visitors/async-api-2-0/ex
6363
import ExternalDocumentationUrlVisitor from './visitors/async-api-2-0/external-documentation/UrlVisitor';
6464
import ComponentsVisitor from './visitors/async-api-2-0/components';
6565
import ComponentsSchemasVisitor from './visitors/async-api-2-0/components/SchemasVisitor';
66-
import ComponentParametersVisitor from './visitors/async-api-2-0/components/ParametersVisitor';
66+
import ComponentsMessagesVisitor from './visitors/async-api-2-0/components/MessagesVisitor';
67+
import ComponentsSecuritySchemesVisitor from './visitors/async-api-2-0/components/SecuritySchemesVisitor';
68+
import ComponentsParametersVisitor from './visitors/async-api-2-0/components/ParametersVisitor';
69+
import ComponentsCorrelationIdsVisitor from './visitors/async-api-2-0/components/CorrelationIdsVisitor';
70+
import ComponentsOperationTraitsVisitor from './visitors/async-api-2-0/components/OperationTraitsVisitor';
71+
import ComponentsMessageTraitsVisitor from './visitors/async-api-2-0/components/MessageTraitsVisitor';
72+
import ComponentsServerBindingsVisitor from './visitors/async-api-2-0/components/ServerBindingsVisitor';
73+
import ComponentsChannelBindingsVisitor from './visitors/async-api-2-0/components/ChannelBindingsVisitor';
74+
import ComponentsOperationBindingsVisitor from './visitors/async-api-2-0/components/OperationBindingsVisitor';
75+
import ComponentsMessageBindingsVisitor from './visitors/async-api-2-0/components/MessageBindingsVisitor';
6776
import OperationVisitor from './visitors/async-api-2-0/operation';
6877
import OperationOperationIdVisitor from './visitors/async-api-2-0/operation/OperationIdVisitor';
6978
import OperationSummaryVisitor from './visitors/async-api-2-0/operation/SummaryVisitor';
@@ -449,7 +458,16 @@ const specification = {
449458
$visitor: ComponentsVisitor,
450459
fixedFields: {
451460
schemas: ComponentsSchemasVisitor,
452-
parameters: ComponentParametersVisitor,
461+
messages: ComponentsMessagesVisitor,
462+
securitySchemes: ComponentsSecuritySchemesVisitor,
463+
parameters: ComponentsParametersVisitor,
464+
correlationIds: ComponentsCorrelationIdsVisitor,
465+
operationTraits: ComponentsOperationTraitsVisitor,
466+
messageTraits: ComponentsMessageTraitsVisitor,
467+
serverBindings: ComponentsServerBindingsVisitor,
468+
channelBindings: ComponentsChannelBindingsVisitor,
469+
operationBindings: ComponentsOperationBindingsVisitor,
470+
messageBindings: ComponentsMessageBindingsVisitor,
453471
},
454472
},
455473
Reference: {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import stampit from 'stampit';
2+
import { ObjectElement, Element } from 'apidom';
3+
4+
import ReferenceElement from '../../../../elements/Reference';
5+
import MapVisitor from '../../generics/MapVisitor';
6+
import FallbackVisitor from '../../FallbackVisitor';
7+
import { isReferenceLikeElement } from '../../../predicates';
8+
import { isReferenceElement } from '../../../../predicates';
9+
10+
const ChannelBindingsVisitor = stampit(MapVisitor, FallbackVisitor, {
11+
props: {
12+
specPath: (element: Element) => {
13+
// eslint-disable-next-line no-nested-ternary
14+
return isReferenceLikeElement(element)
15+
? ['document', 'objects', 'Reference']
16+
: ['document', 'objects', 'ChannelBindings'];
17+
},
18+
},
19+
init() {
20+
this.element = new ObjectElement();
21+
this.element.classes.push('channel-bindings');
22+
},
23+
methods: {
24+
ObjectElement(objectElement: ObjectElement) {
25+
// @ts-ignore
26+
const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement);
27+
28+
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
29+
referenceElement.setMetaProperty('referenced-element', 'channelBindings');
30+
});
31+
32+
return result;
33+
},
34+
},
35+
});
36+
37+
export default ChannelBindingsVisitor;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import stampit from 'stampit';
2+
import { ObjectElement, Element } from 'apidom';
3+
4+
import ReferenceElement from '../../../../elements/Reference';
5+
import MapVisitor from '../../generics/MapVisitor';
6+
import FallbackVisitor from '../../FallbackVisitor';
7+
import { isReferenceLikeElement } from '../../../predicates';
8+
import { isReferenceElement } from '../../../../predicates';
9+
10+
const CorrelationIdsVisitor = stampit(MapVisitor, FallbackVisitor, {
11+
props: {
12+
specPath: (element: Element) => {
13+
// eslint-disable-next-line no-nested-ternary
14+
return isReferenceLikeElement(element)
15+
? ['document', 'objects', 'Reference']
16+
: ['document', 'objects', 'CorrelationID'];
17+
},
18+
},
19+
init() {
20+
this.element = new ObjectElement();
21+
this.element.classes.push('correlation-ids');
22+
},
23+
methods: {
24+
ObjectElement(objectElement: ObjectElement) {
25+
// @ts-ignore
26+
const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement);
27+
28+
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
29+
referenceElement.setMetaProperty('referenced-element', 'correlationID');
30+
});
31+
32+
return result;
33+
},
34+
},
35+
});
36+
37+
export default CorrelationIdsVisitor;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import stampit from 'stampit';
2+
import { ObjectElement, Element } from 'apidom';
3+
4+
import ReferenceElement from '../../../../elements/Reference';
5+
import MapVisitor from '../../generics/MapVisitor';
6+
import FallbackVisitor from '../../FallbackVisitor';
7+
import { isReferenceLikeElement } from '../../../predicates';
8+
import { isReferenceElement } from '../../../../predicates';
9+
10+
const MessageBindingsVisitor = stampit(MapVisitor, FallbackVisitor, {
11+
props: {
12+
specPath: (element: Element) => {
13+
// eslint-disable-next-line no-nested-ternary
14+
return isReferenceLikeElement(element)
15+
? ['document', 'objects', 'Reference']
16+
: ['document', 'objects', 'MessageBindings'];
17+
},
18+
},
19+
init() {
20+
this.element = new ObjectElement();
21+
this.element.classes.push('message-bindings');
22+
},
23+
methods: {
24+
ObjectElement(objectElement: ObjectElement) {
25+
// @ts-ignore
26+
const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement);
27+
28+
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
29+
referenceElement.setMetaProperty('referenced-element', 'messageBindings');
30+
});
31+
32+
return result;
33+
},
34+
},
35+
});
36+
37+
export default MessageBindingsVisitor;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import stampit from 'stampit';
2+
import { ObjectElement, Element } from 'apidom';
3+
4+
import ReferenceElement from '../../../../elements/Reference';
5+
import MapVisitor from '../../generics/MapVisitor';
6+
import FallbackVisitor from '../../FallbackVisitor';
7+
import { isReferenceLikeElement } from '../../../predicates';
8+
import { isReferenceElement } from '../../../../predicates';
9+
10+
const MessageTraitsVisitor = stampit(MapVisitor, FallbackVisitor, {
11+
props: {
12+
specPath: (element: Element) => {
13+
// eslint-disable-next-line no-nested-ternary
14+
return isReferenceLikeElement(element)
15+
? ['document', 'objects', 'Reference']
16+
: ['document', 'objects', 'MessageTrait'];
17+
},
18+
},
19+
init() {
20+
this.element = new ObjectElement();
21+
this.element.classes.push('message-traits');
22+
},
23+
methods: {
24+
ObjectElement(objectElement: ObjectElement) {
25+
// @ts-ignore
26+
const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement);
27+
28+
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
29+
referenceElement.setMetaProperty('referenced-element', 'messageTrait');
30+
});
31+
32+
return result;
33+
},
34+
},
35+
});
36+
37+
export default MessageTraitsVisitor;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import stampit from 'stampit';
2+
import { ObjectElement, Element } from 'apidom';
3+
4+
import ReferenceElement from '../../../../elements/Reference';
5+
import MapVisitor from '../../generics/MapVisitor';
6+
import FallbackVisitor from '../../FallbackVisitor';
7+
import { isReferenceLikeElement } from '../../../predicates';
8+
import { isReferenceElement } from '../../../../predicates';
9+
10+
const MessagesVisitor = stampit(MapVisitor, FallbackVisitor, {
11+
props: {
12+
specPath: (element: Element) => {
13+
// eslint-disable-next-line no-nested-ternary
14+
return isReferenceLikeElement(element)
15+
? ['document', 'objects', 'Reference']
16+
: ['document', 'objects', 'Message'];
17+
},
18+
},
19+
init() {
20+
this.element = new ObjectElement();
21+
this.element.classes.push('messages');
22+
},
23+
methods: {
24+
ObjectElement(objectElement: ObjectElement) {
25+
// @ts-ignore
26+
const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement);
27+
28+
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
29+
referenceElement.setMetaProperty('referenced-element', 'message');
30+
});
31+
32+
return result;
33+
},
34+
},
35+
});
36+
37+
export default MessagesVisitor;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import stampit from 'stampit';
2+
import { ObjectElement, Element } from 'apidom';
3+
4+
import ReferenceElement from '../../../../elements/Reference';
5+
import MapVisitor from '../../generics/MapVisitor';
6+
import FallbackVisitor from '../../FallbackVisitor';
7+
import { isReferenceLikeElement } from '../../../predicates';
8+
import { isReferenceElement } from '../../../../predicates';
9+
10+
const OperationBindingsVisitor = stampit(MapVisitor, FallbackVisitor, {
11+
props: {
12+
specPath: (element: Element) => {
13+
// eslint-disable-next-line no-nested-ternary
14+
return isReferenceLikeElement(element)
15+
? ['document', 'objects', 'Reference']
16+
: ['document', 'objects', 'OperationBindings'];
17+
},
18+
},
19+
init() {
20+
this.element = new ObjectElement();
21+
this.element.classes.push('operation-bindings');
22+
},
23+
methods: {
24+
ObjectElement(objectElement: ObjectElement) {
25+
// @ts-ignore
26+
const result = MapVisitor.compose.methods.ObjectElement.call(this, objectElement);
27+
28+
this.element.filter(isReferenceElement).forEach((referenceElement: ReferenceElement) => {
29+
referenceElement.setMetaProperty('referenced-element', 'operationBindings');
30+
});
31+
32+
return result;
33+
},
34+
},
35+
});
36+
37+
export default OperationBindingsVisitor;

0 commit comments

Comments
 (0)