@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,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderCoreSubscribe = 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 renderCoreSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), payloadGenerator, functionName = `subscribeTo${subName}`, description, deprecated }) {
11
+ const includeValidation = payloadGenerator.generator.includeValidation;
12
+ const addressToUse = channelParameters
13
+ ? `parameters.getChannelWithParameters('${topic}')`
14
+ : `'${topic}'`;
15
+ let messageUnmarshalling = `${messageType}.unmarshal(receivedData)`;
16
+ if (messageModule) {
17
+ messageUnmarshalling = `${messageModule}.unmarshal(receivedData)`;
18
+ }
19
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
20
+ includeValidation,
21
+ messageModule,
22
+ messageType,
23
+ onValidationFail: `onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined,${channelParameters ? 'parameters, ' : ''}${channelHeaders ? 'extractedHeaders, ' : ''} msg); continue;`
24
+ });
25
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
26
+ const headerCallbackParam = (0, utils_3.generateHeaderCallbackParameter)(channelHeaders);
27
+ const callbackFunctionParameters = [
28
+ {
29
+ parameter: 'err?: Error',
30
+ jsDoc: ' * @param err if any error occurred this will be sat'
31
+ },
32
+ {
33
+ parameter: `msg?: ${messageType}`,
34
+ jsDoc: ' * @param msg that was received'
35
+ },
36
+ ...(channelParameters
37
+ ? [
38
+ {
39
+ parameter: `parameters?: ${channelParameters.type}`,
40
+ jsDoc: ' * @param parameters that was received in the topic'
41
+ }
42
+ ]
43
+ : []),
44
+ ...(headerCallbackParam ? [headerCallbackParam] : []),
45
+ {
46
+ parameter: `natsMsg?: Nats.Msg`,
47
+ jsDoc: ' * @param natsMsg'
48
+ }
49
+ ];
50
+ const functionParameters = [
51
+ {
52
+ parameter: `onDataCallback`,
53
+ parameterType: `onDataCallback: (${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => void`,
54
+ jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when messages are received`
55
+ },
56
+ ...(channelParameters
57
+ ? [
58
+ {
59
+ parameter: `parameters`,
60
+ parameterType: `parameters: ${channelParameters.type}`,
61
+ jsDoc: ' * @param parameters for topic substitution'
62
+ }
63
+ ]
64
+ : []),
65
+ {
66
+ parameter: 'nc',
67
+ parameterType: 'nc: Nats.NatsConnection',
68
+ jsDoc: ' * @param nc the nats client to setup the subscribe for'
69
+ },
70
+ {
71
+ parameter: 'codec = Nats.JSONCodec()',
72
+ parameterType: 'codec?: Nats.Codec<any>',
73
+ jsDoc: ' * @param codec the serialization codec to use while receiving the message'
74
+ },
75
+ {
76
+ parameter: 'options',
77
+ parameterType: 'options?: Nats.SubscriptionOptions',
78
+ jsDoc: ' * @param options when setting up the subscription'
79
+ },
80
+ {
81
+ parameter: 'skipMessageValidation = false',
82
+ parameterType: 'skipMessageValidation?: boolean',
83
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
84
+ }
85
+ ];
86
+ const headerExtraction = (0, utils_3.generateHeaderExtractionCode)(channelHeaders);
87
+ const whenReceivingMessage = (0, utils_3.generateMessageReceivingCode)({
88
+ channelParameters,
89
+ channelHeaders,
90
+ messageType,
91
+ messageUnmarshalling,
92
+ headerExtraction,
93
+ potentialValidationFunction
94
+ });
95
+ const callbackJsDocParameters = callbackFunctionParameters
96
+ .map((param) => param.jsDoc)
97
+ .join('\n');
98
+ const mainJsDoc = (0, utils_2.renderChannelJSDoc)({
99
+ description,
100
+ deprecated,
101
+ fallbackDescription: `Core subscription for \`${topic}\``,
102
+ parameters: functionParameters.map((param) => ({
103
+ jsDoc: param.jsDoc
104
+ }))
105
+ });
106
+ const code = `/**
107
+ * Callback for when receiving messages
108
+ *
109
+ * @callback ${functionName}Callback
110
+ ${callbackJsDocParameters}
111
+ */
112
+
113
+ ${mainJsDoc}
114
+ function ${functionName}({
115
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
116
+ }: {
117
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
118
+ }): Promise<Nats.Subscription> {
119
+ return new Promise(async (resolve, reject) => {
120
+ try {
121
+ const subscription = nc.subscribe(${addressToUse}, options);
122
+ ${potentialValidatorCreation}
123
+ (async () => {
124
+ for await (const msg of subscription) {
125
+ ${channelParameters ? `const parameters = ${channelParameters.type}.createFromChannel(msg.subject, '${topic}', ${(0, utils_1.findRegexFromChannel)(topic)})` : ''}
126
+ ${whenReceivingMessage}
127
+ }
128
+ })();
129
+ resolve(subscription);
130
+ } catch (e: any) {
131
+ reject(e);
132
+ }
133
+ });
134
+ }`;
135
+ return {
136
+ messageType,
137
+ code,
138
+ functionName,
139
+ dependencies: [`import * as Nats from 'nats';`],
140
+ functionType: __1.ChannelFunctionTypes.NATS_SUBSCRIBE
141
+ };
142
+ }
143
+ exports.renderCoreSubscribe = renderCoreSubscribe;
@@ -0,0 +1,11 @@
1
+ import { TypeScriptChannelsGeneratorContext, TypeScriptChannelRenderedFunctionType } from '../../types';
2
+ import { renderCoreRequest } from './coreRequest';
3
+ import { renderCoreReply } from './coreReply';
4
+ import { renderCorePublish } from './corePublish';
5
+ import { renderCoreSubscribe } from './coreSubscribe';
6
+ import { renderJetstreamPullSubscribe } from './jetstreamPullSubscribe';
7
+ import { renderJetstreamPushSubscription } from './jetstreamPushSubscription';
8
+ import { renderJetstreamPublish } from './jetstreamPublish';
9
+ import { ChannelInterface } from '@asyncapi/parser';
10
+ export { renderCoreRequest, renderCoreReply, renderCorePublish, renderCoreSubscribe, renderJetstreamPullSubscribe, renderJetstreamPushSubscription, renderJetstreamPublish };
11
+ export declare function generateNatsChannels(context: TypeScriptChannelsGeneratorContext, channel: ChannelInterface, protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, dependencies: string[]): Promise<void>;
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateNatsChannels = exports.renderJetstreamPublish = exports.renderJetstreamPushSubscription = exports.renderJetstreamPullSubscribe = exports.renderCoreSubscribe = exports.renderCorePublish = exports.renderCoreReply = exports.renderCoreRequest = 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 coreRequest_1 = require("./coreRequest");
11
+ Object.defineProperty(exports, "renderCoreRequest", { enumerable: true, get: function () { return coreRequest_1.renderCoreRequest; } });
12
+ const coreReply_1 = require("./coreReply");
13
+ Object.defineProperty(exports, "renderCoreReply", { enumerable: true, get: function () { return coreReply_1.renderCoreReply; } });
14
+ const corePublish_1 = require("./corePublish");
15
+ Object.defineProperty(exports, "renderCorePublish", { enumerable: true, get: function () { return corePublish_1.renderCorePublish; } });
16
+ const coreSubscribe_1 = require("./coreSubscribe");
17
+ Object.defineProperty(exports, "renderCoreSubscribe", { enumerable: true, get: function () { return coreSubscribe_1.renderCoreSubscribe; } });
18
+ const jetstreamPullSubscribe_1 = require("./jetstreamPullSubscribe");
19
+ Object.defineProperty(exports, "renderJetstreamPullSubscribe", { enumerable: true, get: function () { return jetstreamPullSubscribe_1.renderJetstreamPullSubscribe; } });
20
+ const jetstreamPushSubscription_1 = require("./jetstreamPushSubscription");
21
+ Object.defineProperty(exports, "renderJetstreamPushSubscription", { enumerable: true, get: function () { return jetstreamPushSubscription_1.renderJetstreamPushSubscription; } });
22
+ const jetstreamPublish_1 = require("./jetstreamPublish");
23
+ Object.defineProperty(exports, "renderJetstreamPublish", { enumerable: true, get: function () { return jetstreamPublish_1.renderJetstreamPublish; } });
24
+ const errors_1 = require("../../../../../errors");
25
+ async function generateNatsChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
26
+ const { parameter, headers, topic, payloads } = context;
27
+ const ignoreOperation = !context.generator.asyncapiGenerateForOperations;
28
+ let natsTopic = topic.startsWith('/') ? topic.slice(1) : topic;
29
+ natsTopic = natsTopic.replace(/\//g, '.');
30
+ const natsContext = {
31
+ channelParameters: parameter,
32
+ channelHeaders: headers,
33
+ topic: natsTopic,
34
+ messageType: '',
35
+ subName: context.subName,
36
+ payloadGenerator: payloads
37
+ };
38
+ const operations = channel.operations().all();
39
+ const renders = operations.length > 0 && !ignoreOperation
40
+ ? await generateForOperations(context, channel, natsContext)
41
+ : await generateForChannels(context, channel, natsContext);
42
+ addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
43
+ }
44
+ exports.generateNatsChannels = generateNatsChannels;
45
+ function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
46
+ protocolCodeFunctions['nats'].push(...renders.map((value) => value.code));
47
+ externalProtocolFunctionInformation['nats'].push(...renders.map((value) => ({
48
+ functionType: value.functionType,
49
+ functionName: value.functionName,
50
+ messageType: value.messageType,
51
+ replyType: value.replyType,
52
+ parameterType: parameter?.type
53
+ })));
54
+ const renderedDependencies = renders
55
+ .map((value) => value.dependencies)
56
+ .flat(Infinity);
57
+ dependencies.push(...new Set(renderedDependencies));
58
+ }
59
+ async function generateForOperations(context, channel, natsContext) {
60
+ const renders = [];
61
+ const { generator, payloads } = context;
62
+ const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
63
+ for (const operation of channel.operations().all()) {
64
+ const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
65
+ if (updatedFunctionTypeMapping !== undefined &&
66
+ !updatedFunctionTypeMapping?.some((f) => [
67
+ types_1.ChannelFunctionTypes.NATS_REQUEST,
68
+ types_1.ChannelFunctionTypes.NATS_REPLY,
69
+ types_1.ChannelFunctionTypes.NATS_PUBLISH,
70
+ types_1.ChannelFunctionTypes.NATS_SUBSCRIBE,
71
+ types_1.ChannelFunctionTypes.NATS_JETSTREAM_PULL_SUBSCRIBE,
72
+ types_1.ChannelFunctionTypes.NATS_JETSTREAM_PUSH_SUBSCRIBE,
73
+ types_1.ChannelFunctionTypes.NATS_JETSTREAM_PUBLISH
74
+ ].includes(f))) {
75
+ continue;
76
+ }
77
+ const payload = payloads.operationModels[(0, utils_1.findOperationId)(operation, channel)];
78
+ if (!payload) {
79
+ throw (0, errors_1.createMissingPayloadError)({
80
+ channelOrOperation: (0, utils_1.findOperationId)(operation, channel),
81
+ protocol: 'NATS'
82
+ });
83
+ }
84
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
85
+ if (messageType === undefined) {
86
+ throw new Error(`Could not find message type for channel typescript generator for NATS`);
87
+ }
88
+ // Extract operation metadata for JSDoc
89
+ const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
90
+ const updatedContext = {
91
+ ...natsContext,
92
+ messageType,
93
+ messageModule,
94
+ subName: (0, utils_1.findNameFromOperation)(operation, channel),
95
+ description,
96
+ deprecated
97
+ };
98
+ renders.push(...(await generateOperationRenders(operation, updatedContext, updatedFunctionTypeMapping, generator, payloads, channel)));
99
+ }
100
+ return renders;
101
+ }
102
+ async function generateOperationRenders(operation, natsContext, functionTypeMapping, generator, payloads, channel) {
103
+ const renders = [];
104
+ const reply = operation.reply();
105
+ if (reply) {
106
+ renders.push(...(await handleReplyOperation(operation, reply, channel, natsContext, functionTypeMapping, generator, payloads)));
107
+ }
108
+ else {
109
+ renders.push(...(await handleNonReplyOperation(operation, natsContext, functionTypeMapping, generator)));
110
+ }
111
+ return renders;
112
+ }
113
+ async function handleReplyOperation(operation, reply, channel, natsContext, functionTypeMapping, generator, payloads) {
114
+ const renders = [];
115
+ const replyId = (0, utils_1.findReplyId)(operation, reply, channel);
116
+ const replyMessageModel = payloads.operationModels[replyId];
117
+ if (!replyMessageModel) {
118
+ return renders;
119
+ }
120
+ const { messageModule: replyMessageModule, messageType: replyMessageType } = (0, utils_2.getMessageTypeAndModule)(replyMessageModel);
121
+ if (replyMessageType === undefined) {
122
+ throw new Error(`Could not find reply message type for channel typescript generator for NATS`);
123
+ }
124
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.NATS_REQUEST, operation.action(), generator.asyncapiReverseOperations)) {
125
+ renders.push((0, coreRequest_1.renderCoreRequest)({
126
+ ...natsContext,
127
+ requestMessageModule: natsContext.messageModule,
128
+ requestMessageType: natsContext.messageType,
129
+ replyMessageModule,
130
+ replyMessageType,
131
+ requestTopic: natsContext.topic,
132
+ payloadGenerator: payloads
133
+ }));
134
+ }
135
+ else if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.NATS_REPLY, operation.action(), generator.asyncapiReverseOperations)) {
136
+ renders.push((0, coreReply_1.renderCoreReply)({
137
+ ...natsContext,
138
+ requestMessageModule: replyMessageModule,
139
+ requestMessageType: replyMessageType,
140
+ replyMessageModule: natsContext.messageModule,
141
+ replyMessageType: natsContext.messageType,
142
+ requestTopic: natsContext.topic,
143
+ payloadGenerator: payloads
144
+ }));
145
+ }
146
+ return renders;
147
+ }
148
+ async function handleNonReplyOperation(operation, natsContext, functionTypeMapping, generator) {
149
+ const renders = [];
150
+ const action = operation.action();
151
+ const renderChecks = [
152
+ { check: types_1.ChannelFunctionTypes.NATS_PUBLISH, render: corePublish_1.renderCorePublish },
153
+ { check: types_1.ChannelFunctionTypes.NATS_SUBSCRIBE, render: coreSubscribe_1.renderCoreSubscribe },
154
+ {
155
+ check: types_1.ChannelFunctionTypes.NATS_JETSTREAM_PULL_SUBSCRIBE,
156
+ render: jetstreamPullSubscribe_1.renderJetstreamPullSubscribe
157
+ },
158
+ {
159
+ check: types_1.ChannelFunctionTypes.NATS_JETSTREAM_PUSH_SUBSCRIBE,
160
+ render: jetstreamPushSubscription_1.renderJetstreamPushSubscription
161
+ },
162
+ {
163
+ check: types_1.ChannelFunctionTypes.NATS_JETSTREAM_PUBLISH,
164
+ render: jetstreamPublish_1.renderJetstreamPublish
165
+ }
166
+ ];
167
+ for (const { check, render } of renderChecks) {
168
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, check, action, generator.asyncapiReverseOperations)) {
169
+ renders.push(render(natsContext));
170
+ }
171
+ }
172
+ return renders;
173
+ }
174
+ async function generateForChannels(context, channel, natsContext) {
175
+ const renders = [];
176
+ const { generator, payloads } = context;
177
+ const functionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(channel) ??
178
+ generator.functionTypeMapping?.[channel.id()];
179
+ const payload = payloads.channelModels[channel.id()];
180
+ if (!payload) {
181
+ throw (0, errors_1.createMissingPayloadError)({
182
+ channelOrOperation: channel.id(),
183
+ protocol: 'NATS'
184
+ });
185
+ }
186
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
187
+ if (messageType === undefined) {
188
+ throw new Error(`Could not find message type for channel typescript generator for NATS`);
189
+ }
190
+ const updatedContext = { ...natsContext, messageType, messageModule };
191
+ const renderChecks = [
192
+ {
193
+ check: types_1.ChannelFunctionTypes.NATS_PUBLISH,
194
+ render: corePublish_1.renderCorePublish,
195
+ action: 'send'
196
+ },
197
+ {
198
+ check: types_1.ChannelFunctionTypes.NATS_SUBSCRIBE,
199
+ render: coreSubscribe_1.renderCoreSubscribe,
200
+ action: 'receive'
201
+ },
202
+ {
203
+ check: types_1.ChannelFunctionTypes.NATS_JETSTREAM_PULL_SUBSCRIBE,
204
+ render: jetstreamPullSubscribe_1.renderJetstreamPullSubscribe,
205
+ action: 'receive'
206
+ },
207
+ {
208
+ check: types_1.ChannelFunctionTypes.NATS_JETSTREAM_PUSH_SUBSCRIBE,
209
+ render: jetstreamPushSubscription_1.renderJetstreamPushSubscription,
210
+ action: 'receive'
211
+ },
212
+ {
213
+ check: types_1.ChannelFunctionTypes.NATS_JETSTREAM_PUBLISH,
214
+ render: jetstreamPublish_1.renderJetstreamPublish,
215
+ action: 'send'
216
+ }
217
+ ];
218
+ for (const { check, render, action } of renderChecks) {
219
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, check, action, generator.asyncapiReverseOperations)) {
220
+ renders.push(render(updatedContext));
221
+ }
222
+ }
223
+ return renders;
224
+ }
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderJetstreamPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderJetstreamPublish = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const index_1 = require("../../index");
6
+ const utils_2 = require("./utils");
7
+ const utils_3 = require("../../utils");
8
+ function renderJetstreamPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `jetStreamPublishTo${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 headerSetup = (0, utils_2.generateHeaderSetupCode)(channelHeaders);
18
+ const publishOperation = messageType === 'null'
19
+ ? `${headerSetup}
20
+ await js.publish(${addressToUse}, Nats.Empty, options);`
21
+ : `let dataToSend: any = ${messageMarshalling};
22
+ ${headerSetup}
23
+ dataToSend = codec.encode(dataToSend);
24
+ await js.publish(${addressToUse}, dataToSend, options);`;
25
+ const headerParam = (0, utils_2.generateHeaderParameter)(channelHeaders);
26
+ const functionParameters = [
27
+ {
28
+ parameter: `message`,
29
+ parameterType: `message: ${messageType}`,
30
+ jsDoc: ' * @param message to publish over jetstream'
31
+ },
32
+ ...(channelParameters
33
+ ? [
34
+ {
35
+ parameter: `parameters`,
36
+ parameterType: `parameters: ${channelParameters.type}`,
37
+ jsDoc: ' * @param parameters for topic substitution'
38
+ }
39
+ ]
40
+ : []),
41
+ ...(headerParam ? [headerParam] : []),
42
+ {
43
+ parameter: 'js',
44
+ parameterType: 'js: Nats.JetStreamClient',
45
+ jsDoc: ' * @param js the JetStream client to publish from'
46
+ },
47
+ {
48
+ parameter: 'codec = Nats.JSONCodec()',
49
+ parameterType: 'codec?: Nats.Codec<any>',
50
+ jsDoc: ' * @param codec the serialization codec to use while transmitting the message'
51
+ },
52
+ {
53
+ parameter: 'options = {}',
54
+ parameterType: 'options?: Partial<Nats.JetStreamPublishOptions>',
55
+ jsDoc: ' * @param options to use while publishing the message'
56
+ }
57
+ ];
58
+ const jsDoc = (0, utils_3.renderChannelJSDoc)({
59
+ description,
60
+ deprecated,
61
+ fallbackDescription: `JetStream publish operation for \`${topic}\``,
62
+ parameters: functionParameters.map((param) => ({
63
+ jsDoc: param.jsDoc
64
+ }))
65
+ });
66
+ const code = `${jsDoc}
67
+ function ${functionName}({
68
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
69
+ }: {
70
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
71
+ }): Promise<void> {
72
+ return new Promise<void>(async (resolve, reject) => {
73
+ try {
74
+ ${publishOperation}
75
+ resolve();
76
+ } catch (e: any) {
77
+ reject(e);
78
+ }
79
+ });
80
+ }`;
81
+ return {
82
+ messageType,
83
+ code,
84
+ functionName,
85
+ dependencies: [`import * as Nats from 'nats';`],
86
+ functionType: index_1.ChannelFunctionTypes.NATS_JETSTREAM_PUBLISH
87
+ };
88
+ }
89
+ exports.renderJetstreamPublish = renderJetstreamPublish;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderJetstreamPullSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, payloadGenerator, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderJetstreamPullSubscribe = 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 renderJetstreamPullSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), payloadGenerator, functionName = `jetStreamPullSubscribeTo${subName}`, description, deprecated }) {
11
+ const includeValidation = payloadGenerator.generator.includeValidation;
12
+ const addressToUse = channelParameters
13
+ ? `parameters.getChannelWithParameters('${topic}')`
14
+ : `'${topic}'`;
15
+ let messageUnmarshalling = `${messageType}.unmarshal(receivedData)`;
16
+ if (messageModule) {
17
+ messageUnmarshalling = `${messageModule}.unmarshal(receivedData)`;
18
+ }
19
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
20
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
21
+ includeValidation,
22
+ messageModule,
23
+ messageType,
24
+ onValidationFail: `onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined,${channelParameters ? 'parameters, ' : ''}${channelHeaders ? 'extractedHeaders, ' : ''} msg); continue;`
25
+ });
26
+ const callbackFunctionParameters = [
27
+ {
28
+ parameter: 'err?: Error',
29
+ jsDoc: ' * @param err if any error occurred this will be sat'
30
+ },
31
+ {
32
+ parameter: `msg?: ${messageType}`,
33
+ jsDoc: ' * @param msg that was received'
34
+ },
35
+ ...(channelParameters
36
+ ? [
37
+ {
38
+ parameter: `parameters?: ${channelParameters.type}`,
39
+ jsDoc: ' * @param parameters that was received in the topic'
40
+ }
41
+ ]
42
+ : []),
43
+ ...(channelHeaders
44
+ ? [
45
+ {
46
+ parameter: `headers?: ${channelHeaders.type}`,
47
+ jsDoc: ' * @param headers that was received with the message'
48
+ }
49
+ ]
50
+ : []),
51
+ { parameter: 'jetstreamMsg?: Nats.JsMsg', jsDoc: ' * @param jetstreamMsg' }
52
+ ];
53
+ const functionParameters = [
54
+ {
55
+ parameter: `onDataCallback`,
56
+ parameterType: `onDataCallback: (${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => void`,
57
+ jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when messages are received`
58
+ },
59
+ ...(channelParameters
60
+ ? [
61
+ {
62
+ parameter: `parameters`,
63
+ parameterType: `parameters: ${channelParameters.type}`,
64
+ jsDoc: ' * @param parameters for topic substitution'
65
+ }
66
+ ]
67
+ : []),
68
+ {
69
+ parameter: 'js',
70
+ parameterType: 'js: Nats.JetStreamClient',
71
+ jsDoc: ' * @param js the JetStream client to pull subscribe through'
72
+ },
73
+ {
74
+ parameter: 'options',
75
+ parameterType: 'options: Nats.ConsumerOptsBuilder | Partial<Nats.ConsumerOpts>',
76
+ jsDoc: ' * @param options when setting up the subscription'
77
+ },
78
+ {
79
+ parameter: 'codec = Nats.JSONCodec()',
80
+ parameterType: 'codec?: Nats.Codec<any>',
81
+ jsDoc: ' * @param codec the serialization codec to use while transmitting the message'
82
+ },
83
+ {
84
+ parameter: 'skipMessageValidation = false',
85
+ parameterType: 'skipMessageValidation?: boolean',
86
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
87
+ }
88
+ ];
89
+ const headerExtraction = (0, utils_3.generateHeaderExtractionCode)(channelHeaders);
90
+ const whenReceivingMessage = (0, utils_3.generateMessageReceivingCode)({
91
+ channelParameters,
92
+ channelHeaders,
93
+ messageType,
94
+ messageUnmarshalling,
95
+ headerExtraction,
96
+ potentialValidationFunction
97
+ });
98
+ const callbackJsDocParameters = callbackFunctionParameters
99
+ .map((param) => param.jsDoc)
100
+ .join('\n');
101
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
102
+ description,
103
+ deprecated,
104
+ fallbackDescription: `JetStream pull 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
+ ${jsDoc}
117
+ function ${functionName}({
118
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
119
+ }: {
120
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
121
+ }): Promise<Nats.JetStreamPullSubscription> {
122
+ return new Promise(async (resolve, reject) => {
123
+ try {
124
+ const subscription = await js.pullSubscribe(${addressToUse}, options);
125
+ ${potentialValidatorCreation}
126
+ (async () => {
127
+ for await (const msg of subscription) {
128
+ ${channelParameters ? `const parameters = ${channelParameters.type}.createFromChannel(msg.subject, '${topic}', ${(0, utils_1.findRegexFromChannel)(topic)})` : ''}
129
+ ${whenReceivingMessage}
130
+ }
131
+ })();
132
+ resolve(subscription);
133
+ } catch (e: any) {
134
+ reject(e);
135
+ }
136
+ });
137
+ }`;
138
+ return {
139
+ messageType,
140
+ code,
141
+ functionName,
142
+ dependencies: [`import * as Nats from 'nats';`],
143
+ functionType: __1.ChannelFunctionTypes.NATS_JETSTREAM_PULL_SUBSCRIBE
144
+ };
145
+ }
146
+ exports.renderJetstreamPullSubscribe = renderJetstreamPullSubscribe;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderJetstreamPushSubscription({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, payloadGenerator, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;