Skip to content

Commit 82f0e54

Browse files
committed
feat: add support for AsyncAPI 2.2.0 specification
Closes #688
1 parent 9f6ff0a commit 82f0e54

File tree

165 files changed

+9499
-287
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+9499
-287
lines changed

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

+10-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- [AsyncAPI 2.0.0 specification](https://github.com/asyncapi/spec/blob/2.0.0/versions/2.0.0/asyncapi.md)
66
- [AsyncAPI 2.1.0 specification](https://github.com/asyncapi/spec/blob/v2.1.0/spec/asyncapi.md)
7+
- [AsyncAPI 2.2.0 specification](https://github.com/asyncapi/spec/blob/v2.2.0/spec/asyncapi.md)
78

89

910
## AsyncApi 2.x.y namespace
@@ -122,15 +123,15 @@ const plugin = ({ predicates, namespace }) => ({
122123
},
123124
visitor: {
124125
InfoElement(infoElement) {
125-
infoElement.version = '2.1.0';
126+
infoElement.version = '2.2.0';
126127
},
127128
},
128129
post() {
129130
console.dir('runs after traversal');
130131
},
131132
});
132133

133-
InfoElement.refract(objectElement, { plugins: [plugin] }); // => InfoElement({ title = 'my title', description = 'my description', version = '2.1.0' })
134+
InfoElement.refract(objectElement, { plugins: [plugin] }); // => InfoElement({ title = 'my title', description = 'my description', version = '2.2.0' })
134135
```
135136

136137
You can define as many plugins as needed to enhance the resulting namespaced ApiDOM structure.
@@ -200,6 +201,13 @@ Only fully implemented specification objects should be checked here.
200201
- [x] [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/kafka/README.md#operation-binding-object)
201202
- [x] [Message Binding Object](https://github.com/asyncapi/bindings/blob/master/kafka/README.md#message-binding-object)
202203

204+
#### Anypoint MQ Bindings
205+
206+
- [x] [Server Binding Object](https://github.com/asyncapi/bindings/tree/master/anypointmq#server-binding-object)
207+
- [x] [Channel Binding Object](https://github.com/asyncapi/bindings/tree/master/anypointmq#channel-binding-object)
208+
- [x] [Operation Binding Object](https://github.com/asyncapi/bindings/tree/master/anypointmq#operation-binding-object)
209+
- [x] [Message Binding Object](https://github.com/asyncapi/bindings/tree/master/anypointmq#message-binding-object)
210+
203211
#### AMQP 0-9-1 Bindings
204212

205213
- [x] [Server Binding Object](https://github.com/asyncapi/bindings/blob/master/amqp/README.md#server-binding-object)

packages/apidom-ns-asyncapi-2/src/elements/ChannelBindings.ts

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ObjectElement } from '@swagger-api/apidom-core';
44
import HttpChannelBindingElement from './bindings/http/HttpChannelBinding';
55
import WebSocketChannelBindingElement from './bindings/ws/WebSocketChannelBinding';
66
import KafkaChannelBindingElement from './bindings/kafka/KafkaChannelBinding';
7+
import AnypointmqChannelBindingElement from './bindings/anypointmq/AnypointmqChannelBinding';
78
import AmqpChannelBindingElement from './bindings/amqp/AmqpChannelBinding';
89
import Amqp1ChannelBindingElement from './bindings/amqp1/Amqp1ChannelBinding';
910
import MqttChannelBindingElement from './bindings/mqtt/MqttChannelBinding';
@@ -47,6 +48,14 @@ class ChannelBindings extends ObjectElement {
4748
this.set('kafka', kafka);
4849
}
4950

51+
get anypointmq(): AnypointmqChannelBindingElement | undefined {
52+
return this.get('anypointmq');
53+
}
54+
55+
set anypointmq(anypointmq: AnypointmqChannelBindingElement | undefined) {
56+
this.set('anypointmq', anypointmq);
57+
}
58+
5059
get amqp(): AmqpChannelBindingElement | undefined {
5160
return this.get('amqp');
5261
}

packages/apidom-ns-asyncapi-2/src/elements/ChannelItem.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Attributes, Meta } from 'minim';
2-
import { StringElement, ObjectElement } from '@swagger-api/apidom-core';
2+
import { StringElement, ObjectElement, ArrayElement } from '@swagger-api/apidom-core';
33

44
import OperationElement from './Operation';
55
import ParametersElement from './Parameters';
@@ -27,6 +27,14 @@ class ChannelItem extends ObjectElement {
2727
this.set('description', description);
2828
}
2929

30+
get servers(): ArrayElement {
31+
return this.get('servers');
32+
}
33+
34+
set servers(servers: ArrayElement) {
35+
this.set('servers', servers);
36+
}
37+
3038
get subscribe(): OperationElement {
3139
return this.get('subscribe');
3240
}

packages/apidom-ns-asyncapi-2/src/elements/MessageBindings.ts

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ObjectElement } from '@swagger-api/apidom-core';
44
import HttpMessageBindingElement from './bindings/http/HttpMessageBinding';
55
import WebSocketMessageBindingElement from './bindings/ws/WebSocketMessageBinding';
66
import KafkaMessageBindingElement from './bindings/kafka/KafkaMessageBinding';
7+
import AnypointmqMessageBindingElement from './bindings/anypointmq/AnypointmqMessageBinding';
78
import AmqpMessageBindingElement from './bindings/amqp/AmqpMessageBinding';
89
import Amqp1MessageBindingElement from './bindings/amqp1/Amqp1MessageBinding';
910
import MqttMessageBindingElement from './bindings/mqtt/MqttMessageBinding';
@@ -47,6 +48,14 @@ class MessageBindings extends ObjectElement {
4748
this.set('kafka', kafka);
4849
}
4950

51+
get anypointmq(): AnypointmqMessageBindingElement | undefined {
52+
return this.get('anypointmq');
53+
}
54+
55+
set anypointmq(anypointmq: AnypointmqMessageBindingElement | undefined) {
56+
this.set('anypointmq', anypointmq);
57+
}
58+
5059
get amqp(): AmqpMessageBindingElement | undefined {
5160
return this.get('amqp');
5261
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Attributes, Meta } from 'minim';
2+
import { StringElement, ObjectElement } from '@swagger-api/apidom-core';
3+
4+
class MessageExample extends ObjectElement {
5+
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
6+
super(content, meta, attributes);
7+
this.element = 'messageExample';
8+
}
9+
10+
get headers(): ObjectElement | undefined {
11+
return this.get('headers');
12+
}
13+
14+
set headers(headers: ObjectElement | undefined) {
15+
this.set('headers', headers);
16+
}
17+
18+
get payload(): Element | undefined {
19+
return this.get('payload');
20+
}
21+
22+
set payload(payload: Element | undefined) {
23+
this.set('payload', payload);
24+
}
25+
26+
get name(): StringElement {
27+
return this.get('name');
28+
}
29+
30+
set name(name: StringElement) {
31+
this.set('name', name);
32+
}
33+
34+
get summary(): StringElement {
35+
return this.get('summary');
36+
}
37+
38+
set summary(summary: StringElement) {
39+
this.set('summary', summary);
40+
}
41+
}
42+
43+
export default MessageExample;

packages/apidom-ns-asyncapi-2/src/elements/OperationBindings.ts

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ObjectElement } from '@swagger-api/apidom-core';
44
import HttpOperationBindingElement from './bindings/http/HttpOperationBinding';
55
import WebSocketOperationBindingElement from './bindings/ws/WebSocketOperationBinding';
66
import KafkaOperationBindingElement from './bindings/kafka/KafkaOperationBinding';
7+
import AnypointmqOperationBindingElement from './bindings/anypointmq/AnypointmqOperationBinding';
78
import AmqpOperationBindingElement from './bindings/amqp/AmqpOperationBinding';
89
import Amqp1OperationBindingElement from './bindings/amqp1/Amqp1OperationBinding';
910
import MqttOperationBindingElement from './bindings/mqtt/MqttOperationBinding';
@@ -46,6 +47,14 @@ class OperationBindings extends ObjectElement {
4647
this.set('kafka', kafka);
4748
}
4849

50+
get anypointmq(): AnypointmqOperationBindingElement | undefined {
51+
return this.get('anypointmq');
52+
}
53+
54+
set anypointmq(anypointmq: AnypointmqOperationBindingElement | undefined) {
55+
this.set('anypointmq', anypointmq);
56+
}
57+
4958
get amqp(): AmqpOperationBindingElement | undefined {
5059
return this.get('amqp');
5160
}

packages/apidom-ns-asyncapi-2/src/elements/ServerBindings.ts

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ObjectElement } from '@swagger-api/apidom-core';
44
import HttpServerBindingElement from './bindings/http/HttpServerBinding';
55
import WebSocketServerBindingElement from './bindings/ws/WebSocketServerBinding';
66
import KafkaServerBindingElement from './bindings/kafka/KafkaServerBinding';
7+
import AnypointmqServerBindingElement from './bindings/anypointmq/AnypointmqServerBinding';
78
import AmqpServerBindingElement from './bindings/amqp/AmqpServerBinding';
89
import Amqp1ServerBindingElement from './bindings/amqp1/Amqp1ServerBinding';
910
import MqttServerBindingElement from './bindings/mqtt/MqttServerBinding';
@@ -47,6 +48,14 @@ class ServerBindings extends ObjectElement {
4748
this.set('kafka', kafka);
4849
}
4950

51+
get anypointmq(): AnypointmqServerBindingElement | undefined {
52+
return this.get('anypointmq');
53+
}
54+
55+
set anypointmq(anypointmq: AnypointmqServerBindingElement | undefined) {
56+
this.set('anypointmq', anypointmq);
57+
}
58+
5059
get amqp(): AmqpServerBindingElement | undefined {
5160
return this.get('amqp');
5261
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Attributes, Meta, StringElement } from 'minim';
2+
import { ObjectElement } from '@swagger-api/apidom-core';
3+
4+
class AnypointmqChannelBinding extends ObjectElement {
5+
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
6+
super(content, meta, attributes);
7+
this.element = 'anypointmqChannelBinding';
8+
}
9+
10+
get destination(): StringElement {
11+
return this.get('destination');
12+
}
13+
14+
set destination(destination: StringElement) {
15+
this.set('destination', destination);
16+
}
17+
18+
get destinationType(): StringElement {
19+
return this.get('destinationType');
20+
}
21+
22+
set destinationType(destinationType: StringElement) {
23+
this.set('destinationType', destinationType);
24+
}
25+
26+
get bindingVersion(): StringElement {
27+
return this.get('bindingVersion');
28+
}
29+
30+
set bindingVersion(bindingVersion: StringElement) {
31+
this.set('bindingVersion', bindingVersion);
32+
}
33+
}
34+
35+
export default AnypointmqChannelBinding;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Attributes, Meta } from 'minim';
2+
import { ObjectElement, StringElement } from '@swagger-api/apidom-core';
3+
4+
import SchemaElement from '../../Schema';
5+
6+
class AnypointmqMessageBinding extends ObjectElement {
7+
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
8+
super(content, meta, attributes);
9+
this.element = 'anypointmqMessageBinding';
10+
}
11+
12+
get headers(): SchemaElement {
13+
return this.get('headers');
14+
}
15+
16+
set headers(headers: SchemaElement) {
17+
this.set('headers', headers);
18+
}
19+
20+
get bindingVersion(): StringElement {
21+
return this.get('bindingVersion');
22+
}
23+
24+
set bindingVersion(bindingVersion: StringElement) {
25+
this.set('bindingVersion', bindingVersion);
26+
}
27+
}
28+
29+
export default AnypointmqMessageBinding;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Attributes, Meta } from 'minim';
2+
import { ObjectElement } from '@swagger-api/apidom-core';
3+
4+
class AnypointmqOperationBinding extends ObjectElement {
5+
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
6+
super(content, meta, attributes);
7+
this.element = 'anypointmqOperationBinding';
8+
}
9+
}
10+
11+
export default AnypointmqOperationBinding;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Attributes, Meta } from 'minim';
2+
import { ObjectElement } from '@swagger-api/apidom-core';
3+
4+
class AnypointmqServerBinding extends ObjectElement {
5+
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
6+
super(content, meta, attributes);
7+
this.element = 'anypointmqServerBinding';
8+
}
9+
}
10+
11+
export default AnypointmqServerBinding;

packages/apidom-ns-asyncapi-2/src/index.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export {
5454
export { keyMap, getNodeType } from './traversal/visitor';
5555

5656
/**
57-
* AsyncApi 2.0.0 | 2.1.0 specification elements.
57+
* AsyncApi 2.0.0 | 2.1.0 | 2.2.0 specification elements.
5858
*/
5959
export { default as AsyncApi2Element } from './elements/AsyncApi2';
6060
export { default as AsyncApiVersionElement } from './elements/AsyncApiVersion';
@@ -71,6 +71,7 @@ export { default as InfoElement } from './elements/Info';
7171
export { default as LicenseElement } from './elements/License';
7272
export { default as MessageElement } from './elements/Message';
7373
export { default as MessageBindingsElement } from './elements/MessageBindings';
74+
export { default as MessageExampleElement } from './elements/MessageExample';
7475
export { default as MessageTraitElement } from './elements/MessageTrait';
7576
export { default as OAuthFlowElement } from './elements/OAuthFlow';
7677
export { default as OAuthFlowsElement } from './elements/OAuthFlows';
@@ -122,6 +123,11 @@ export { default as KafkaChannelBindingElement } from './elements/bindings/kafka
122123
export { default as KafkaMessageBindingElement } from './elements/bindings/kafka/KafkaMessageBinding';
123124
export { default as KafkaOperationBindingElement } from './elements/bindings/kafka/KafkaOperationBinding';
124125
export { default as KafkaServerBindingElement } from './elements/bindings/kafka/KafkaServerBinding';
126+
// Anypoint MQ
127+
export { default as AnypointmqChannelBindingElement } from './elements/bindings/anypointmq/AnypointmqChannelBinding';
128+
export { default as AnypointmqMessageBindingElement } from './elements/bindings/anypointmq/AnypointmqMessageBinding';
129+
export { default as AnypointmqOperationBindingElement } from './elements/bindings/anypointmq/AnypointmqOperationBinding';
130+
export { default as AnypointmqServerBindingElement } from './elements/bindings/anypointmq/AnypointmqServerBinding';
125131
// Mercure
126132
export { default as MercureChannelBindingElement } from './elements/bindings/mercure/MercureChannelBinding';
127133
export { default as MercureMessageBindingElement } from './elements/bindings/mercure/MercureMessageBinding';

packages/apidom-ns-asyncapi-2/src/namespace.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { NamespacePluginOptions } from 'minim';
22

33
/**
4-
* AsyncApi 2.0.0 | 2.1.0 specification elements.
4+
* AsyncApi 2.0.0 | 2.1.0 | 2.2.0 specification elements.
55
*/
66
import AsyncApi2Element from './elements/AsyncApi2';
77
import AsyncApiVersionElement from './elements/AsyncApiVersion';
@@ -18,6 +18,7 @@ import InfoElement from './elements/Info';
1818
import LicenseElement from './elements/License';
1919
import MessageElement from './elements/Message';
2020
import MessageBindingsElement from './elements/MessageBindings';
21+
import MessageExampleElement from './elements/MessageExample';
2122
import MessageTraitElement from './elements/MessageTrait';
2223
import OAuthFlowElement from './elements/OAuthFlow';
2324
import OAuthFlowsElement from './elements/OAuthFlows';
@@ -68,6 +69,11 @@ import KafkaChannelBindingElement from './elements/bindings/kafka/KafkaChannelBi
6869
import KafkaMessageBindingElement from './elements/bindings/kafka/KafkaMessageBinding';
6970
import KafkaOperationBindingElement from './elements/bindings/kafka/KafkaOperationBinding';
7071
import KafkaServerBindingElement from './elements/bindings/kafka/KafkaServerBinding';
72+
// Anypoint MQ
73+
import AnypointmqChannelBindingElement from './elements/bindings/anypointmq/AnypointmqChannelBinding';
74+
import AnypointmqMessageBindingElement from './elements/bindings/anypointmq/AnypointmqMessageBinding';
75+
import AnypointmqOperationBindingElement from './elements/bindings/anypointmq/AnypointmqOperationBinding';
76+
import AnypointmqServerBindingElement from './elements/bindings/anypointmq/AnypointmqServerBinding';
7177
// Mercure
7278
import MercureChannelBindingElement from './elements/bindings/mercure/MercureChannelBinding';
7379
import MercureMessageBindingElement from './elements/bindings/mercure/MercureMessageBinding';
@@ -119,7 +125,7 @@ const asyncApi2 = {
119125
const { base } = options;
120126

121127
/**
122-
* AsyncApi 2.0.0 | 2.1.0 specification elements.
128+
* AsyncApi 2.0.0 | 2.1.0 | 2.2.0 specification elements.
123129
*/
124130
base.register('asyncApi2', AsyncApi2Element);
125131
base.register('asyncApiVersion', AsyncApiVersionElement);
@@ -136,6 +142,7 @@ const asyncApi2 = {
136142
base.register('license', LicenseElement);
137143
base.register('message', MessageElement);
138144
base.register('messageBindings', MessageBindingsElement);
145+
base.register('messageExample', MessageExampleElement);
139146
base.register('messageTrait', MessageTraitElement);
140147
base.register('oAuthFlow', OAuthFlowElement);
141148
base.register('oAuthFlows', OAuthFlowsElement);
@@ -187,6 +194,11 @@ const asyncApi2 = {
187194
base.register('kafkaMessageBinding', KafkaMessageBindingElement);
188195
base.register('kafkaOperationBinding', KafkaOperationBindingElement);
189196
base.register('kafkaServerBinding', KafkaServerBindingElement);
197+
// Anypoint MQ
198+
base.register('anypointmqChannelBinding', AnypointmqChannelBindingElement);
199+
base.register('anypointmqMessageBinding', AnypointmqMessageBindingElement);
200+
base.register('anypointmqOperationBinding', AnypointmqOperationBindingElement);
201+
base.register('anypointmqServerBinding', AnypointmqServerBindingElement);
190202
// Mercure
191203
base.register('mercureChannelBinding', MercureChannelBindingElement);
192204
base.register('mercureMessageBinding', MercureMessageBindingElement);

0 commit comments

Comments
 (0)