@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,10 @@
1
+ import { ChannelInterface, OperationInterface } from '@asyncapi/parser';
2
+ import { TypeScriptParameterRenderType } from '../parameters';
3
+ import { TypeScriptPayloadRenderType } from '../payloads';
4
+ import { TypeScriptHeadersRenderType } from '../headers';
5
+ import { ChannelFunctionTypes, TypeScriptChannelRenderedFunctionType, SupportedProtocols, TypeScriptChannelsContext } from './types';
6
+ type Action = 'send' | 'receive' | 'subscribe' | 'publish';
7
+ export declare function shouldRenderFunctionType(givenFunctionTypes: ChannelFunctionTypes[] | undefined, functionTypesToCheckFor: ChannelFunctionTypes | ChannelFunctionTypes[], action: Action, reverseOperation: boolean): boolean;
8
+ export declare function generateTypeScriptChannelsForAsyncAPI(context: TypeScriptChannelsContext, parameters: TypeScriptParameterRenderType, payloads: TypeScriptPayloadRenderType, headers: TypeScriptHeadersRenderType, protocolsToUse: SupportedProtocols[], protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, protocolDependencies: Record<string, string[]>): Promise<void>;
9
+ export declare function getFunctionTypeMappingFromAsyncAPI(object: OperationInterface | ChannelInterface): ChannelFunctionTypes[] | undefined;
10
+ export {};
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFunctionTypeMappingFromAsyncAPI = exports.generateTypeScriptChannelsForAsyncAPI = exports.shouldRenderFunctionType = void 0;
4
+ const types_1 = require("./types");
5
+ const utils_1 = require("../../../utils");
6
+ const utils_2 = require("./utils");
7
+ const nats_1 = require("./protocols/nats");
8
+ const kafka_1 = require("./protocols/kafka");
9
+ const mqtt_1 = require("./protocols/mqtt");
10
+ const amqp_1 = require("./protocols/amqp");
11
+ const eventsource_1 = require("./protocols/eventsource");
12
+ const http_1 = require("./protocols/http");
13
+ const websocket_1 = require("./protocols/websocket");
14
+ const errors_1 = require("../../../errors");
15
+ // eslint-disable-next-line sonarjs/cognitive-complexity
16
+ function shouldRenderFunctionType(givenFunctionTypes, functionTypesToCheckFor, action, reverseOperation) {
17
+ const listToCheck = [
18
+ ...(Array.isArray(functionTypesToCheckFor)
19
+ ? functionTypesToCheckFor
20
+ : [functionTypesToCheckFor])
21
+ ];
22
+ const hasSendingOperation = action === 'send' || action === 'subscribe';
23
+ const hasReceivingOperation = action === 'receive' || action === 'publish';
24
+ const hasFunctionMappingConfig = givenFunctionTypes !== undefined;
25
+ const checkForSending = listToCheck.some((item) => types_1.sendingFunctionTypes.includes(item));
26
+ const checkForReceiving = listToCheck.some((item) => types_1.receivingFunctionTypes.includes(item));
27
+ const hasFunctionType = (givenFunctionTypes ?? []).some((item) => listToCheck.includes(item));
28
+ if (hasFunctionMappingConfig) {
29
+ if (hasFunctionType) {
30
+ const renderForSending = checkForSending && hasSendingOperation;
31
+ const renderForReceiving = checkForReceiving && hasReceivingOperation;
32
+ return renderForSending || renderForReceiving;
33
+ }
34
+ return false;
35
+ }
36
+ if (reverseOperation) {
37
+ const renderForSending = hasSendingOperation && checkForReceiving;
38
+ const renderForReceiving = hasReceivingOperation && checkForSending;
39
+ return renderForSending || renderForReceiving;
40
+ }
41
+ const renderForSending = checkForSending && hasSendingOperation;
42
+ const renderForReceiving = checkForReceiving && hasReceivingOperation;
43
+ return renderForSending || renderForReceiving;
44
+ }
45
+ exports.shouldRenderFunctionType = shouldRenderFunctionType;
46
+ async function generateTypeScriptChannelsForAsyncAPI(context, parameters, payloads, headers, protocolsToUse, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies) {
47
+ const { asyncapiDocument } = validateAsyncapiContext(context);
48
+ const channels = asyncapiDocument
49
+ .allChannels()
50
+ .all()
51
+ .filter((channel) => channel.address() && channel.messages().length > 0);
52
+ // Collect payload/parameter/header imports for each protocol
53
+ const importExtension = (0, utils_1.resolveImportExtension)(context.generator, context.config);
54
+ for (const protocol of protocolsToUse) {
55
+ // eslint-disable-next-line security/detect-object-injection
56
+ const deps = protocolDependencies[protocol];
57
+ (0, utils_2.collectProtocolDependencies)(payloads, parameters, headers, context, deps, importExtension);
58
+ }
59
+ for (const channel of channels) {
60
+ const subName = (0, utils_1.findNameFromChannel)(channel);
61
+ let parameter = undefined;
62
+ if (channel.parameters().length > 0) {
63
+ parameter = parameters.channelModels[channel.id()];
64
+ if (parameter === undefined) {
65
+ throw (0, errors_1.createMissingParameterError)({
66
+ channelOrOperation: channel.id(),
67
+ protocol: 'channels'
68
+ });
69
+ }
70
+ }
71
+ // Headers are now always available, but the specific channel may not have headers defined
72
+ const headerModel = headers.channelModels[channel.id()];
73
+ for (const protocol of protocolsToUse) {
74
+ const protocolContext = {
75
+ ...context,
76
+ subName,
77
+ topic: channel.address(),
78
+ parameter: parameter?.model,
79
+ headers: headerModel?.model,
80
+ payloads
81
+ };
82
+ switch (protocol) {
83
+ case 'nats':
84
+ await (0, nats_1.generateNatsChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['nats']);
85
+ break;
86
+ case 'kafka':
87
+ await (0, kafka_1.generateKafkaChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['kafka']);
88
+ break;
89
+ case 'mqtt':
90
+ await (0, mqtt_1.generateMqttChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['mqtt']);
91
+ break;
92
+ case 'amqp':
93
+ await (0, amqp_1.generateAmqpChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['amqp']);
94
+ break;
95
+ case 'http_client':
96
+ await (0, http_1.generatehttpChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['http_client']);
97
+ break;
98
+ case 'event_source':
99
+ await (0, eventsource_1.generateEventSourceChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['event_source']);
100
+ break;
101
+ case 'websocket':
102
+ await (0, websocket_1.generateWebSocketChannels)(protocolContext, channel, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies['websocket']);
103
+ break;
104
+ default:
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ exports.generateTypeScriptChannelsForAsyncAPI = generateTypeScriptChannelsForAsyncAPI;
111
+ function validateAsyncapiContext(context) {
112
+ const { asyncapiDocument, inputType } = context;
113
+ if (inputType !== 'asyncapi') {
114
+ throw (0, errors_1.createMissingInputDocumentError)({
115
+ expectedType: 'asyncapi',
116
+ generatorPreset: 'channels'
117
+ });
118
+ }
119
+ if (asyncapiDocument === undefined) {
120
+ throw (0, errors_1.createMissingInputDocumentError)({
121
+ expectedType: 'asyncapi',
122
+ generatorPreset: 'channels'
123
+ });
124
+ }
125
+ return { asyncapiDocument };
126
+ }
127
+ function getFunctionTypeMappingFromAsyncAPI(object) {
128
+ return (object.extensions().get('x-the-codegen-project')?.value()
129
+ ?.functionTypeMapping ?? undefined);
130
+ }
131
+ exports.getFunctionTypeMappingFromAsyncAPI = getFunctionTypeMappingFromAsyncAPI;
@@ -0,0 +1,8 @@
1
+ import { TheCodegenConfiguration } from '../../../types';
2
+ import { TypeScriptChannelRenderedFunctionType, TypeScriptChannelRenderType, TypeScriptChannelsContext, TypeScriptChannelsGenerator, defaultTypeScriptChannelsGenerator, TypeScriptChannelsGeneratorInternal, zodTypescriptChannelsGenerator, ChannelFunctionTypes } from './types';
3
+ export { TypeScriptChannelRenderedFunctionType, TypeScriptChannelRenderType, TypeScriptChannelsContext, defaultTypeScriptChannelsGenerator, TypeScriptChannelsGenerator, TypeScriptChannelsGeneratorInternal, zodTypescriptChannelsGenerator, ChannelFunctionTypes };
4
+ export declare function generateTypeScriptChannels(context: TypeScriptChannelsContext): Promise<TypeScriptChannelRenderType>;
5
+ /**
6
+ * Make sure we include all dependencies, if not added manually, is added to the generators.
7
+ */
8
+ export declare function includeTypeScriptChannelDependencies(config: TheCodegenConfiguration, generator: TypeScriptChannelsGenerator): unknown[];
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.includeTypeScriptChannelDependencies = exports.generateTypeScriptChannels = exports.ChannelFunctionTypes = exports.zodTypescriptChannelsGenerator = exports.defaultTypeScriptChannelsGenerator = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const parameters_1 = require("../parameters");
6
+ const payloads_1 = require("../payloads");
7
+ const headers_1 = require("../headers");
8
+ const types_1 = require("./types");
9
+ Object.defineProperty(exports, "defaultTypeScriptChannelsGenerator", { enumerable: true, get: function () { return types_1.defaultTypeScriptChannelsGenerator; } });
10
+ Object.defineProperty(exports, "zodTypescriptChannelsGenerator", { enumerable: true, get: function () { return types_1.zodTypescriptChannelsGenerator; } });
11
+ Object.defineProperty(exports, "ChannelFunctionTypes", { enumerable: true, get: function () { return types_1.ChannelFunctionTypes; } });
12
+ const asyncapi_1 = require("./asyncapi");
13
+ const openapi_1 = require("./openapi");
14
+ // eslint-disable-next-line sonarjs/cognitive-complexity
15
+ async function generateTypeScriptChannels(context) {
16
+ const protocolCodeFunctions = {};
17
+ const externalProtocolFunctionInformation = {};
18
+ const { parameters, payloads, headers } = validateContext(context);
19
+ const generator = context.generator;
20
+ const protocolsToUse = generator.protocols;
21
+ const protocolDependencies = {};
22
+ for (const protocol of protocolsToUse) {
23
+ protocolCodeFunctions[protocol] = [];
24
+ externalProtocolFunctionInformation[protocol] = [];
25
+ protocolDependencies[protocol] = [];
26
+ }
27
+ if (context.inputType === 'asyncapi') {
28
+ await (0, asyncapi_1.generateTypeScriptChannelsForAsyncAPI)(context, parameters, payloads, headers, protocolsToUse, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies);
29
+ }
30
+ else if (context.inputType === 'openapi') {
31
+ await (0, openapi_1.generateTypeScriptChannelsForOpenAPI)(context, parameters, payloads, headers, protocolsToUse, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies);
32
+ }
33
+ return await finalizeGeneration(context, protocolDependencies, protocolCodeFunctions, externalProtocolFunctionInformation, parameters, payloads);
34
+ }
35
+ exports.generateTypeScriptChannels = generateTypeScriptChannels;
36
+ async function finalizeGeneration(context, protocolDependencies, protocolCodeFunctions, externalProtocolFunctionInformation, parameters, payloads) {
37
+ const files = [];
38
+ const generatedProtocols = [];
39
+ const protocolFiles = {};
40
+ // Generate one file per protocol
41
+ for (const [protocol, functions] of Object.entries(protocolCodeFunctions)) {
42
+ if (functions.length === 0) {
43
+ continue;
44
+ }
45
+ const deps = [...new Set(protocolDependencies[protocol] || [])];
46
+ // Get function names for the export statement
47
+ const functionNames = (externalProtocolFunctionInformation[protocol] || []).map((fn) => fn.functionName);
48
+ // Functions are defined first, then exported by name at the end
49
+ const depsSection = deps.join('\n');
50
+ const depsNewline = deps.length > 0 ? '\n\n' : '';
51
+ const functionsSection = functions.join('\n\n');
52
+ const exportSection = functionNames.length > 0
53
+ ? `\n\nexport { ${functionNames.join(', ')} };`
54
+ : '';
55
+ const fileContent = `${depsSection}${depsNewline}${functionsSection}${exportSection}\n`;
56
+ const protocolFilePath = (0, utils_1.joinPath)(context.generator.outputPath, `${protocol}.ts`);
57
+ files.push({ path: protocolFilePath, content: fileContent });
58
+ generatedProtocols.push(protocol);
59
+ protocolFiles[protocol] = fileContent;
60
+ }
61
+ // Generate index.ts with namespace re-exports
62
+ let indexContent;
63
+ if (generatedProtocols.length > 0) {
64
+ const ext = (0, utils_1.resolveImportExtension)(context.generator, context.config);
65
+ const imports = generatedProtocols
66
+ .map((p) => {
67
+ const importPath = (0, utils_1.appendImportExtension)(`./${p}`, ext);
68
+ return `import * as ${p} from '${importPath}';`;
69
+ })
70
+ .join('\n');
71
+ const exports = generatedProtocols.join(', ');
72
+ indexContent = `${imports}\n\nexport {${exports}};\n`;
73
+ }
74
+ else {
75
+ indexContent = '// No protocols generated\n';
76
+ }
77
+ const indexFilePath = (0, utils_1.joinPath)(context.generator.outputPath, 'index.ts');
78
+ files.push({ path: indexFilePath, content: indexContent });
79
+ return {
80
+ parameterRender: parameters,
81
+ payloadRender: payloads,
82
+ generator: context.generator,
83
+ renderedFunctions: externalProtocolFunctionInformation,
84
+ result: indexContent,
85
+ protocolFiles,
86
+ files
87
+ };
88
+ }
89
+ function validateContext(context) {
90
+ const { generator } = context;
91
+ if (!context.dependencyOutputs) {
92
+ throw new Error('Internal error, could not determine previous rendered outputs that is required for channel typescript generator');
93
+ }
94
+ const payloads = context.dependencyOutputs[generator.payloadGeneratorId];
95
+ const parameters = context.dependencyOutputs[generator.parameterGeneratorId];
96
+ const headers = context.dependencyOutputs[generator.headerGeneratorId];
97
+ if (!payloads) {
98
+ throw new Error('Internal error, could not determine previous rendered payloads generator that is required for channel TypeScript generator');
99
+ }
100
+ if (!parameters) {
101
+ throw new Error('Internal error, could not determine previous rendered parameters generator that is required for channel TypeScript generator');
102
+ }
103
+ if (!headers) {
104
+ throw new Error('Internal error, could not determine previous rendered headers generator that is required for channel TypeScript generator');
105
+ }
106
+ return { payloads, parameters, headers };
107
+ }
108
+ /**
109
+ * Make sure we include all dependencies, if not added manually, is added to the generators.
110
+ */
111
+ function includeTypeScriptChannelDependencies(config, generator) {
112
+ const newGenerators = [];
113
+ const parameterGeneratorId = generator.parameterGeneratorId;
114
+ const payloadGeneratorId = generator.payloadGeneratorId;
115
+ const headerGeneratorId = generator.headerGeneratorId;
116
+ const hasParameterGenerator = config.generators.find((generatorSearch) => generatorSearch.id === parameterGeneratorId) !== undefined;
117
+ const hasPayloadGenerator = config.generators.find((generatorSearch) => generatorSearch.id === payloadGeneratorId) !== undefined;
118
+ const hasHeaderGenerator = config.generators.find((generatorSearch) => generatorSearch.id === headerGeneratorId) !== undefined;
119
+ if (!hasParameterGenerator) {
120
+ const defaultChannelParameterGenerator = {
121
+ ...parameters_1.defaultTypeScriptParametersOptions,
122
+ outputPath: (0, utils_1.joinPath)(generator.outputPath ?? '', './parameter')
123
+ };
124
+ newGenerators.push(defaultChannelParameterGenerator);
125
+ }
126
+ if (!hasPayloadGenerator) {
127
+ const defaultChannelPayloadGenerator = {
128
+ ...payloads_1.defaultTypeScriptPayloadGenerator,
129
+ outputPath: (0, utils_1.joinPath)(generator.outputPath ?? '', './payload')
130
+ };
131
+ newGenerators.push(defaultChannelPayloadGenerator);
132
+ }
133
+ if (!hasHeaderGenerator) {
134
+ const defaultChannelHeaderGenerator = {
135
+ ...headers_1.defaultTypeScriptHeadersOptions,
136
+ outputPath: (0, utils_1.joinPath)(generator.outputPath ?? '', './headers')
137
+ };
138
+ newGenerators.push(defaultChannelHeaderGenerator);
139
+ }
140
+ return newGenerators;
141
+ }
142
+ exports.includeTypeScriptChannelDependencies = includeTypeScriptChannelDependencies;
@@ -0,0 +1,9 @@
1
+ import { TypeScriptParameterRenderType } from '../parameters';
2
+ import { TypeScriptPayloadRenderType } from '../payloads';
3
+ import { TypeScriptHeadersRenderType } from '../headers';
4
+ import { TypeScriptChannelRenderedFunctionType, SupportedProtocols, TypeScriptChannelsContext } from './types';
5
+ /**
6
+ * Generates TypeScript HTTP client channels from an OpenAPI document.
7
+ * Only supports http_client protocol - other protocols are ignored for OpenAPI input.
8
+ */
9
+ export declare function generateTypeScriptChannelsForOpenAPI(context: TypeScriptChannelsContext, parameters: TypeScriptParameterRenderType, payloads: TypeScriptPayloadRenderType, headers: TypeScriptHeadersRenderType, protocolsToUse: SupportedProtocols[], protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, protocolDependencies: Record<string, string[]>): Promise<void>;
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateTypeScriptChannelsForOpenAPI = void 0;
4
+ const utils_1 = require("./utils");
5
+ const http_1 = require("./protocols/http");
6
+ const utils_2 = require("./utils");
7
+ const utils_3 = require("../utils");
8
+ const errors_1 = require("../../../errors");
9
+ const utils_4 = require("../../../utils");
10
+ const security_1 = require("../../../inputs/openapi/security");
11
+ const HTTP_METHODS = [
12
+ 'get',
13
+ 'post',
14
+ 'put',
15
+ 'patch',
16
+ 'delete',
17
+ 'options',
18
+ 'head'
19
+ ];
20
+ const METHODS_WITH_BODY = ['post', 'put', 'patch'];
21
+ /**
22
+ * Generates TypeScript HTTP client channels from an OpenAPI document.
23
+ * Only supports http_client protocol - other protocols are ignored for OpenAPI input.
24
+ */
25
+ async function generateTypeScriptChannelsForOpenAPI(context, parameters, payloads, headers, protocolsToUse, protocolCodeFunctions, externalProtocolFunctionInformation, protocolDependencies) {
26
+ // Only http_client is supported for OpenAPI
27
+ if (!protocolsToUse.includes('http_client')) {
28
+ return;
29
+ }
30
+ const { openapiDocument } = validateOpenAPIContext(context);
31
+ // Extract security schemes from the OpenAPI document
32
+ const securitySchemes = (0, security_1.extractSecuritySchemes)(openapiDocument);
33
+ // Collect dependencies
34
+ const deps = protocolDependencies['http_client'];
35
+ const importExtension = (0, utils_4.resolveImportExtension)(context.generator, context.config);
36
+ (0, utils_1.collectProtocolDependencies)(payloads, parameters, headers, context, deps, importExtension);
37
+ // Process all operations and collect renders
38
+ const renders = processOpenAPIOperations(openapiDocument, payloads, parameters);
39
+ // Generate common types once (stateless check)
40
+ // Pass security schemes to generate only relevant auth types
41
+ if (protocolCodeFunctions['http_client'].length === 0 && renders.length > 0) {
42
+ const commonTypesCode = (0, http_1.renderHttpCommonTypes)(securitySchemes);
43
+ protocolCodeFunctions['http_client'].unshift(commonTypesCode);
44
+ }
45
+ // Add renders to output
46
+ protocolCodeFunctions['http_client'].push(...renders.map((r) => r.code));
47
+ externalProtocolFunctionInformation['http_client'].push(...renders.map((r) => ({
48
+ functionType: r.functionType,
49
+ functionName: r.functionName,
50
+ messageType: r.messageType ?? '',
51
+ replyType: r.replyType,
52
+ parameterType: undefined
53
+ })));
54
+ // Add dependencies
55
+ const renderedDeps = renders.flatMap((r) => r.dependencies);
56
+ deps.push(...new Set(renderedDeps));
57
+ }
58
+ exports.generateTypeScriptChannelsForOpenAPI = generateTypeScriptChannelsForOpenAPI;
59
+ /**
60
+ * Process all OpenAPI operations and generate HTTP client functions.
61
+ */
62
+ function processOpenAPIOperations(openapiDocument, payloads, parameters) {
63
+ const renders = [];
64
+ for (const [path, pathItem] of Object.entries(openapiDocument.paths ?? {})) {
65
+ if (!pathItem) {
66
+ continue;
67
+ }
68
+ for (const method of HTTP_METHODS) {
69
+ const render = processOperation(pathItem, method, path, payloads, parameters);
70
+ if (render) {
71
+ renders.push(render);
72
+ }
73
+ }
74
+ }
75
+ return renders;
76
+ }
77
+ /**
78
+ * Process a single OpenAPI operation and generate an HTTP client function.
79
+ */
80
+ function processOperation(pathItem, method, path, payloads, parameters) {
81
+ // eslint-disable-next-line security/detect-object-injection
82
+ const operation = pathItem[method];
83
+ if (!operation) {
84
+ return undefined;
85
+ }
86
+ const operationId = getOperationId(operation, method, path);
87
+ const hasBody = METHODS_WITH_BODY.includes(method);
88
+ // Look up payloads
89
+ const requestPayload = hasBody
90
+ ? // eslint-disable-next-line security/detect-object-injection
91
+ payloads.operationModels[operationId]
92
+ : undefined;
93
+ const responsePayloadKey = `${operationId}_Response`;
94
+ // eslint-disable-next-line security/detect-object-injection
95
+ const responsePayload = payloads.operationModels[responsePayloadKey];
96
+ // Look up parameters
97
+ // eslint-disable-next-line security/detect-object-injection
98
+ const parameterModel = parameters.channelModels[operationId];
99
+ // Get message types - handle undefined payloads
100
+ const requestMessageInfo = requestPayload
101
+ ? (0, utils_2.getMessageTypeAndModule)(requestPayload)
102
+ : {
103
+ messageModule: undefined,
104
+ messageType: undefined,
105
+ includesStatusCodes: false
106
+ };
107
+ const responseMessageInfo = responsePayload
108
+ ? (0, utils_2.getMessageTypeAndModule)(responsePayload)
109
+ : {
110
+ messageModule: undefined,
111
+ messageType: undefined,
112
+ includesStatusCodes: false
113
+ };
114
+ const { messageModule: requestMessageModule, messageType: requestMessageType } = requestMessageInfo;
115
+ const { messageModule: replyMessageModule, messageType: replyMessageType, includesStatusCodes: replyIncludesStatusCodes } = responseMessageInfo;
116
+ // Skip if no response type (nothing to generate)
117
+ if (!replyMessageType) {
118
+ return undefined;
119
+ }
120
+ // Extract operation metadata for JSDoc
121
+ const description = operation.description ?? operation.summary;
122
+ const deprecated = operation.deprecated === true;
123
+ // Generate the HTTP client function
124
+ return (0, http_1.renderHttpFetchClient)({
125
+ subName: (0, utils_3.pascalCase)(operationId),
126
+ requestMessageModule: hasBody ? requestMessageModule : undefined,
127
+ requestMessageType: hasBody ? requestMessageType : undefined,
128
+ replyMessageModule,
129
+ replyMessageType,
130
+ requestTopic: path,
131
+ method: method.toUpperCase(),
132
+ channelParameters: parameterModel?.model,
133
+ includesStatusCodes: replyIncludesStatusCodes,
134
+ description,
135
+ deprecated
136
+ });
137
+ }
138
+ /**
139
+ * Validates the context is for OpenAPI input and has a parsed document.
140
+ */
141
+ function validateOpenAPIContext(context) {
142
+ const { openapiDocument, inputType } = context;
143
+ if (inputType !== 'openapi') {
144
+ throw (0, errors_1.createMissingInputDocumentError)({
145
+ expectedType: 'openapi',
146
+ generatorPreset: 'channels'
147
+ });
148
+ }
149
+ if (!openapiDocument) {
150
+ throw (0, errors_1.createMissingInputDocumentError)({
151
+ expectedType: 'openapi',
152
+ generatorPreset: 'channels'
153
+ });
154
+ }
155
+ return { openapiDocument };
156
+ }
157
+ /**
158
+ * Gets the operation ID from an OpenAPI operation.
159
+ * Falls back to generating one from method+path if not present.
160
+ */
161
+ function getOperationId(operation, method, path) {
162
+ if (operation.operationId) {
163
+ return operation.operationId;
164
+ }
165
+ // Generate from method + path
166
+ const sanitizedPath = path.replace(/[^a-zA-Z0-9]/g, '');
167
+ return `${method}${sanitizedPath}`;
168
+ }
@@ -0,0 +1,7 @@
1
+ import { TypeScriptChannelRenderedFunctionType, TypeScriptChannelsGeneratorContext } from '../../types';
2
+ import { renderPublishExchange } from './publishExchange';
3
+ import { renderPublishQueue } from './publishQueue';
4
+ import { renderSubscribeQueue } from './subscribeQueue';
5
+ import { ChannelInterface } from '@asyncapi/parser';
6
+ export { renderPublishExchange, renderPublishQueue, renderSubscribeQueue };
7
+ export declare function generateAmqpChannels(context: TypeScriptChannelsGeneratorContext, channel: ChannelInterface, protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, dependencies: string[]): Promise<void>;
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateAmqpChannels = exports.renderSubscribeQueue = exports.renderPublishQueue = exports.renderPublishExchange = 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 publishExchange_1 = require("./publishExchange");
11
+ Object.defineProperty(exports, "renderPublishExchange", { enumerable: true, get: function () { return publishExchange_1.renderPublishExchange; } });
12
+ const publishQueue_1 = require("./publishQueue");
13
+ Object.defineProperty(exports, "renderPublishQueue", { enumerable: true, get: function () { return publishQueue_1.renderPublishQueue; } });
14
+ const subscribeQueue_1 = require("./subscribeQueue");
15
+ Object.defineProperty(exports, "renderSubscribeQueue", { enumerable: true, get: function () { return subscribeQueue_1.renderSubscribeQueue; } });
16
+ const errors_1 = require("../../../../../errors");
17
+ async function generateAmqpChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
18
+ const { parameter, topic } = context;
19
+ const ignoreOperation = !context.generator.asyncapiGenerateForOperations;
20
+ const amqpContext = {
21
+ channelParameters: parameter,
22
+ channelHeaders: context.headers, // AMQP supports message properties as headers
23
+ topic,
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, amqpContext)
31
+ : await generateForChannels(context, channel, amqpContext);
32
+ addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
33
+ }
34
+ exports.generateAmqpChannels = generateAmqpChannels;
35
+ function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
36
+ protocolCodeFunctions['amqp'].push(...renders.map((value) => value.code));
37
+ externalProtocolFunctionInformation['amqp'].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, amqpContext) {
50
+ const renders = [];
51
+ const { generator, payloads } = context;
52
+ const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
53
+ const exchangeName = channel.bindings().get('amqp')?.value()?.exchange?.name;
54
+ for (const operation of channel.operations().all()) {
55
+ const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
56
+ const payloadId = (0, utils_1.findOperationId)(operation, channel);
57
+ const payload = payloads.operationModels[payloadId];
58
+ if (!payload) {
59
+ throw (0, errors_1.createMissingPayloadError)({
60
+ channelOrOperation: payloadId,
61
+ protocol: 'AMQP'
62
+ });
63
+ }
64
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
65
+ if (messageType === undefined) {
66
+ throw new Error(`Could not find message type for channel typescript generator for AMQP`);
67
+ }
68
+ // Extract operation metadata for JSDoc
69
+ const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
70
+ const updatedContext = {
71
+ ...amqpContext,
72
+ messageType,
73
+ messageModule,
74
+ subName: (0, utils_1.findNameFromOperation)(operation, channel),
75
+ description,
76
+ deprecated
77
+ };
78
+ renders.push(...generateOperationRenders(operation, updatedContext, updatedFunctionTypeMapping, generator, exchangeName));
79
+ }
80
+ return renders;
81
+ }
82
+ function generateOperationRenders(operation, amqpContext, functionTypeMapping, generator, exchangeName) {
83
+ const renders = [];
84
+ const action = operation.action();
85
+ const renderChecks = [
86
+ {
87
+ check: types_1.ChannelFunctionTypes.AMQP_EXCHANGE_PUBLISH,
88
+ render: publishExchange_1.renderPublishExchange,
89
+ additionalProperties: { exchange: exchangeName }
90
+ },
91
+ {
92
+ check: types_1.ChannelFunctionTypes.AMQP_QUEUE_PUBLISH,
93
+ render: publishQueue_1.renderPublishQueue
94
+ },
95
+ {
96
+ check: types_1.ChannelFunctionTypes.AMQP_QUEUE_SUBSCRIBE,
97
+ render: subscribeQueue_1.renderSubscribeQueue
98
+ }
99
+ ];
100
+ for (const { check, render, additionalProperties } of renderChecks) {
101
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, check, action, generator.asyncapiReverseOperations)) {
102
+ renders.push(render({ ...amqpContext, additionalProperties }));
103
+ }
104
+ }
105
+ return renders;
106
+ }
107
+ async function generateForChannels(context, channel, amqpContext) {
108
+ const renders = [];
109
+ const { generator, payloads } = context;
110
+ const functionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(channel) ??
111
+ generator.functionTypeMapping?.[channel.id()];
112
+ const exchangeName = channel.bindings().get('amqp')?.value()?.exchange?.name;
113
+ const payload = payloads.channelModels[channel.id()];
114
+ if (!payload) {
115
+ throw (0, errors_1.createMissingPayloadError)({
116
+ channelOrOperation: channel.id(),
117
+ protocol: 'AMQP'
118
+ });
119
+ }
120
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
121
+ if (messageType === undefined) {
122
+ throw new Error(`Could not find message type for channel typescript generator for AMQP`);
123
+ }
124
+ const updatedContext = { ...amqpContext, messageType, messageModule };
125
+ const renderChecks = [
126
+ {
127
+ check: types_1.ChannelFunctionTypes.AMQP_EXCHANGE_PUBLISH,
128
+ render: publishExchange_1.renderPublishExchange,
129
+ action: 'send',
130
+ additionalProperties: { exchange: exchangeName }
131
+ },
132
+ {
133
+ check: types_1.ChannelFunctionTypes.AMQP_QUEUE_PUBLISH,
134
+ render: publishQueue_1.renderPublishQueue,
135
+ action: 'send'
136
+ },
137
+ {
138
+ check: types_1.ChannelFunctionTypes.AMQP_QUEUE_SUBSCRIBE,
139
+ render: subscribeQueue_1.renderSubscribeQueue,
140
+ action: 'receive'
141
+ }
142
+ ];
143
+ for (const { check, render, action, additionalProperties } of renderChecks) {
144
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, check, action, generator.asyncapiReverseOperations)) {
145
+ renders.push(render({ ...updatedContext, additionalProperties }));
146
+ }
147
+ }
148
+ return renders;
149
+ }
@@ -0,0 +1,5 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderPublishExchange({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, additionalProperties, description, deprecated }: RenderRegularParameters<{
4
+ exchange: string | undefined;
5
+ }>): SingleFunctionRenderType;