-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathhelpers.js
91 lines (81 loc) · 1.98 KB
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
const _ = require('lodash');
const yaml = require('js-yaml');
const helpers = module.exports;
helpers.serialize = (text) => {
try {
return {
isYAML: true,
parsed: yaml.safeLoad(text)
};
} catch (e) {
try {
return {
isYAML: false,
parsed: JSON.parse(text)
};
} catch (err) {
throw new Error('AsyncAPI document must be a valid JSON or YAML document.');
}
}
};
helpers.dotsToSlashes = topic => topic.replace(/\./g, '/');
helpers.eventToChannel = event => {
const out = {};
if (event.receive) {
out.publish = {
message: {
oneOf: event.receive
}
}
}
if (event.send) {
out.subscribe = {
message: {
oneOf: event.send
}
}
}
return out;
};
helpers.streamToChannel = event => {
const out = {};
if (event.read) {
out.publish = {
message: {
oneOf: event.read
}
}
}
if (event.write) {
out.subscribe = {
message: {
oneOf: event.write
}
}
}
return out;
};
const objectToSchema = obj => {
const schema = { type: 'object', properties: {} };
_.each(obj, (prop, propName) => {
schema.properties[propName] = prop;
});
return obj;
};
helpers.convertMessage = message => {
if (message.oneOf) {
message.oneOf.forEach(m => {
if (m.protocolInfo) {
m.bindings = m.protocolInfo;
delete m.protocolInfo;
}
if (m.headers) m.headers = objectToSchema(m.headers);
});
} else {
if (message.protocolInfo) {
message.bindings = message.protocolInfo;
delete message.protocolInfo;
}
if (message.headers) message.headers = objectToSchema(message.headers);
}
}