@alagoni97/cli 0.72.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +336 -0
  3. package/bin/dev.cmd +3 -0
  4. package/bin/dev.mjs +3 -0
  5. package/bin/run.cmd +3 -0
  6. package/bin/run.mjs +4 -0
  7. package/dist/LoggingInterface.d.ts +123 -0
  8. package/dist/LoggingInterface.js +300 -0
  9. package/dist/PersistedConfig.d.ts +46 -0
  10. package/dist/PersistedConfig.js +94 -0
  11. package/dist/browser/adapters/output.d.ts +69 -0
  12. package/dist/browser/adapters/output.js +91 -0
  13. package/dist/browser/config.d.ts +18 -0
  14. package/dist/browser/config.js +59 -0
  15. package/dist/browser/generate.d.ts +20 -0
  16. package/dist/browser/generate.js +129 -0
  17. package/dist/browser/index.d.ts +17 -0
  18. package/dist/browser/index.js +26 -0
  19. package/dist/browser/parser.d.ts +9 -0
  20. package/dist/browser/parser.js +61 -0
  21. package/dist/browser/shims/asyncapi-parser.d.ts +30 -0
  22. package/dist/browser/shims/asyncapi-parser.js +52 -0
  23. package/dist/browser/shims/fs.d.ts +190 -0
  24. package/dist/browser/shims/fs.js +188 -0
  25. package/dist/browser/shims/json-schema-ref-parser.d.ts +73 -0
  26. package/dist/browser/shims/json-schema-ref-parser.js +246 -0
  27. package/dist/browser/shims/swagger-parser.d.ts +20 -0
  28. package/dist/browser/shims/swagger-parser.js +40 -0
  29. package/dist/codegen/configurationSchemaBuilder.d.ts +15 -0
  30. package/dist/codegen/configurationSchemaBuilder.js +48 -0
  31. package/dist/codegen/configurations.d.ts +29 -0
  32. package/dist/codegen/configurations.js +260 -0
  33. package/dist/codegen/detection.d.ts +19 -0
  34. package/dist/codegen/detection.js +174 -0
  35. package/dist/codegen/errors.d.ts +111 -0
  36. package/dist/codegen/errors.js +352 -0
  37. package/dist/codegen/generators/generic/custom.d.ts +75 -0
  38. package/dist/codegen/generators/generic/custom.js +66 -0
  39. package/dist/codegen/generators/index.d.ts +14 -0
  40. package/dist/codegen/generators/index.js +42 -0
  41. package/dist/codegen/generators/typescript/channels/asyncapi.d.ts +10 -0
  42. package/dist/codegen/generators/typescript/channels/asyncapi.js +131 -0
  43. package/dist/codegen/generators/typescript/channels/index.d.ts +8 -0
  44. package/dist/codegen/generators/typescript/channels/index.js +142 -0
  45. package/dist/codegen/generators/typescript/channels/openapi.d.ts +9 -0
  46. package/dist/codegen/generators/typescript/channels/openapi.js +168 -0
  47. package/dist/codegen/generators/typescript/channels/protocols/amqp/index.d.ts +7 -0
  48. package/dist/codegen/generators/typescript/channels/protocols/amqp/index.js +149 -0
  49. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.d.ts +5 -0
  50. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.js +106 -0
  51. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.d.ts +3 -0
  52. package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.js +102 -0
  53. package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.d.ts +3 -0
  54. package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.js +133 -0
  55. package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.d.ts +3 -0
  56. package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.js +100 -0
  57. package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.d.ts +5 -0
  58. package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.js +144 -0
  59. package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.d.ts +6 -0
  60. package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.js +132 -0
  61. package/dist/codegen/generators/typescript/channels/protocols/http/client.d.ts +10 -0
  62. package/dist/codegen/generators/typescript/channels/protocols/http/client.js +224 -0
  63. package/dist/codegen/generators/typescript/channels/protocols/http/common-types.d.ts +14 -0
  64. package/dist/codegen/generators/typescript/channels/protocols/http/common-types.js +800 -0
  65. package/dist/codegen/generators/typescript/channels/protocols/http/index.d.ts +8 -0
  66. package/dist/codegen/generators/typescript/channels/protocols/http/index.js +96 -0
  67. package/dist/codegen/generators/typescript/channels/protocols/http/security.d.ts +48 -0
  68. package/dist/codegen/generators/typescript/channels/protocols/http/security.js +491 -0
  69. package/dist/codegen/generators/typescript/channels/protocols/kafka/index.d.ts +6 -0
  70. package/dist/codegen/generators/typescript/channels/protocols/kafka/index.js +127 -0
  71. package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.d.ts +3 -0
  72. package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.js +108 -0
  73. package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.d.ts +3 -0
  74. package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.js +154 -0
  75. package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.d.ts +11 -0
  76. package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.js +58 -0
  77. package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.d.ts +6 -0
  78. package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.js +113 -0
  79. package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.d.ts +3 -0
  80. package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.js +99 -0
  81. package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.d.ts +3 -0
  82. package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.js +186 -0
  83. package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.d.ts +3 -0
  84. package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.js +90 -0
  85. package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.d.ts +3 -0
  86. package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.js +142 -0
  87. package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.d.ts +3 -0
  88. package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.js +100 -0
  89. package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.d.ts +3 -0
  90. package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.js +143 -0
  91. package/dist/codegen/generators/typescript/channels/protocols/nats/index.d.ts +11 -0
  92. package/dist/codegen/generators/typescript/channels/protocols/nats/index.js +224 -0
  93. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.d.ts +3 -0
  94. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.js +89 -0
  95. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.d.ts +3 -0
  96. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.js +146 -0
  97. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.d.ts +3 -0
  98. package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.js +149 -0
  99. package/dist/codegen/generators/typescript/channels/protocols/nats/utils.d.ts +35 -0
  100. package/dist/codegen/generators/typescript/channels/protocols/nats/utils.js +120 -0
  101. package/dist/codegen/generators/typescript/channels/protocols/websocket/index.d.ts +7 -0
  102. package/dist/codegen/generators/typescript/channels/protocols/websocket/index.js +152 -0
  103. package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.d.ts +3 -0
  104. package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.js +64 -0
  105. package/dist/codegen/generators/typescript/channels/protocols/websocket/register.d.ts +3 -0
  106. package/dist/codegen/generators/typescript/channels/protocols/websocket/register.js +115 -0
  107. package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.d.ts +3 -0
  108. package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.js +151 -0
  109. package/dist/codegen/generators/typescript/channels/types.d.ts +181 -0
  110. package/dist/codegen/generators/typescript/channels/types.js +131 -0
  111. package/dist/codegen/generators/typescript/channels/utils.d.ts +64 -0
  112. package/dist/codegen/generators/typescript/channels/utils.js +163 -0
  113. package/dist/codegen/generators/typescript/client/index.d.ts +8 -0
  114. package/dist/codegen/generators/typescript/client/index.js +61 -0
  115. package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.d.ts +6 -0
  116. package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.js +53 -0
  117. package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.d.ts +6 -0
  118. package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.js +90 -0
  119. package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.d.ts +6 -0
  120. package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.js +83 -0
  121. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.d.ts +6 -0
  122. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.js +54 -0
  123. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.d.ts +6 -0
  124. package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.js +82 -0
  125. package/dist/codegen/generators/typescript/client/protocols/nats.d.ts +2 -0
  126. package/dist/codegen/generators/typescript/client/protocols/nats.js +182 -0
  127. package/dist/codegen/generators/typescript/client/types.d.ts +49 -0
  128. package/dist/codegen/generators/typescript/client/types.js +37 -0
  129. package/dist/codegen/generators/typescript/headers.d.ts +54 -0
  130. package/dist/codegen/generators/typescript/headers.js +138 -0
  131. package/dist/codegen/generators/typescript/index.d.ts +7 -0
  132. package/dist/codegen/generators/typescript/index.js +38 -0
  133. package/dist/codegen/generators/typescript/models.d.ts +21761 -0
  134. package/dist/codegen/generators/typescript/models.js +64 -0
  135. package/dist/codegen/generators/typescript/parameters.d.ts +37 -0
  136. package/dist/codegen/generators/typescript/parameters.js +101 -0
  137. package/dist/codegen/generators/typescript/payloads.d.ts +73 -0
  138. package/dist/codegen/generators/typescript/payloads.js +250 -0
  139. package/dist/codegen/generators/typescript/types.d.ts +34 -0
  140. package/dist/codegen/generators/typescript/types.js +70 -0
  141. package/dist/codegen/generators/typescript/utils.d.ts +38 -0
  142. package/dist/codegen/generators/typescript/utils.js +195 -0
  143. package/dist/codegen/index.d.ts +7 -0
  144. package/dist/codegen/index.js +38 -0
  145. package/dist/codegen/inputs/asyncapi/generators/headers.d.ts +3 -0
  146. package/dist/codegen/inputs/asyncapi/generators/headers.js +41 -0
  147. package/dist/codegen/inputs/asyncapi/generators/parameters.d.ts +14 -0
  148. package/dist/codegen/inputs/asyncapi/generators/parameters.js +120 -0
  149. package/dist/codegen/inputs/asyncapi/generators/payloads.d.ts +16 -0
  150. package/dist/codegen/inputs/asyncapi/generators/payloads.js +124 -0
  151. package/dist/codegen/inputs/asyncapi/generators/types.d.ts +9 -0
  152. package/dist/codegen/inputs/asyncapi/generators/types.js +61 -0
  153. package/dist/codegen/inputs/asyncapi/index.d.ts +1 -0
  154. package/dist/codegen/inputs/asyncapi/index.js +7 -0
  155. package/dist/codegen/inputs/asyncapi/parser.d.ts +4 -0
  156. package/dist/codegen/inputs/asyncapi/parser.js +90 -0
  157. package/dist/codegen/inputs/index.d.ts +3 -0
  158. package/dist/codegen/inputs/index.js +19 -0
  159. package/dist/codegen/inputs/jsonschema/generators/index.d.ts +1 -0
  160. package/dist/codegen/inputs/jsonschema/generators/index.js +5 -0
  161. package/dist/codegen/inputs/jsonschema/generators/models.d.ts +7 -0
  162. package/dist/codegen/inputs/jsonschema/generators/models.js +26 -0
  163. package/dist/codegen/inputs/jsonschema/index.d.ts +1 -0
  164. package/dist/codegen/inputs/jsonschema/index.js +7 -0
  165. package/dist/codegen/inputs/jsonschema/parser.d.ts +31 -0
  166. package/dist/codegen/inputs/jsonschema/parser.js +128 -0
  167. package/dist/codegen/inputs/openapi/generators/headers.d.ts +3 -0
  168. package/dist/codegen/inputs/openapi/generators/headers.js +101 -0
  169. package/dist/codegen/inputs/openapi/generators/parameters.d.ts +10 -0
  170. package/dist/codegen/inputs/openapi/generators/parameters.js +852 -0
  171. package/dist/codegen/inputs/openapi/generators/payloads.d.ts +3 -0
  172. package/dist/codegen/inputs/openapi/generators/payloads.js +231 -0
  173. package/dist/codegen/inputs/openapi/generators/types.d.ts +9 -0
  174. package/dist/codegen/inputs/openapi/generators/types.js +86 -0
  175. package/dist/codegen/inputs/openapi/index.d.ts +2 -0
  176. package/dist/codegen/inputs/openapi/index.js +8 -0
  177. package/dist/codegen/inputs/openapi/parser.d.ts +4 -0
  178. package/dist/codegen/inputs/openapi/parser.js +115 -0
  179. package/dist/codegen/inputs/openapi/security.d.ts +56 -0
  180. package/dist/codegen/inputs/openapi/security.js +193 -0
  181. package/dist/codegen/modelina/index.d.ts +2 -0
  182. package/dist/codegen/modelina/index.js +20 -0
  183. package/dist/codegen/modelina/presets/index.d.ts +3 -0
  184. package/dist/codegen/modelina/presets/index.js +14 -0
  185. package/dist/codegen/modelina/presets/primitives.d.ts +34 -0
  186. package/dist/codegen/modelina/presets/primitives.js +211 -0
  187. package/dist/codegen/modelina/presets/union.d.ts +33 -0
  188. package/dist/codegen/modelina/presets/union.js +197 -0
  189. package/dist/codegen/modelina/presets/validation.d.ts +66 -0
  190. package/dist/codegen/modelina/presets/validation.js +183 -0
  191. package/dist/codegen/modelina/types.d.ts +61845 -0
  192. package/dist/codegen/modelina/types.js +412 -0
  193. package/dist/codegen/output/filesystem.d.ts +30 -0
  194. package/dist/codegen/output/filesystem.js +61 -0
  195. package/dist/codegen/output/index.d.ts +16 -0
  196. package/dist/codegen/output/index.js +57 -0
  197. package/dist/codegen/output/memory.d.ts +54 -0
  198. package/dist/codegen/output/memory.js +81 -0
  199. package/dist/codegen/output/modelina.d.ts +30 -0
  200. package/dist/codegen/output/modelina.js +30 -0
  201. package/dist/codegen/output/types.d.ts +47 -0
  202. package/dist/codegen/output/types.js +6 -0
  203. package/dist/codegen/renderer.d.ts +13 -0
  204. package/dist/codegen/renderer.js +309 -0
  205. package/dist/codegen/schemaPostProcess.d.ts +25 -0
  206. package/dist/codegen/schemaPostProcess.js +38 -0
  207. package/dist/codegen/types.d.ts +285187 -0
  208. package/dist/codegen/types.js +177 -0
  209. package/dist/codegen/utils.d.ts +126 -0
  210. package/dist/codegen/utils.js +373 -0
  211. package/dist/commands/base.d.ts +18 -0
  212. package/dist/commands/base.js +59 -0
  213. package/dist/commands/generate.d.ts +46 -0
  214. package/dist/commands/generate.js +305 -0
  215. package/dist/commands/init.d.ts +55 -0
  216. package/dist/commands/init.js +544 -0
  217. package/dist/commands/telemetry.d.ts +25 -0
  218. package/dist/commands/telemetry.js +115 -0
  219. package/dist/index.d.ts +29 -0
  220. package/dist/index.js +35 -0
  221. package/dist/telemetry/anonymize.d.ts +19 -0
  222. package/dist/telemetry/anonymize.js +73 -0
  223. package/dist/telemetry/collector.d.ts +26 -0
  224. package/dist/telemetry/collector.js +57 -0
  225. package/dist/telemetry/config.d.ts +32 -0
  226. package/dist/telemetry/config.js +97 -0
  227. package/dist/telemetry/events.d.ts +72 -0
  228. package/dist/telemetry/events.js +5 -0
  229. package/dist/telemetry/index.d.ts +46 -0
  230. package/dist/telemetry/index.js +91 -0
  231. package/dist/telemetry/notice.d.ts +8 -0
  232. package/dist/telemetry/notice.js +50 -0
  233. package/dist/telemetry/sender.d.ts +14 -0
  234. package/dist/telemetry/sender.js +125 -0
  235. package/dist/utils/gitignore.d.ts +66 -0
  236. package/dist/utils/gitignore.js +111 -0
  237. package/dist/utils/inputSource.d.ts +3 -0
  238. package/dist/utils/inputSource.js +26 -0
  239. package/dist/utils/refResolvers.d.ts +29 -0
  240. package/dist/utils/refResolvers.js +83 -0
  241. package/dist/utils/remoteFetch.d.ts +18 -0
  242. package/dist/utils/remoteFetch.js +64 -0
  243. package/oclif.manifest.json +510 -0
  244. package/package.json +155 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateKafkaChannels = exports.renderSubscribe = exports.renderPublish = void 0;
