Skip to content

Commit

Permalink
feat(AsyncApi2.0): add support for Servers object
Browse files Browse the repository at this point in the history
Refs #67
  • Loading branch information
char0n committed Sep 11, 2020
1 parent 2a06d98 commit bf37684
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 4 deletions.
10 changes: 10 additions & 0 deletions apidom/packages/apidom-ns-asyncapi2-0/src/elements/Server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Attributes, Meta, ObjectElement } from 'minim';

class Server extends ObjectElement {
constructor(content?: Array<unknown>, meta?: Meta, attributes?: Attributes) {
super(content, meta, attributes);
this.element = 'server';
}
}

export default Server;
10 changes: 10 additions & 0 deletions apidom/packages/apidom-ns-asyncapi2-0/src/elements/Servers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Attributes, Meta, ObjectElement } from 'minim';

class Servers extends ObjectElement {
constructor(content?: Array<unknown>, meta?: Meta, attributes?: Attributes) {
super(content, meta, attributes);
this.element = 'servers';
}
}

export default Servers;
2 changes: 2 additions & 0 deletions apidom/packages/apidom-ns-asyncapi2-0/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ export { default as ChannelItemElement } from './elements/ChannelItem';
export { default as OperationElement } from './elements/Operation';
export { default as ParametersElement } from './elements/Parameters';
export { default as ChannelBindingsElement } from './elements/ChannelBindings';
export { default as ServersElement } from './elements/Servers';
export { default as ServerElement } from './elements/Server';
4 changes: 4 additions & 0 deletions apidom/packages/apidom-ns-asyncapi2-0/src/namespace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import ChannelItem from './elements/ChannelItem';
import Operation from './elements/Operation';
import Parameters from './elements/Parameters';
import ChannelBindings from './elements/ChannelBindings';
import Servers from './elements/Servers';
import Server from './elements/Server';

const asyncApi2_0 = {
namespace: (options: NamespacePluginOptions) => {
Expand All @@ -30,6 +32,8 @@ const asyncApi2_0 = {
base.register('operation', Operation);
base.register('parameters', Parameters);
base.register('channelBindings', ChannelBindings);
base.register('servers', Servers);
base.register('server', Server);

return base;
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ import ChannelItemDescriptionVisitor from './visitors/async-api-2-0/channel-item
import ChannelBindingsVisitor from './visitors/async-api-2-0/channel-bindings';
import OperationVisitor from './visitors/async-api-2-0/operation';
import ParametersVisitor from './visitors/async-api-2-0/parameters';
import ServersVisitor from './visitors/async-api-2-0/servers';
import ServerVisitor from './visitors/async-api-2-0/server';

/**
* Specification object allows us to have complete control over visitors
Expand All @@ -54,6 +56,9 @@ const specification = {
info: {
$ref: '#/visitors/document/objects/Info',
},
servers: {
$ref: '#/visitors/document/objects/Servers',
},
channels: {
$ref: '#/visitors/document/objects/Channels',
},
Expand Down Expand Up @@ -93,6 +98,13 @@ const specification = {
url: LicenseUrlVisitor,
},
},
Servers: {
$visitor: ServersVisitor,
},
Server: {
$visitor: ServerVisitor,
fields: {},
},
Schema: {
$visitor: SchemaVisitor,
},
Expand All @@ -118,14 +130,14 @@ const specification = {
},
},
},
ChannelBindings: {
$visitor: ChannelBindingsVisitor,
fields: {},
},
Operation: {
$visitor: OperationVisitor,
fields: {},
},
ChannelBindings: {
$visitor: ChannelBindingsVisitor,
fields: {},
},
Parameters: {
$visitor: ParametersVisitor,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ const ParametersVisitor = stampit(PatternedFieldsJsonObjectVisitor, {
props: {
fieldPatternPredicate: test(/^[A-Za-z0-9_\\-]+$/),
},
init() {
this.element = new this.namespace.elements.Parameters();
},
});

export default ParametersVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import stampit from 'stampit';
import { always } from 'ramda';

import FixedFieldsJsonObjectVisitor from '../../generics/FixedFieldsJsonObjectVisitor';

const ServerVisitor = stampit(FixedFieldsJsonObjectVisitor, {
props: {
specPath: always(['document', 'objects', 'Server']),
},
init() {
this.element = new this.namespace.elements.Server();
},
});

export default ServerVisitor;
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import stampit from 'stampit';
import { test, always } from 'ramda';

import PatternedFieldsJsonObjectVisitor from '../../generics/PatternedFieldsJsonObjectVisitor';

const ServersVisitor = stampit(PatternedFieldsJsonObjectVisitor, {
props: {
specPath: always(['document', 'objects', 'Server']),
fieldPatternPredicate: test(/^[A-Za-z0-9_\\-]+$/),
},
init() {
this.element = new this.namespace.elements.Servers();
},
});

export default ServersVisitor;
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@
},
"version": "1.0.1"
},
"servers": {
"production": {
"url": "development.gigantic-server.com",
"description": "Development server",
"protocol": "kafka",
"protocolVersion": "1.0.0"
}
},
"channels": {
"user/signup": {
"description": "This channel is used to exchange messages about users signing up",
Expand Down

0 comments on commit bf37684

Please sign in to comment.