Skip to content

Commit 43f0cb7

Browse files
committed
feat(ns-asyncapi-2-0): add support for WS Message Binding Obj
Refs #387
1 parent c194516 commit 43f0cb7

File tree

9 files changed

+48
-3
lines changed

9 files changed

+48
-3
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ Only fully implemented specification objects should be checked here.
187187
- [x] [Server Binding Object](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#server-binding-object)
188188
- [x] [Channel Binding Object](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#channel-binding-object)
189189
- [x] [Operation Binding Object](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#operation-binding-object)
190-
- [ ] [Message Binding Object](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#message-binding-object) (reserved for future)
190+
- [x] [Message Binding Object](https://github.com/asyncapi/bindings/blob/master/websockets/README.md#message-binding-object)
191191

192192
#### Kafka Bindings
193193

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Attributes, Meta, ObjectElement } from 'minim';
2+
3+
class WebSocketMessageBinding extends ObjectElement {
4+
constructor(content?: Record<string, unknown>, meta?: Meta, attributes?: Attributes) {
5+
super(content, meta, attributes);
6+
this.element = 'webSocketMessageBinding';
7+
}
8+
}
9+
10+
export default WebSocketMessageBinding;

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

+1
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,6 @@ export { default as MqttOperationBindingElement } from './elements/bindings/mqtt
107107
export { default as MqttServerBindingElement } from './elements/bindings/mqtt/MqttServerBinding';
108108
// WebSocket
109109
export { default as WebSocketChannelBindingElement } from './elements/bindings/ws/WebSocketChannelBinding';
110+
export { default as WebSocketMessageBindingElement } from './elements/bindings/ws/WebSocketMessageBinding';
110111
export { default as WebSocketOperationBindingElement } from './elements/bindings/ws/WebSocketOperationBinding';
111112
export { default as WebSocketServerBindingElement } from './elements/bindings/ws/WebSocketServerBinding';

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

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import MqttOperationBindingElement from './elements/bindings/mqtt/MqttOperationB
5555
import MqttServerBindingElement from './elements/bindings/mqtt/MqttServerBinding';
5656
// WebSocket
5757
import WebSocketChannelBindingElement from './elements/bindings/ws/WebSocketChannelBinding';
58+
import WebSocketMessageBindingElement from './elements/bindings/ws/WebSocketMessageBinding';
5859
import WebSocketOperationBindingElement from './elements/bindings/ws/WebSocketOperationBinding';
5960
import WebSocketServerBindingElement from './elements/bindings/ws/WebSocketServerBinding';
6061

@@ -118,6 +119,7 @@ const asyncApi2_0 = {
118119
base.register('mqttServerBinding', MqttServerBindingElement);
119120
// WebSocket
120121
base.register('webSocketChannelBinding', WebSocketChannelBindingElement);
122+
base.register('webSocketMessageBinding', WebSocketMessageBindingElement);
121123
base.register('webSocketOperationBinding', WebSocketOperationBindingElement);
122124
base.register('webSocketServerBinding', WebSocketServerBindingElement);
123125

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

+10
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import MqttOperationBindingElement from '../elements/bindings/mqtt/MqttOperation
5454
import MqttServerBindingElement from '../elements/bindings/mqtt/MqttServerBinding';
5555
// WebSocket
5656
import WebSocketChannelBindingElement from '../elements/bindings/ws/WebSocketChannelBinding';
57+
import WebSocketMessageBindingElement from '../elements/bindings/ws/WebSocketMessageBinding';
5758
import WebSocketOperationBindingElement from '../elements/bindings/ws/WebSocketOperationBinding';
5859
import WebSocketServerBindingElement from '../elements/bindings/ws/WebSocketServerBinding';
5960

@@ -381,6 +382,15 @@ WebSocketChannelBindingElement.refract = createRefractor([
381382
'ChannelBinding',
382383
'$visitor',
383384
]);
385+
WebSocketMessageBindingElement.refract = createRefractor([
386+
'visitors',
387+
'document',
388+
'objects',
389+
'bindings',
390+
'ws',
391+
'MessageBinding',
392+
'$visitor',
393+
]);
384394
WebSocketOperationBindingElement.refract = createRefractor([
385395
'visitors',
386396
'document',

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ import MqttServerBindingBindingVersionVisitor from './visitors/async-api-2-0/bin
126126
import WebSocketChannelBindingVisitor from './visitors/async-api-2-0/bindings/ws/channel-binding';
127127
import WebSocketChannelBindingMethodVisitor from './visitors/async-api-2-0/bindings/ws/channel-binding/MethodVisitor';
128128
import WebSocketChannelBindingBindingVersionVisitor from './visitors/async-api-2-0/bindings/ws/channel-binding/BindingVersionVisitor';
129+
import WebSocketMessageBindingVisitor from './visitors/async-api-2-0/bindings/ws/message-binding';
129130
import WebSocketOperationBindingVisitor from './visitors/async-api-2-0/bindings/ws/operation-binding';
130131
import WebSocketServerBindingVisitor from './visitors/async-api-2-0/bindings/ws/server-binding';
131132

@@ -500,7 +501,9 @@ const specification = {
500501
OperationBinding: {
501502
$visitor: WebSocketOperationBindingVisitor,
502503
},
503-
MessageBinding: FallbackVisitor,
504+
MessageBinding: {
505+
$visitor: WebSocketMessageBindingVisitor,
506+
},
504507
},
505508
},
506509
},
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import stampit from 'stampit';
2+
import { always } from 'ramda';
3+
4+
import WebSocketMessageBindingElement from '../../../../../../elements/bindings/ws/WebSocketMessageBinding';
5+
import FallbackVisitor from '../../../../FallbackVisitor';
6+
import FixedFieldsVisitor from '../../../../generics/FixedFieldsVisitor';
7+
8+
const WebSocketMessageBindingVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, {
9+
props: {
10+
specPath: always(['document', 'objects', 'bindings', 'ws', 'MessageBinding']),
11+
canSupportSpecificationExtensions: false,
12+
},
13+
init() {
14+
this.element = new WebSocketMessageBindingElement();
15+
},
16+
});
17+
18+
export default WebSocketMessageBindingVisitor;

apidom/packages/apidom-ns-asyncapi-2-0/src/refractor/visitors/async-api-2-0/bindings/ws/server-binding/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import FixedFieldsVisitor from '../../../../generics/FixedFieldsVisitor';
77

88
const WebSocketServerBindingVisitor = stampit(FixedFieldsVisitor, FallbackVisitor, {
99
props: {
10-
specPath: always(['document', 'objects', 'bindings', 'ws', 'OperationBinding']),
10+
specPath: always(['document', 'objects', 'bindings', 'ws', 'ServerBinding']),
1111
canSupportSpecificationExtensions: false,
1212
},
1313
init() {

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

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export const keyMap = {
6262
MqttServerBindingElement: ['content'],
6363
// WebSocket
6464
WebSocketChannelBindingElement: ['content'],
65+
WebSocketMessageBindingElement: ['content'],
6566
WebSocketOperationBindingElement: ['content'],
6667
WebSocketServerBindingElement: ['content'],
6768
...keyMapBase,

0 commit comments

Comments
 (0)