4
+ /* eslint-disable sonarjs/cognitive-complexity */
5
+ /* eslint-disable security/detect-object-injection */
6
+ const types_1 = require("../../types");
7
+ const utils_1 = require("../../../../../utils");
8
+ const utils_2 = require("../../utils");
9
+ const asyncapi_1 = require("../../asyncapi");
10
+ const publish_1 = require("./publish");
11
+ Object.defineProperty(exports, "renderPublish", { enumerable: true, get: function () { return publish_1.renderPublish; } });
12
+ const subscribe_1 = require("./subscribe");
13
+ Object.defineProperty(exports, "renderSubscribe", { enumerable: true, get: function () { return subscribe_1.renderSubscribe; } });
14
+ const errors_1 = require("../../../../../errors");
15
+ async function generateKafkaChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
16
+ const { parameter, topic } = context;
17
+ const ignoreOperation = !context.generator.asyncapiGenerateForOperations;
18
+ let kafkaTopic = topic.startsWith('/') ? topic.slice(1) : topic;
19
+ kafkaTopic = kafkaTopic.replace(/\//g, context.generator.kafkaTopicSeparator);
20
+ const kafkaContext = {
21
+ channelParameters: parameter,
22
+ channelHeaders: context.headers, // Kafka supports headers
23
+ topic: kafkaTopic,
24
+ messageType: '',
25
+ subName: context.subName,
26
+ payloadGenerator: context.payloads
27
+ };
28
+ const operations = channel.operations().all();
29
+ const renders = operations.length > 0 && !ignoreOperation
30
+ ? await generateForOperations(context, channel, kafkaContext)
31
+ : await generateForChannels(context, channel, kafkaContext);
32
+ addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
33
+ }
34
+ exports.generateKafkaChannels = generateKafkaChannels;
35
+ function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
36
+ protocolCodeFunctions['kafka'].push(...renders.map((value) => value.code));
37
+ externalProtocolFunctionInformation['kafka'].push(...renders.map((value) => ({
38
+ functionType: value.functionType,
39
+ functionName: value.functionName,
40
+ messageType: value.messageType,
41
+ replyType: value.replyType,
42
+ parameterType: parameter?.type
43
+ })));
44
+ const renderedDependencies = renders
45
+ .map((value) => value.dependencies)
46
+ .flat(Infinity);
47
+ dependencies.push(...new Set(renderedDependencies));
48
+ }
49
+ async function generateForOperations(context, channel, kafkaContext) {
50
+ const renders = [];
51
+ const { generator, payloads } = context;
52
+ const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
53
+ for (const operation of channel.operations().all()) {
54
+ const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
55
+ const payloadId = (0, utils_1.findOperationId)(operation, channel);
56
+ const payload = payloads.operationModels[payloadId];
57
+ if (!payload) {
58
+ throw (0, errors_1.createMissingPayloadError)({
59
+ channelOrOperation: payloadId,
60
+ protocol: 'Kafka'
61
+ });
62
+ }
63
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
64
+ if (messageType === undefined) {
65
+ throw new Error(`Could not find message type for channel typescript generator for Kafka`);
66
+ }
67
+ // Extract operation metadata for JSDoc
68
+ const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
69
+ const updatedContext = {
70
+ ...kafkaContext,
71
+ messageType,
72
+ messageModule,
73
+ subName: (0, utils_1.findNameFromOperation)(operation, channel),
74
+ description,
75
+ deprecated
76
+ };
77
+ renders.push(...generateOperationRenders(operation, updatedContext, updatedFunctionTypeMapping, generator));
78
+ }
79
+ return renders;
80
+ }
81
+ function generateOperationRenders(operation, kafkaContext, functionTypeMapping, generator) {
82
+ const renders = [];
83
+ const action = operation.action();
84
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.KAFKA_PUBLISH, action, generator.asyncapiReverseOperations)) {
85
+ renders.push((0, publish_1.renderPublish)(kafkaContext));
86
+ }
87
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.KAFKA_SUBSCRIBE, action, generator.asyncapiReverseOperations)) {
88
+ renders.push((0, subscribe_1.renderSubscribe)(kafkaContext));
89
+ }
90
+ return renders;
91
+ }
92
+ async function generateForChannels(context, channel, kafkaContext) {
93
+ const renders = [];
94
+ const { generator, payloads } = context;
95
+ const functionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(channel) ??
96
+ generator.functionTypeMapping?.[channel.id()];
97
+ const payload = payloads.channelModels[channel.id()];
98
+ if (!payload) {
99
+ throw (0, errors_1.createMissingPayloadError)({
100
+ channelOrOperation: channel.id(),
101
+ protocol: 'Kafka'
102
+ });
103
+ }
104
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
105
+ if (messageType === undefined) {
106
+ throw new Error(`Could not find message type for channel typescript generator for Kafka`);
107
+ }
108
+ const updatedContext = { ...kafkaContext, messageType, messageModule };
109
+ const renderChecks = [
110
+ {
111
+ check: types_1.ChannelFunctionTypes.KAFKA_PUBLISH,
112
+ render: publish_1.renderPublish,
113
+ action: 'send'
114
+ },
115
+ {
116
+ check: types_1.ChannelFunctionTypes.KAFKA_SUBSCRIBE,
117
+ render: subscribe_1.renderSubscribe,
118
+ action: 'receive'
119
+ }
120
+ ];
121
+ for (const { check, render, action } of renderChecks) {
122
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, check, action, generator.asyncapiReverseOperations)) {
123
+ renders.push(render(updatedContext));
124
+ }
125
+ }
126
+ return renders;
127
+ }
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderPublish = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ const __1 = require("../..");
6
+ const utils_1 = require("../../../utils");
7
+ const utils_2 = require("../../utils");
8
+ function renderPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `produceTo${subName}`, description, deprecated }) {
9
+ const addressToUse = channelParameters
10
+ ? `parameters.getChannelWithParameters('${topic}')`
11
+ : `'${topic}'`;
12
+ let messageMarshalling = 'message.marshal()';
13
+ if (messageModule) {
14
+ messageMarshalling = `${messageModule}.marshal(message)`;
15
+ }
16
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
17
+ const publishOperation = messageType === 'null'
18
+ ? `let dataToSend: any = null;`
19
+ : `let dataToSend: any = ${messageMarshalling};`;
20
+ const functionParameters = [
21
+ {
22
+ parameter: `message`,
23
+ parameterType: `message: ${messageType}`,
24
+ jsDoc: ' * @param message to publish'
25
+ },
26
+ ...(channelParameters
27
+ ? [
28
+ {
29
+ parameter: `parameters`,
30
+ parameterType: `parameters: ${channelParameters.type}`,
31
+ jsDoc: ' * @param parameters for topic substitution'
32
+ }
33
+ ]
34
+ : []),
35
+ ...(channelHeaders
36
+ ? [
37
+ {
38
+ parameter: `headers`,
39
+ parameterType: `headers?: ${channelHeaders.type}`,
40
+ jsDoc: ' * @param headers optional headers to include with the message'
41
+ }
42
+ ]
43
+ : []),
44
+ {
45
+ parameter: 'kafka',
46
+ parameterType: 'kafka: Kafka.Kafka',
47
+ jsDoc: ' * @param kafka the KafkaJS client to publish from'
48
+ }
49
+ ];
50
+ const headersHandling = channelHeaders
51
+ ? `// Set up headers if provided
52
+ let messageHeaders: Record<string, string> | undefined = undefined;
53
+ if (headers) {
54
+ const headerData = headers.marshal();
55
+ const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
56
+ messageHeaders = {};
57
+ for (const [key, value] of Object.entries(parsedHeaders)) {
58
+ if (value !== undefined) {
59
+ messageHeaders[key] = String(value);
60
+ }
61
+ }
62
+ }`
63
+ : '';
64
+ const headersInMessage = channelHeaders ? 'headers: messageHeaders' : '';
65
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
66
+ description,
67
+ deprecated,
68
+ fallbackDescription: `Kafka publish operation for \`${topic}\``,
69
+ parameters: functionParameters.map((param) => ({
70
+ jsDoc: param.jsDoc
71
+ }))
72
+ });
73
+ const code = `${jsDoc}
74
+ function ${functionName}({
75
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
76
+ }: {
77
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
78
+ }): Promise<Kafka.Producer> {
79
+ return new Promise(async (resolve, reject) => {
80
+ try {
81
+ ${publishOperation}
82
+ const producer = kafka.producer();
83
+ await producer.connect();
84
+ ${headersHandling}
85
+
86
+ await producer.send({
87
+ topic: ${addressToUse},
88
+ messages: [
89
+ {
90
+ value: dataToSend${channelHeaders ? `,\n ${headersInMessage}` : ''}
91
+ },
92
+ ],
93
+ });
94
+ resolve(producer);
95
+ } catch (e: any) {
96
+ reject(e);
97
+ }
98
+ });
99
+ }`;
100
+ return {
101
+ messageType,
102
+ code,
103
+ functionName,
104
+ dependencies: [`import * as Kafka from 'kafkajs';`],
105
+ functionType: __1.ChannelFunctionTypes.KAFKA_PUBLISH
106
+ };
107
+ }
108
+ exports.renderPublish = renderPublish;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, payloadGenerator, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderSubscribe = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ /* eslint-disable no-nested-ternary */
6
+ const __1 = require("../..");
7
+ const utils_1 = require("../../../utils");
8
+ const utils_2 = require("../../utils");
9
+ const utils_3 = require("./utils");
10
+ function renderSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `consumeFrom${subName}`, payloadGenerator, description, deprecated }) {
11
+ const includeValidation = payloadGenerator.generator.includeValidation;
12
+ const addressToUse = channelParameters
13
+ ? `parameters.getChannelWithParameters('${topic}')`
14
+ : `'${topic}'`;
15
+ const messageUnmarshalling = `${messageModule ?? messageType}.unmarshal(receivedData)`;
16
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
17
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
18
+ includeValidation,
19
+ messageModule,
20
+ messageType,
21
+ onValidationFail: channelParameters && channelHeaders
22
+ ? `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, parameters, extractedHeaders, kafkaMessage);`
23
+ : channelParameters
24
+ ? `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, parameters, kafkaMessage);`
25
+ : channelHeaders
26
+ ? `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, extractedHeaders, kafkaMessage);`
27
+ : `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, kafkaMessage);`
28
+ });
29
+ const callbackFunctionParameters = [
30
+ {
31
+ parameter: 'err?: Error',
32
+ jsDoc: ' * @param err if any error occurred this will be sat'
33
+ },
34
+ {
35
+ parameter: `msg?: ${messageType}`,
36
+ jsDoc: ' * @param msg that was received'
37
+ },
38
+ ...(channelParameters
39
+ ? [
40
+ {
41
+ parameter: `parameters?: ${channelParameters.type}`,
42
+ jsDoc: ' * @param parameters that was received in the topic'
43
+ }
44
+ ]
45
+ : []),
46
+ ...(channelHeaders
47
+ ? [
48
+ {
49
+ parameter: `headers?: ${channelHeaders.type}`,
50
+ jsDoc: ' * @param headers that was received with the message'
51
+ }
52
+ ]
53
+ : []),
54
+ {
55
+ parameter: `kafkaMsg?: Kafka.EachMessagePayload`,
56
+ jsDoc: ' * @param kafkaMsg'
57
+ }
58
+ ];
59
+ const functionParameters = [
60
+ {
61
+ parameter: `onDataCallback`,
62
+ parameterType: `onDataCallback: (${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => void`,
63
+ jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when messages are received`
64
+ },
65
+ ...(channelParameters
66
+ ? [
67
+ {
68
+ parameter: `parameters`,
69
+ parameterType: `parameters: ${channelParameters.type}`,
70
+ jsDoc: ' * @param parameters for topic substitution'
71
+ }
72
+ ]
73
+ : []),
74
+ {
75
+ parameter: 'kafka',
76
+ parameterType: 'kafka: Kafka.Kafka',
77
+ jsDoc: ' * @param kafka the KafkaJS client to subscribe through'
78
+ },
79
+ {
80
+ parameter: `options = {fromBeginning: true, groupId: ''}`,
81
+ parameterType: `options: {fromBeginning: boolean, groupId: string}`,
82
+ jsDoc: ' * @param options when setting up the subscription'
83
+ },
84
+ {
85
+ parameter: 'skipMessageValidation = false',
86
+ parameterType: 'skipMessageValidation?: boolean',
87
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
88
+ }
89
+ ];
90
+ // Generate message receiving code using utility function
91
+ const whenReceivingMessage = (0, utils_3.generateKafkaMessageReceivingCode)({
92
+ channelParameters,
93
+ channelHeaders,
94
+ messageType,
95
+ messageUnmarshalling,
96
+ potentialValidationFunction
97
+ });
98
+ const callbackJsDocParameters = callbackFunctionParameters
99
+ .map((param) => param.jsDoc)
100
+ .join('\n');
101
+ const mainJsDoc = (0, utils_2.renderChannelJSDoc)({
102
+ description,
103
+ deprecated,
104
+ fallbackDescription: `Kafka subscription for \`${topic}\``,
105
+ parameters: functionParameters.map((param) => ({
106
+ jsDoc: param.jsDoc
107
+ }))
108
+ });
109
+ const code = `/**
110
+ * Callback for when receiving messages
111
+ *
112
+ * @callback ${functionName}Callback
113
+ ${callbackJsDocParameters}
114
+ */
115
+
116
+ ${mainJsDoc}
117
+ function ${functionName}({
118
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
119
+ }: {
120
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
121
+ }): Promise<Kafka.Consumer> {
122
+ return new Promise(async (resolve, reject) => {
123
+ try {
124
+ if(!options.groupId) {
125
+ return reject('No group ID provided');
126
+ }
127
+ const consumer = kafka.consumer({ groupId: options.groupId });
128
+
129
+ ${potentialValidatorCreation}
130
+ await consumer.connect();
131
+ await consumer.subscribe({ topic: ${addressToUse}, fromBeginning: options.fromBeginning });
132
+ await consumer.run({
133
+ eachMessage: async (kafkaMessage: Kafka.EachMessagePayload) => {
134
+ const { topic, message } = kafkaMessage;
135
+ const receivedData = message.value?.toString()!;
136
+ ${channelParameters ? `const parameters = ${channelParameters.type}.createFromChannel(topic, '${topic}', ${(0, utils_1.findRegexFromChannel)(topic)});` : ''}
137
+ ${whenReceivingMessage}
138
+ }
139
+ });
140
+ resolve(consumer);
141
+ } catch (e: any) {
142
+ reject(e);
143
+ }
144
+ });
145
+ }`;
146
+ return {
147
+ messageType,
148
+ code,
149
+ functionName,
150
+ dependencies: [`import * as Kafka from 'kafkajs';`],
151
+ functionType: __1.ChannelFunctionTypes.KAFKA_SUBSCRIBE
152
+ };
153
+ }
154
+ exports.renderSubscribe = renderSubscribe;
@@ -0,0 +1,11 @@
1
+ import { ConstrainedObjectModel } from '@asyncapi/modelina';
2
+ /**
3
+ * Generates the message receiving code for Kafka subscribe functions
4
+ */
5
+ export declare function generateKafkaMessageReceivingCode({ channelParameters, channelHeaders, messageType, messageUnmarshalling, potentialValidationFunction }: {
6
+ channelParameters?: ConstrainedObjectModel;
7
+ channelHeaders?: ConstrainedObjectModel;
8
+ messageType: string;
9
+ messageUnmarshalling: string;
10
+ potentialValidationFunction: string;
11
+ }): string;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateKafkaMessageReceivingCode = void 0;
4
+ /**
5
+ * Generates the message receiving code for Kafka subscribe functions
6
+ */
7
+ function generateKafkaMessageReceivingCode({ channelParameters, channelHeaders, messageType, messageUnmarshalling, potentialValidationFunction }) {
8
+ // Generate header extraction code
9
+ const headerExtraction = channelHeaders
10
+ ? `
11
+ // Extract headers if present
12
+ let extractedHeaders: ${channelHeaders.type} | undefined = undefined;
13
+ if (message.headers) {
14
+ const headerObj: Record<string, any> = {};
15
+ for (const [key, value] of Object.entries(message.headers)) {
16
+ if (value !== undefined) {
17
+ headerObj[key] = value.toString();
18
+ }
19
+ }
20
+ extractedHeaders = ${channelHeaders.type}.unmarshal(headerObj);
21
+ }`
22
+ : '';
23
+ if (channelParameters && channelHeaders) {
24
+ if (messageType === 'null') {
25
+ return `${headerExtraction}
26
+ onDataCallback(undefined, null, parameters, extractedHeaders, kafkaMessage);`;
27
+ }
28
+ return `${headerExtraction}
29
+ ${potentialValidationFunction}
30
+ const callbackData = ${messageUnmarshalling};
31
+ onDataCallback(undefined, callbackData, parameters, extractedHeaders, kafkaMessage);`;
32
+ }
33
+ else if (channelParameters) {
34
+ if (messageType === 'null') {
35
+ return `onDataCallback(undefined, null, parameters, kafkaMessage);`;
36
+ }
37
+ return `${potentialValidationFunction}
38
+ const callbackData = ${messageUnmarshalling};
39
+ onDataCallback(undefined, callbackData, parameters, kafkaMessage);`;
40
+ }
41
+ else if (channelHeaders) {
42
+ if (messageType === 'null') {
43
+ return `${headerExtraction}
44
+ onDataCallback(undefined, null, extractedHeaders, kafkaMessage);`;
45
+ }
46
+ return `${headerExtraction}
47
+ ${potentialValidationFunction}
48
+ const callbackData = ${messageUnmarshalling};
49
+ onDataCallback(undefined, callbackData, extractedHeaders, kafkaMessage);`;
50
+ }
51
+ else if (messageType === 'null') {
52
+ return `onDataCallback(undefined, null, kafkaMessage);`;
53
+ }
54
+ return `${potentialValidationFunction}
55
+ const callbackData = ${messageUnmarshalling};
56
+ onDataCallback(undefined, callbackData, kafkaMessage);`;
57
+ }
58
+ exports.generateKafkaMessageReceivingCode = generateKafkaMessageReceivingCode;
@@ -0,0 +1,6 @@
1
+ import { TypeScriptChannelRenderedFunctionType, TypeScriptChannelsGeneratorContext } from '../../types';
2
+ import { renderPublish } from './publish';
3
+ import { renderSubscribe } from './subscribe';
4
+ import { ChannelInterface } from '@asyncapi/parser';
5
+ export { renderPublish, renderSubscribe };
6
+ export declare function generateMqttChannels(context: TypeScriptChannelsGeneratorContext, channel: ChannelInterface, protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, dependencies: string[]): Promise<void>;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateMqttChannels = exports.renderSubscribe = exports.renderPublish = void 0;
4
+ /* eslint-disable sonarjs/cognitive-complexity */
5
+ /* eslint-disable security/detect-object-injection */
6
+ const types_1 = require("../../types");
7
+ const utils_1 = require("../../../../../utils");
8
+ const utils_2 = require("../../utils");
9
+ const publish_1 = require("./publish");
10
+ Object.defineProperty(exports, "renderPublish", { enumerable: true, get: function () { return publish_1.renderPublish; } });
11
+ const subscribe_1 = require("./subscribe");
12
+ Object.defineProperty(exports, "renderSubscribe", { enumerable: true, get: function () { return subscribe_1.renderSubscribe; } });
13
+ const asyncapi_1 = require("../../asyncapi");
14
+ const errors_1 = require("../../../../../errors");
15
+ async function generateMqttChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
16
+ const { generator, parameter, topic } = context;
17
+ const ignoreOperation = !generator.asyncapiGenerateForOperations;
18
+ const mqttContext = {
19
+ channelParameters: parameter,
20
+ channelHeaders: context.headers, // MQTT v5 supports user properties as headers
21
+ topic,
22
+ subName: context.subName,
23
+ messageType: '',
24
+ payloadGenerator: context.payloads
25
+ };
26
+ let renders = [];
27
+ const operations = channel.operations().all();
28
+ if (operations.length > 0 && !ignoreOperation) {
29
+ renders = generateForOperations(context, channel, mqttContext);
30
+ }
31
+ else {
32
+ renders = generateForChannels(context, channel, mqttContext);
33
+ }
34
+ addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
35
+ }
36
+ exports.generateMqttChannels = generateMqttChannels;
37
+ function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
38
+ protocolCodeFunctions['mqtt'].push(...renders.map((value) => value.code));
39
+ externalProtocolFunctionInformation['mqtt'].push(...renders.map((value) => ({
40
+ functionType: value.functionType,
41
+ functionName: value.functionName,
42
+ messageType: value.messageType,
43
+ replyType: value.replyType,
44
+ parameterType: parameter?.type
45
+ })));
46
+ const renderedDependencies = renders
47
+ .map((value) => value.dependencies)
48
+ .flat(Infinity);
49
+ dependencies.push(...new Set(renderedDependencies));
50
+ }
51
+ function generateForOperations(context, channel, mqttContext) {
52
+ const renders = [];
53
+ const { generator, payloads } = context;
54
+ const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
55
+ for (const operation of channel.operations().all()) {
56
+ const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
57
+ const payloadId = (0, utils_1.findOperationId)(operation, channel);
58
+ const payload = payloads.operationModels[payloadId];
59
+ if (payload === undefined) {
60
+ throw (0, errors_1.createMissingPayloadError)({
61
+ channelOrOperation: payloadId,
62
+ protocol: 'MQTT'
63
+ });
64
+ }
65
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
66
+ if (messageType === undefined) {
67
+ throw new Error(`Could not find message type for ${payloadId} for mqtt channel typescript generator`);
68
+ }
69
+ // Extract operation metadata for JSDoc
70
+ const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
71
+ const updatedContext = {
72
+ ...mqttContext,
73
+ messageType,
74
+ messageModule,
75
+ subName: (0, utils_1.findNameFromOperation)(operation, channel),
76
+ description,
77
+ deprecated
78
+ };
79
+ const action = operation.action();
80
+ if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_PUBLISH, action, generator.asyncapiReverseOperations)) {
81
+ renders.push((0, publish_1.renderPublish)(updatedContext));
82
+ }
83
+ if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_SUBSCRIBE, action, generator.asyncapiReverseOperations)) {
84
+ renders.push((0, subscribe_1.renderSubscribe)(updatedContext));
85
+ }
86
+ }
87
+ return renders;
88
+ }
89
+ function generateForChannels(context, channel, mqttContext) {
90
+ const renders = [];
91
+ const { generator, payloads } = context;
92
+ const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
93
+ const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(channel) ?? functionTypeMapping;
94
+ const payload = payloads.channelModels[channel.id()];
95
+ if (payload === undefined) {
96
+ throw (0, errors_1.createMissingPayloadError)({
97
+ channelOrOperation: channel.id(),
98
+ protocol: 'MQTT'
99
+ });
100
+ }
101
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
102
+ if (messageType === undefined) {
103
+ throw new Error(`Could not find message type for ${channel.id()} for mqtt channel typescript generator`);
104
+ }
105
+ const updatedContext = { ...mqttContext, messageType, messageModule };
106
+ if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_PUBLISH, 'send', generator.asyncapiReverseOperations)) {
107
+ renders.push((0, publish_1.renderPublish)(updatedContext));
108
+ }
109
+ if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_SUBSCRIBE, 'receive', generator.asyncapiReverseOperations)) {
110
+ renders.push((0, subscribe_1.renderSubscribe)(updatedContext));
111
+ }
112
+ return renders;
113
+ }
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;