@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,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderPublishExchange = 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 renderPublishExchange({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `publishTo${subName}Exchange`, additionalProperties, 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 headersHandling = channelHeaders
18
+ ? `// Set up message properties (headers) if provided
19
+ let publishOptions = { ...options };
20
+ if (headers) {
21
+ const headerData = headers.marshal();
22
+ const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
23
+ publishOptions.headers = {};
24
+ for (const [key, value] of Object.entries(parsedHeaders)) {
25
+ if (value !== undefined) {
26
+ publishOptions.headers[key] = value;
27
+ }
28
+ }
29
+ }`
30
+ : `let publishOptions = { ...options };`;
31
+ const publishOperation = `let dataToSend: any = ${messageType === 'null' ? 'null' : messageMarshalling};
32
+ const channel = await amqp.createChannel();
33
+ const routingKey = ${addressToUse};
34
+ ${headersHandling}
35
+ channel.publish(exchange, routingKey, Buffer.from(dataToSend), publishOptions);`;
36
+ const functionParameters = [
37
+ {
38
+ parameter: `message`,
39
+ parameterType: `message: ${messageType}`,
40
+ jsDoc: ' * @param message to publish'
41
+ },
42
+ ...(channelParameters
43
+ ? [
44
+ {
45
+ parameter: `parameters`,
46
+ parameterType: `parameters: ${channelParameters.type}`,
47
+ jsDoc: ' * @param parameters for topic substitution'
48
+ }
49
+ ]
50
+ : []),
51
+ ...(channelHeaders
52
+ ? [
53
+ {
54
+ parameter: `headers`,
55
+ parameterType: `headers?: ${channelHeaders.type}`,
56
+ jsDoc: ' * @param headers optional headers to include with the message'
57
+ }
58
+ ]
59
+ : []),
60
+ {
61
+ parameter: 'amqp',
62
+ parameterType: 'amqp: Amqp.Connection',
63
+ jsDoc: ' * @param amqp the AMQP connection to send over'
64
+ },
65
+ {
66
+ parameter: `options`,
67
+ parameterType: `options?: {exchange: string | undefined} & Amqp.Options.Publish`,
68
+ jsDoc: ' * @param options for the AMQP publish exchange operation'
69
+ }
70
+ ];
71
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
72
+ description,
73
+ deprecated,
74
+ fallbackDescription: `AMQP publish operation for exchange \`${topic}\``,
75
+ parameters: functionParameters.map((param) => ({
76
+ jsDoc: param.jsDoc
77
+ }))
78
+ });
79
+ const code = `${jsDoc}
80
+ function ${functionName}({
81
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
82
+ }: {
83
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
84
+ }): Promise<void> {
85
+ return new Promise<void>(async (resolve, reject) => {
86
+ const exchange = options?.exchange ?? '${additionalProperties?.exchange}';
87
+ if(!exchange) {
88
+ return reject('No exchange value found, please provide one')
89
+ }
90
+ try {
91
+ ${publishOperation}
92
+ resolve();
93
+ } catch (e: any) {
94
+ reject(e);
95
+ }
96
+ });
97
+ }`;
98
+ return {
99
+ messageType,
100
+ code,
101
+ functionName,
102
+ dependencies: [`import * as Amqp from 'amqplib';`],
103
+ functionType: __1.ChannelFunctionTypes.AMQP_EXCHANGE_PUBLISH
104
+ };
105
+ }
106
+ exports.renderPublishExchange = renderPublishExchange;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderPublishQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderPublishQueue = 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 renderPublishQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `publishTo${subName}Queue`, 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 headersHandling = channelHeaders
18
+ ? `// Set up message properties (headers) if provided
19
+ let publishOptions = { ...options };
20
+ if (headers) {
21
+ const headerData = headers.marshal();
22
+ const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
23
+ publishOptions.headers = {};
24
+ for (const [key, value] of Object.entries(parsedHeaders)) {
25
+ if (value !== undefined) {
26
+ publishOptions.headers[key] = value;
27
+ }
28
+ }
29
+ }`
30
+ : `let publishOptions = { ...options };`;
31
+ const publishOperation = `let dataToSend: any = ${messageType === 'null' ? 'null' : messageMarshalling};
32
+ const channel = await amqp.createChannel();
33
+ const queue = ${addressToUse};
34
+ ${headersHandling}
35
+ channel.sendToQueue(queue, Buffer.from(dataToSend), publishOptions);`;
36
+ const functionParameters = [
37
+ {
38
+ parameter: `message`,
39
+ parameterType: `message: ${messageType}`,
40
+ jsDoc: ' * @param message to publish'
41
+ },
42
+ ...(channelParameters
43
+ ? [
44
+ {
45
+ parameter: `parameters`,
46
+ parameterType: `parameters: ${channelParameters.type}`,
47
+ jsDoc: ' * @param parameters for topic substitution'
48
+ }
49
+ ]
50
+ : []),
51
+ ...(channelHeaders
52
+ ? [
53
+ {
54
+ parameter: `headers`,
55
+ parameterType: `headers?: ${channelHeaders.type}`,
56
+ jsDoc: ' * @param headers optional headers to include with the message'
57
+ }
58
+ ]
59
+ : []),
60
+ {
61
+ parameter: 'amqp',
62
+ parameterType: 'amqp: Amqp.Connection',
63
+ jsDoc: ' * @param amqp the AMQP connection to send over'
64
+ },
65
+ {
66
+ parameter: `options`,
67
+ parameterType: `options?: Amqp.Options.Publish`,
68
+ jsDoc: ' * @param options for the AMQP publish queue operation'
69
+ }
70
+ ];
71
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
72
+ description,
73
+ deprecated,
74
+ fallbackDescription: `AMQP publish operation for queue \`${topic}\``,
75
+ parameters: functionParameters.map((param) => ({
76
+ jsDoc: param.jsDoc
77
+ }))
78
+ });
79
+ const code = `${jsDoc}
80
+ function ${functionName}({
81
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
82
+ }: {
83
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
84
+ }): Promise<void> {
85
+ return new Promise<void>(async (resolve, reject) => {
86
+ try {
87
+ ${publishOperation}
88
+ resolve();
89
+ } catch (e: any) {
90
+ reject(e);
91
+ }
92
+ });
93
+ }`;
94
+ return {
95
+ messageType,
96
+ code,
97
+ functionName,
98
+ dependencies: [`import * as Amqp from 'amqplib';`],
99
+ functionType: __1.ChannelFunctionTypes.AMQP_QUEUE_PUBLISH
100
+ };
101
+ }
102
+ exports.renderPublishQueue = renderPublishQueue;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderSubscribeQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, payloadGenerator, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderSubscribeQueue = void 0;
4
+ const __1 = require("../..");
5
+ const utils_1 = require("../../../utils");
6
+ const utils_2 = require("../../utils");
7
+ function renderSubscribeQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `subscribeTo${subName}Queue`, payloadGenerator, description, deprecated }) {
8
+ const includeValidation = payloadGenerator.generator.includeValidation;
9
+ const addressToUse = channelParameters
10
+ ? `parameters.getChannelWithParameters('${topic}')`
11
+ : `'${topic}'`;
12
+ const messageUnmarshalling = `${messageModule ?? messageType}.unmarshal(receivedData)`;
13
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
14
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
15
+ includeValidation,
16
+ messageModule,
17
+ messageType,
18
+ onValidationFail: `onDataCallback({err: new Error(\`Invalid message payload received $\{JSON.stringify({cause: errors})}\`), msg: undefined${channelHeaders ? ', headers: extractedHeaders' : ''}, amqpMsg: msg}); return;`
19
+ });
20
+ const subscribeOperation = `const channel = await amqp.createChannel();
21
+ const queue = ${addressToUse};
22
+ await channel.assertQueue(queue, { durable: true });
23
+ ${potentialValidatorCreation}
24
+ channel.consume(queue, (msg) => {
25
+ if (msg !== null) {
26
+ const receivedData = msg.content.toString()
27
+ ${channelHeaders
28
+ ? `// Extract headers if present
29
+ let extractedHeaders: ${channelHeaders.type} | undefined = undefined;
30
+ if (msg.properties && msg.properties.headers) {
31
+ const headerObj: Record<string, any> = {};
32
+ for (const [key, value] of Object.entries(msg.properties.headers)) {
33
+ if (value !== undefined) {
34
+ headerObj[key] = value;
35
+ }
36
+ }
37
+ extractedHeaders = ${channelHeaders.type}.unmarshal(headerObj);
38
+ }`
39
+ : ''}
40
+ ${potentialValidationFunction}
41
+ const message = ${messageUnmarshalling};
42
+ onDataCallback({err: undefined, msg: message${channelHeaders ? ', headers: extractedHeaders' : ''}, amqpMsg: msg});
43
+ }
44
+ }, options);`;
45
+ const callbackFunctionParameters = [
46
+ {
47
+ parameter: 'err?: Error',
48
+ jsDoc: ' * @param err if any error occurred this will be sat'
49
+ },
50
+ {
51
+ parameter: `msg?: ${messageType}`,
52
+ jsDoc: ' * @param msg that was received'
53
+ },
54
+ ...(channelHeaders
55
+ ? [
56
+ {
57
+ parameter: `headers?: ${channelHeaders.type}`,
58
+ jsDoc: ' * @param headers that was received with the message'
59
+ }
60
+ ]
61
+ : []),
62
+ {
63
+ parameter: `amqpMsg?: Amqp.ConsumeMessage`,
64
+ jsDoc: ' * @param amqpMsg'
65
+ }
66
+ ];
67
+ const callbackObjectType = `{${callbackFunctionParameters.map((param) => param.parameter).join(', ')}}`;
68
+ const callbackParameterNames = callbackFunctionParameters
69
+ .map((param) => param.parameter.split('?')[0])
70
+ .join(', ');
71
+ const functionParameters = [
72
+ {
73
+ parameter: `onDataCallback`,
74
+ parameterType: `onDataCallback: (params: ${callbackObjectType}) => void`,
75
+ jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when messages are received`
76
+ },
77
+ ...(channelParameters
78
+ ? [
79
+ {
80
+ parameter: `parameters`,
81
+ parameterType: `parameters: ${channelParameters.type}`,
82
+ jsDoc: ' * @param parameters for topic substitution'
83
+ }
84
+ ]
85
+ : []),
86
+ {
87
+ parameter: 'amqp',
88
+ parameterType: 'amqp: Amqp.Connection',
89
+ jsDoc: ' * @param amqp the AMQP connection to receive from'
90
+ },
91
+ {
92
+ parameter: `options`,
93
+ parameterType: `options?: Amqp.Options.Consume`,
94
+ jsDoc: ' * @param options for the AMQP subscribe queue operation'
95
+ },
96
+ {
97
+ parameter: 'skipMessageValidation = false',
98
+ parameterType: 'skipMessageValidation?: boolean',
99
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
100
+ }
101
+ ];
102
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
103
+ description,
104
+ deprecated,
105
+ fallbackDescription: `AMQP subscribe operation for queue \`${topic}\``,
106
+ parameters: functionParameters.map((param) => ({
107
+ jsDoc: param.jsDoc
108
+ }))
109
+ });
110
+ const code = `${jsDoc}
111
+ function ${functionName}({
112
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
113
+ }: {
114
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
115
+ }): Promise<Amqp.Channel> {
116
+ return new Promise(async (resolve, reject) => {
117
+ try {
118
+ ${subscribeOperation}
119
+ resolve(channel);
120
+ } catch (e: any) {
121
+ reject(e);
122
+ }
123
+ });
124
+ }`;
125
+ return {
126
+ messageType,
127
+ code,
128
+ functionName,
129
+ dependencies: [`import * as Amqp from 'amqplib';`],
130
+ functionType: __1.ChannelFunctionTypes.AMQP_QUEUE_SUBSCRIBE
131
+ };
132
+ }
133
+ exports.renderSubscribeQueue = renderSubscribeQueue;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderExpress({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderExpress = 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 renderExpress({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `register${subName}`, description, deprecated }) {
9
+ let addressToUse = topic.replace(/{([^}]+)}/g, ':$1');
10
+ addressToUse = addressToUse.startsWith('/')
11
+ ? addressToUse
12
+ : `/${addressToUse}`;
13
+ let messageMarshalling = 'message.marshal()';
14
+ if (messageModule) {
15
+ messageMarshalling = `${messageModule}.marshal(message)`;
16
+ }
17
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
18
+ const callbackFunctionParameters = [
19
+ {
20
+ parameter: 'req: Request',
21
+ jsDoc: ' * @param req from the request'
22
+ },
23
+ {
24
+ parameter: 'res: Response',
25
+ jsDoc: ' * @param res from the request'
26
+ },
27
+ {
28
+ parameter: 'next: NextFunction',
29
+ jsDoc: ' * @param next attached to the request'
30
+ },
31
+ ...(channelParameters
32
+ ? [
33
+ {
34
+ parameter: `parameters: ${channelParameters.type}`,
35
+ jsDoc: ' * @param parameters that was received when client made the connection'
36
+ }
37
+ ]
38
+ : []),
39
+ {
40
+ parameter: `sendEvent: (message: ${messageType}) => void`,
41
+ jsDoc: ' * @param sendEvent callback you can use to send message to the client'
42
+ }
43
+ ];
44
+ const functionParameters = [
45
+ {
46
+ parameter: 'router',
47
+ parameterType: 'router: Router',
48
+ jsDoc: ' * @param router to attach the event source to'
49
+ },
50
+ {
51
+ parameter: `callback`,
52
+ parameterType: `callback: ((${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => void) | ((${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => Promise<void>)`,
53
+ jsDoc: ' * @param callback to call when receiving events'
54
+ }
55
+ ];
56
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
57
+ description,
58
+ deprecated,
59
+ fallbackDescription: `Register EventSource endpoint for \`${topic}\``,
60
+ parameters: functionParameters.map((param) => ({
61
+ jsDoc: param.jsDoc
62
+ }))
63
+ });
64
+ const code = `${jsDoc}
65
+ function ${functionName}({
66
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
67
+ }: {
68
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
69
+ }): void {
70
+ const event = '${addressToUse}';
71
+ router.get(event, async (req, res, next) => {
72
+ ${channelParameters ? `const listenParameters = ${channelParameters.type}.createFromChannel(req.originalUrl.startsWith('/') ? req.originalUrl.slice(1) : req.originalUrl, '${topic}', ${(0, utils_1.findRegexFromChannel)(topic)});` : ''}
73
+ res.writeHead(200, {
74
+ 'Cache-Control': 'no-cache, no-transform',
75
+ 'Content-Type': 'text/event-stream',
76
+ Connection: 'keep-alive',
77
+ 'Access-Control-Allow-Origin': '*',
78
+ })
79
+ const sendEventCallback = (message: ${messageType}) => {
80
+ if (res.closed) {
81
+ return
82
+ }
83
+ res.write(\`event: \${event}\\n\`)
84
+ res.write(\`data: \${${messageMarshalling}}\\n\\n\`)
85
+ }
86
+ await callback(req, res, next, ${channelParameters ? 'listenParameters, ' : ' '}sendEventCallback)
87
+ })
88
+ }
89
+ `;
90
+ return {
91
+ messageType,
92
+ code,
93
+ functionName,
94
+ dependencies: [
95
+ `import { NextFunction, Request, Response, Router } from 'express';`
96
+ ],
97
+ functionType: __1.ChannelFunctionTypes.EVENT_SOURCE_EXPRESS
98
+ };
99
+ }
100
+ exports.renderExpress = renderExpress;
@@ -0,0 +1,5 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderFetch({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, additionalProperties, payloadGenerator, description, deprecated }: RenderRegularParameters<{
4
+ fetchDependency: string;
5
+ }>): SingleFunctionRenderType;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderFetch = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ const __1 = require("../..");
6
+ const utils_1 = require("../../../utils");
7
+ const types_1 = require("../../types");
8
+ const utils_2 = require("../../utils");
9
+ function renderFetch({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `listenFor${subName}`, additionalProperties = {
10
+ fetchDependency: types_1.defaultTypeScriptChannelsGenerator.eventSourceDependency
11
+ }, payloadGenerator, description, deprecated }) {
12
+ const includeValidation = payloadGenerator.generator.includeValidation;
13
+ const addressToUse = channelParameters
14
+ ? `parameters.getChannelWithParameters('${topic}')`
15
+ : `'${topic}'`;
16
+ const messageUnmarshalling = `${messageModule ?? messageType}.unmarshal(receivedData)`;
17
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
18
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
19
+ includeValidation,
20
+ messageModule,
21
+ messageType,
22
+ onValidationFail: `return callback({error: new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), messageEvent: undefined});`
23
+ });
24
+ const functionParameters = [
25
+ {
26
+ parameter: `callback`,
27
+ parameterType: `callback: (params: {error?: Error, messageEvent?: ${messageType}}) => void`,
28
+ jsDoc: ' * @param callback to call when receiving events'
29
+ },
30
+ ...(channelParameters
31
+ ? [
32
+ {
33
+ parameter: `parameters`,
34
+ parameterType: `parameters: ${channelParameters.type}`,
35
+ jsDoc: ' * @param parameters for listening'
36
+ }
37
+ ]
38
+ : []),
39
+ ...(channelHeaders
40
+ ? [
41
+ {
42
+ parameter: `headers`,
43
+ parameterType: `headers?: ${channelHeaders.type}`,
44
+ jsDoc: ' * @param headers optional headers to include with the EventSource connection'
45
+ }
46
+ ]
47
+ : []),
48
+ {
49
+ parameter: 'options',
50
+ parameterType: `options: {authorization?: string, onClose?: (err?: string) => void, baseUrl: string, headers?: Record<string, string>}`,
51
+ jsDoc: ' * @param options additionally used to handle the event source'
52
+ },
53
+ {
54
+ parameter: 'skipMessageValidation = false',
55
+ parameterType: 'skipMessageValidation?: boolean',
56
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
57
+ }
58
+ ];
59
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
60
+ description,
61
+ deprecated,
62
+ fallbackDescription: `Event source fetch for \`${topic}\``,
63
+ parameters: [
64
+ ...functionParameters.map((param) => ({
65
+ jsDoc: param.jsDoc
66
+ })),
67
+ {
68
+ jsDoc: ' * @returns A cleanup function to abort the connection'
69
+ }
70
+ ]
71
+ });
72
+ const code = `${jsDoc}
73
+ function ${functionName}({
74
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
75
+ }: {
76
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
77
+ }): (() => void) {
78
+ const controller = new AbortController();
79
+ let eventsUrl: string = ${addressToUse};
80
+ const url = \`\${options.baseUrl}/\${eventsUrl}\`
81
+ const requestHeaders: Record<string, string> = {
82
+ ...options.headers ?? {},
83
+ Accept: 'text/event-stream'
84
+ }
85
+ if(options.authorization) {
86
+ requestHeaders['authorization'] = \`Bearer \${options?.authorization}\`;
87
+ }
88
+ ${channelHeaders
89
+ ? `// Add headers from AsyncAPI specification if provided
90
+ if (headers) {
91
+ const asyncApiHeaderData = headers.marshal();
92
+ const parsedAsyncApiHeaders = typeof asyncApiHeaderData === 'string' ? JSON.parse(asyncApiHeaderData) : asyncApiHeaderData;
93
+ for (const [key, value] of Object.entries(parsedAsyncApiHeaders)) {
94
+ if (value !== undefined) {
95
+ requestHeaders[key] = String(value);
96
+ }
97
+ }
98
+ }`
99
+ : ''}
100
+ ${potentialValidatorCreation}
101
+ fetchEventSource(\`\${url}\`, {
102
+ method: 'GET',
103
+ headers: requestHeaders,
104
+ signal: controller.signal,
105
+ onmessage: (ev: EventSourceMessage) => {
106
+ const receivedData = ev.data;
107
+ ${potentialValidationFunction}
108
+ const callbackData = ${messageUnmarshalling};
109
+ callback({error: undefined, messageEvent: callbackData});
110
+ },
111
+ onerror: (err) => {
112
+ options.onClose?.(err);
113
+ },
114
+ onclose: () => {
115
+ options.onClose?.();
116
+ },
117
+ async onopen(response: { ok: any; headers: any; status: number }) {
118
+ if (response.ok && response.headers.get('content-type') === EventStreamContentType) {
119
+ return // everything's good
120
+ } else if (response.status >= 400 && response.status < 500 && response.status !== 429) {
121
+ // client-side errors are usually non-retriable:
122
+ callback({error: new Error('Client side error, could not open event connection'), messageEvent: undefined})
123
+ } else {
124
+ callback({error: new Error('Unknown error, could not open event connection'), messageEvent: undefined});
125
+ }
126
+ },
127
+ });
128
+
129
+ return () => {
130
+ controller.abort();
131
+ };
132
+ }
133
+ `;
134
+ return {
135
+ messageType,
136
+ code,
137
+ functionName,
138
+ dependencies: [
139
+ `import { fetchEventSource, EventStreamContentType, EventSourceMessage } from '${additionalProperties.fetchDependency}';`
140
+ ],
141
+ functionType: __1.ChannelFunctionTypes.EVENT_SOURCE_FETCH
142
+ };
143
+ }
144
+ exports.renderFetch = renderFetch;
@@ -0,0 +1,6 @@
1
+ import { TypeScriptChannelRenderedFunctionType, TypeScriptChannelsGeneratorContext } from '../../types';
2
+ import { renderExpress } from './express';
3
+ import { renderFetch } from './fetch';
4
+ import { ChannelInterface } from '@asyncapi/parser';
5
+ export { renderFetch, renderExpress };
6
+ export declare function generateEventSourceChannels(context: TypeScriptChannelsGeneratorContext, channel: ChannelInterface, protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, dependencies: string[]): Promise<void>;