@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,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderPublish = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ const __1 = require("../..");
6
+ const utils_1 = require("../../../utils");
7
+ const utils_2 = require("../../utils");
8
+ function renderPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `publishTo${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 headersHandling = channelHeaders
18
+ ? `// Set up user properties (headers) if provided
19
+ let publishOptions: Mqtt.IClientPublishOptions = {};
20
+ if (headers) {
21
+ const headerData = headers.marshal();
22
+ const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
23
+ const userProperties: Record<string, string> = {};
24
+ for (const [key, value] of Object.entries(parsedHeaders)) {
25
+ if (value !== undefined) {
26
+ userProperties[key] = String(value);
27
+ }
28
+ }
29
+ publishOptions.properties = { userProperties };
30
+ }`
31
+ : `let publishOptions: Mqtt.IClientPublishOptions = {};`;
32
+ const publishOperation = messageType === 'null'
33
+ ? `${headersHandling}
34
+ mqtt.publish(${addressToUse}, '', publishOptions);`
35
+ : `let dataToSend: any = ${messageMarshalling};
36
+ ${headersHandling}
37
+ mqtt.publish(${addressToUse}, dataToSend, publishOptions);`;
38
+ const functionParameters = [
39
+ {
40
+ parameter: `message`,
41
+ parameterType: `message: ${messageType}`,
42
+ jsDoc: ' * @param message to publish'
43
+ },
44
+ ...(channelParameters
45
+ ? [
46
+ {
47
+ parameter: `parameters`,
48
+ parameterType: `parameters: ${channelParameters.type}`,
49
+ jsDoc: ' * @param parameters for topic substitution'
50
+ }
51
+ ]
52
+ : []),
53
+ ...(channelHeaders
54
+ ? [
55
+ {
56
+ parameter: `headers`,
57
+ parameterType: `headers?: ${channelHeaders.type}`,
58
+ jsDoc: ' * @param headers optional headers to include with the message as MQTT user properties'
59
+ }
60
+ ]
61
+ : []),
62
+ {
63
+ parameter: 'mqtt',
64
+ parameterType: 'mqtt: Mqtt.MqttClient',
65
+ jsDoc: ' * @param mqtt the MQTT client to publish from'
66
+ }
67
+ ];
68
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
69
+ description,
70
+ deprecated,
71
+ fallbackDescription: `MQTT publish operation for \`${topic}\``,
72
+ parameters: functionParameters.map((param) => ({
73
+ jsDoc: param.jsDoc
74
+ }))
75
+ });
76
+ const code = `${jsDoc}
77
+ function ${functionName}({
78
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
79
+ }: {
80
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
81
+ }): Promise<void> {
82
+ return new Promise<void>(async (resolve, reject) => {
83
+ try {
84
+ ${publishOperation}
85
+ resolve();
86
+ } catch (e: any) {
87
+ reject(e);
88
+ }
89
+ });
90
+ }`;
91
+ return {
92
+ messageType,
93
+ code,
94
+ functionName,
95
+ dependencies: [`import * as Mqtt from 'mqtt';`],
96
+ functionType: __1.ChannelFunctionTypes.MQTT_PUBLISH
97
+ };
98
+ }
99
+ exports.renderPublish = renderPublish;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, payloadGenerator, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderSubscribe = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ /* eslint-disable no-nested-ternary */
6
+ const __1 = require("../..");
7
+ const utils_1 = require("../../../utils");
8
+ const utils_2 = require("../../utils");
9
+ /* eslint-disable sonarjs/cognitive-complexity */
10
+ function renderSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `subscribeTo${subName}`, payloadGenerator, 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
+ // Constants for error messages and parameters
20
+ const PARSE_MESSAGE_ERROR = 'Failed to parse message: ${err.message}';
21
+ const PARSE_HEADERS_ERROR = 'Failed to parse headers: ${headerError}';
22
+ const PARAMETERS_PARAM = ', parameters';
23
+ const HEADERS_UNDEFINED_PARAM = ', headers: undefined';
24
+ const HEADERS_EXTRACTED_PARAM = ', headers: extractedHeaders';
25
+ const getValidationFailCallback = () => {
26
+ const baseError = `new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`)`;
27
+ const baseParams = `err: ${baseError}, msg: undefined`;
28
+ if (channelParameters && channelHeaders) {
29
+ return `onDataCallback({${baseParams}${PARAMETERS_PARAM}${HEADERS_EXTRACTED_PARAM}, mqttMsg: packet}); return;`;
30
+ }
31
+ if (channelParameters) {
32
+ return `onDataCallback({${baseParams}${PARAMETERS_PARAM}, mqttMsg: packet}); return;`;
33
+ }
34
+ if (channelHeaders) {
35
+ return `onDataCallback({${baseParams}${HEADERS_EXTRACTED_PARAM}, mqttMsg: packet}); return;`;
36
+ }
37
+ return `onDataCallback({${baseParams}, mqttMsg: packet}); return;`;
38
+ };
39
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
40
+ includeValidation,
41
+ messageModule,
42
+ messageType,
43
+ onValidationFail: getValidationFailCallback()
44
+ });
45
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
46
+ const callbackFunctionParameters = [
47
+ {
48
+ parameter: 'err?: Error',
49
+ jsDoc: ' * @param err if any error occurred this will be set'
50
+ },
51
+ {
52
+ parameter: `msg?: ${messageType}`,
53
+ jsDoc: ' * @param msg that was received'
54
+ },
55
+ ...(channelParameters
56
+ ? [
57
+ {
58
+ parameter: `parameters?: ${channelParameters.type}`,
59
+ jsDoc: ' * @param parameters that was received in the topic'
60
+ }
61
+ ]
62
+ : []),
63
+ ...(channelHeaders
64
+ ? [
65
+ {
66
+ parameter: `headers?: ${channelHeaders.type}`,
67
+ jsDoc: ' * @param headers that was received with the message as MQTT user properties'
68
+ }
69
+ ]
70
+ : []),
71
+ {
72
+ parameter: `mqttMsg?: Mqtt.IPublishPacket`,
73
+ jsDoc: ' * @param mqttMsg the raw MQTT message packet'
74
+ }
75
+ ];
76
+ const functionParameters = [
77
+ {
78
+ parameter: `onDataCallback`,
79
+ parameterType: `onDataCallback: (params: {${callbackFunctionParameters.map((param) => param.parameter).join(', ')}}) => void`,
80
+ jsDoc: ` * @param onDataCallback to call when messages are received`
81
+ },
82
+ ...(channelParameters
83
+ ? [
84
+ {
85
+ parameter: `parameters`,
86
+ parameterType: `parameters: ${channelParameters.type}`,
87
+ jsDoc: ' * @param parameters for topic substitution'
88
+ }
89
+ ]
90
+ : []),
91
+ {
92
+ parameter: 'mqtt',
93
+ parameterType: 'mqtt: Mqtt.MqttClient',
94
+ jsDoc: ' * @param mqtt the MQTT client to subscribe with'
95
+ },
96
+ {
97
+ parameter: 'skipMessageValidation = false',
98
+ parameterType: 'skipMessageValidation?: boolean',
99
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
100
+ }
101
+ ];
102
+ // Generate message receiving code
103
+ const topicRegex = (0, utils_1.findRegexFromChannel)(topic);
104
+ const whenReceivingMessage = `
105
+ // Check if the received topic matches this subscription's pattern
106
+ const topicPattern = ${topicRegex};
107
+ if (!topicPattern.test(topic)) {
108
+ return; // Ignore messages not matching this subscription's topic pattern
109
+ }
110
+
111
+ const receivedData = message.toString();
112
+ ${channelParameters ? `const parameters = ${channelParameters.type}.createFromChannel(topic, '${topic}', ${topicRegex});` : ''}
113
+ ${channelHeaders
114
+ ? `
115
+ // Extract headers from MQTT v5 user properties
116
+ let extractedHeaders: ${channelHeaders.type} | undefined;
117
+ if (packet.properties && packet.properties.userProperties) {
118
+ try {
119
+ extractedHeaders = ${channelHeaders.type}.unmarshal(packet.properties.userProperties);
120
+ } catch (headerError) {
121
+ onDataCallback({err: new Error(\`${PARSE_HEADERS_ERROR}\`), msg: undefined${channelParameters ? PARAMETERS_PARAM : ''}${channelHeaders ? HEADERS_UNDEFINED_PARAM : ''}, mqttMsg: packet});
122
+ return;
123
+ }
124
+ }`
125
+ : ''}
126
+
127
+ try {
128
+ const parsedMessage = ${messageUnmarshalling};
129
+ ${potentialValidationFunction}
130
+ onDataCallback({err: undefined, msg: parsedMessage${channelParameters ? PARAMETERS_PARAM : ''}${channelHeaders ? HEADERS_EXTRACTED_PARAM : ''}, mqttMsg: packet});
131
+ } catch (err: any) {
132
+ onDataCallback({err: new Error(\`${PARSE_MESSAGE_ERROR}\`), msg: undefined${channelParameters ? PARAMETERS_PARAM : ''}${channelHeaders ? HEADERS_EXTRACTED_PARAM : ''}, mqttMsg: packet});
133
+ }`;
134
+ const callbackJsDocParameters = callbackFunctionParameters
135
+ .map((param) => param.jsDoc)
136
+ .join('\n');
137
+ const mainJsDoc = (0, utils_2.renderChannelJSDoc)({
138
+ description,
139
+ deprecated,
140
+ fallbackDescription: `MQTT subscription for \`${topic}\``,
141
+ parameters: functionParameters.map((param) => ({
142
+ jsDoc: param.jsDoc
143
+ }))
144
+ });
145
+ const code = `/**
146
+ * Callback for when receiving messages
147
+ *
148
+ * @callback ${functionName}Callback
149
+ ${callbackJsDocParameters}
150
+ */
151
+
152
+ ${mainJsDoc}
153
+ function ${functionName}({
154
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
155
+ }: {
156
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
157
+ }): Promise<void> {
158
+ return new Promise<void>(async (resolve, reject) => {
159
+ try {
160
+ ${potentialValidatorCreation}
161
+
162
+ // Set up message listener
163
+ const messageHandler = (topic: string, message: Buffer, packet: Mqtt.IPublishPacket) => {
164
+ ${whenReceivingMessage}
165
+ };
166
+
167
+ mqtt.on('message', messageHandler);
168
+
169
+ // Subscribe to the topic
170
+ await mqtt.subscribeAsync(${addressToUse});
171
+
172
+ resolve();
173
+ } catch (e: any) {
174
+ reject(e);
175
+ }
176
+ });
177
+ }`;
178
+ return {
179
+ messageType,
180
+ code,
181
+ functionName,
182
+ dependencies: [`import * as Mqtt from 'mqtt';`],
183
+ functionType: __1.ChannelFunctionTypes.MQTT_SUBSCRIBE
184
+ };
185
+ }
186
+ exports.renderSubscribe = renderSubscribe;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderCorePublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderCorePublish = 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
+ const utils_3 = require("../../utils");
9
+ function renderCorePublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `publishTo${subName}`, description, deprecated }) {
10
+ const addressToUse = channelParameters
11
+ ? `parameters.getChannelWithParameters('${topic}')`
12
+ : `'${topic}'`;
13
+ let messageMarshalling = 'message.marshal()';
14
+ if (messageModule) {
15
+ messageMarshalling = `${messageModule}.marshal(message)`;
16
+ }
17
+ messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
18
+ const headerSetup = (0, utils_2.generateHeaderSetupCode)(channelHeaders);
19
+ const publishOperation = messageType === 'null'
20
+ ? `${headerSetup}
21
+ await nc.publish(${addressToUse}, Nats.Empty, options);`
22
+ : `let dataToSend: any = ${messageMarshalling};
23
+ ${headerSetup}
24
+ dataToSend = codec.encode(dataToSend);
25
+ nc.publish(${addressToUse}, dataToSend, options);`;
26
+ const headerParam = (0, utils_2.generateHeaderParameter)(channelHeaders);
27
+ const functionParameters = [
28
+ {
29
+ parameter: `message`,
30
+ parameterType: `message: ${messageType}`,
31
+ jsDoc: ' * @param message to publish'
32
+ },
33
+ ...(channelParameters
34
+ ? [
35
+ {
36
+ parameter: `parameters`,
37
+ parameterType: `parameters: ${channelParameters.type}`,
38
+ jsDoc: ' * @param parameters for topic substitution'
39
+ }
40
+ ]
41
+ : []),
42
+ ...(headerParam ? [headerParam] : []),
43
+ {
44
+ parameter: 'nc',
45
+ parameterType: 'nc: Nats.NatsConnection',
46
+ jsDoc: ' * @param nc the NATS client to publish from'
47
+ },
48
+ {
49
+ parameter: 'codec = Nats.JSONCodec()',
50
+ parameterType: 'codec?: Nats.Codec<any>',
51
+ jsDoc: ' * @param codec the serialization codec to use while transmitting the message'
52
+ },
53
+ {
54
+ parameter: 'options',
55
+ parameterType: 'options?: Nats.PublishOptions',
56
+ jsDoc: ' * @param options to use while publishing the message'
57
+ }
58
+ ];
59
+ const jsDoc = (0, utils_3.renderChannelJSDoc)({
60
+ description,
61
+ deprecated,
62
+ fallbackDescription: `NATS publish operation for \`${topic}\``,
63
+ parameters: functionParameters.map((param) => ({
64
+ jsDoc: param.jsDoc
65
+ }))
66
+ });
67
+ const code = `${jsDoc}
68
+ function ${functionName}({
69
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
70
+ }: {
71
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
72
+ }): Promise<void> {
73
+ return new Promise<void>(async (resolve, reject) => {
74
+ try {
75
+ ${publishOperation}
76
+ resolve();
77
+ } catch (e: any) {
78
+ reject(e);
79
+ }
80
+ });
81
+ }`;
82
+ return {
83
+ messageType,
84
+ code,
85
+ functionName,
86
+ dependencies: [`import * as Nats from 'nats';`],
87
+ functionType: __1.ChannelFunctionTypes.NATS_PUBLISH
88
+ };
89
+ }
90
+ exports.renderCorePublish = renderCorePublish;
@@ -0,0 +1,3 @@
1
+ import { RenderRequestReplyParameters } from '../../types';
2
+ import { SingleFunctionRenderType } from '../../../../../types';
3
+ export declare function renderCoreReply({ requestTopic, requestMessageType, requestMessageModule, replyMessageType, replyMessageModule, channelParameters, subName, payloadGenerator, functionName, description, deprecated }: RenderRequestReplyParameters): SingleFunctionRenderType;
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderCoreReply = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ /* eslint-disable no-nested-ternary */
6
+ const types_1 = require("../../types");
7
+ const utils_1 = require("../../../utils");
8
+ const utils_2 = require("../../utils");
9
+ function renderCoreReply({ requestTopic, requestMessageType, requestMessageModule, replyMessageType, replyMessageModule, channelParameters, subName = (0, utils_1.pascalCase)(requestTopic), payloadGenerator, functionName = `replyTo${subName}`, description, deprecated }) {
10
+ const includeValidation = payloadGenerator.generator.includeValidation;
11
+ const addressToUse = channelParameters
12
+ ? `parameters.getChannelWithParameters('${requestTopic}')`
13
+ : `'${requestTopic}'`;
14
+ const messageType = requestMessageModule
15
+ ? `${requestMessageModule}.${requestMessageType}`
16
+ : requestMessageType;
17
+ const replyType = replyMessageModule ?? replyMessageType;
18
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
19
+ includeValidation,
20
+ messageModule: requestMessageModule,
21
+ messageType: requestMessageType,
22
+ onValidationFail: channelParameters
23
+ ? `onDataCallback(new Error('Invalid request payload received', JSON.stringify({cause: errors})), undefined, parameters); continue;`
24
+ : `onDataCallback(new Error('Invalid request payload received', JSON.stringify({cause: errors})), undefined); 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: `requestMessage?: ${messageType}`,
33
+ jsDoc: ' * @param requestMessage that was received from the request'
34
+ },
35
+ ...(channelParameters
36
+ ? [
37
+ {
38
+ parameter: `parameters?: ${channelParameters.type}`,
39
+ jsDoc: ' * @param parameters that was received in the topic'
40
+ }
41
+ ]
42
+ : [])
43
+ ];
44
+ const functionParameters = [
45
+ {
46
+ parameter: `onDataCallback`,
47
+ parameterType: `onDataCallback: (${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => ${replyType} | Promise<${replyType}>`,
48
+ jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when the request is received`
49
+ },
50
+ ...(channelParameters
51
+ ? [
52
+ {
53
+ parameter: `parameters`,
54
+ parameterType: `parameters: ${channelParameters.type}`,
55
+ jsDoc: ' * @param parameters for topic substitution'
56
+ }
57
+ ]
58
+ : []),
59
+ {
60
+ parameter: 'nc',
61
+ parameterType: 'nc: Nats.NatsConnection',
62
+ jsDoc: ' * @param nc the nats client to setup the reply for'
63
+ },
64
+ {
65
+ parameter: 'codec = Nats.JSONCodec()',
66
+ parameterType: 'codec?: Nats.Codec<any>',
67
+ jsDoc: ' * @param codec the serialization codec to use when receiving request and transmitting reply'
68
+ },
69
+ {
70
+ parameter: 'options',
71
+ parameterType: 'options?: Nats.SubscriptionOptions',
72
+ jsDoc: ' * @param options when setting up the reply'
73
+ },
74
+ {
75
+ parameter: 'skipMessageValidation = false',
76
+ parameterType: 'skipMessageValidation?: boolean',
77
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
78
+ }
79
+ ];
80
+ const receivingOperation = `let receivedData : any = codec.decode(msg.data);
81
+ ${potentialValidationFunction}
82
+ const replyMessage = await onDataCallback(undefined, ${requestMessageModule ?? requestMessageType}.unmarshal(receivedData) ${channelParameters ? ', parameters ?? undefined' : ''});`;
83
+ const replyOperation = `let dataToSend : any = replyMessage.marshal();
84
+ dataToSend = codec.encode(dataToSend);
85
+ msg.respond(dataToSend);`;
86
+ const callbackJsDocParameters = callbackFunctionParameters
87
+ .map((param) => param.jsDoc)
88
+ .join('\n');
89
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
90
+ description,
91
+ deprecated,
92
+ fallbackDescription: `NATS reply operation for \`${requestTopic}\``,
93
+ parameters: functionParameters.map((param) => ({
94
+ jsDoc: param.jsDoc
95
+ }))
96
+ });
97
+ const code = `/**
98
+ * Callback for when receiving the request
99
+ *
100
+ * @callback ${functionName}Callback
101
+ ${callbackJsDocParameters}
102
+ */
103
+
104
+ ${jsDoc}
105
+ function ${functionName}({
106
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
107
+ }: {
108
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
109
+ }): Promise<Nats.Subscription> {
110
+ return new Promise(async (resolve, reject) => {
111
+ try {
112
+ let subscription = nc.subscribe(${addressToUse}, options);
113
+ ${potentialValidatorCreation}
114
+ (async () => {
115
+ for await (const msg of subscription) {
116
+ ${channelParameters ? `const parameters = ${channelParameters.type}.createFromChannel(msg.subject, '${requestTopic}', ${(0, utils_1.findRegexFromChannel)(requestTopic)})` : ''}
117
+
118
+ ${receivingOperation}
119
+
120
+ if (msg.reply) {
121
+ ${replyOperation}
122
+ } else {
123
+ onDataCallback(new Error('Expected request to need a reply, did not..'))
124
+ }
125
+ }
126
+ })();
127
+ resolve(subscription);
128
+ } catch (e: any) {
129
+ reject(e);
130
+ }
131
+ });
132
+ }`;
133
+ return {
134
+ messageType,
135
+ replyType,
136
+ code,
137
+ functionName,
138
+ dependencies: [`import * as Nats from 'nats';`],
139
+ functionType: types_1.ChannelFunctionTypes.NATS_REPLY
140
+ };
141
+ }
142
+ exports.renderCoreReply = renderCoreReply;
@@ -0,0 +1,3 @@
1
+ import { RenderRequestReplyParameters } from '../../types';
2
+ import { SingleFunctionRenderType } from '../../../../../types';
3
+ export declare function renderCoreRequest({ requestTopic, requestMessageType, requestMessageModule, replyMessageType, replyMessageModule, channelParameters, subName, payloadGenerator, functionName, description, deprecated }: RenderRequestReplyParameters): SingleFunctionRenderType;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderCoreRequest = void 0;
4
+ /* eslint-disable sonarjs/no-nested-template-literals */
5
+ /* eslint-disable no-nested-ternary */
6
+ const types_1 = require("../../types");
7
+ const utils_1 = require("../../../utils");
8
+ const utils_2 = require("../../utils");
9
+ function renderCoreRequest({ requestTopic, requestMessageType, requestMessageModule, replyMessageType, replyMessageModule, channelParameters, subName = (0, utils_1.pascalCase)(requestTopic), payloadGenerator, functionName = `requestTo${subName}`, description, deprecated }) {
10
+ const includeValidation = payloadGenerator.generator.includeValidation;
11
+ const addressToUse = channelParameters
12
+ ? `parameters.getChannelWithParameters('${requestTopic}')`
13
+ : `'${requestTopic}'`;
14
+ const requestType = requestMessageModule
15
+ ? `${requestMessageModule}.${requestMessageType}`
16
+ : requestMessageType;
17
+ const replyType = replyMessageModule
18
+ ? `${replyMessageModule}.${replyMessageType}`
19
+ : replyMessageType;
20
+ const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
21
+ includeValidation,
22
+ messageModule: replyMessageModule,
23
+ messageType: replyMessageType,
24
+ onValidationFail: `return reject(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`));`
25
+ });
26
+ const functionParameters = [
27
+ {
28
+ parameter: `requestMessage`,
29
+ parameterType: `requestMessage: ${requestType}`,
30
+ jsDoc: ` * @param requestMessage the message to send`
31
+ },
32
+ ...(channelParameters
33
+ ? [
34
+ {
35
+ parameter: `parameters`,
36
+ parameterType: `parameters: ${channelParameters.type}`,
37
+ jsDoc: ' * @param parameters for topic substitution'
38
+ }
39
+ ]
40
+ : []),
41
+ {
42
+ parameter: 'nc',
43
+ parameterType: 'nc: Nats.NatsConnection',
44
+ jsDoc: ' * @param nc the nats client to setup the request for'
45
+ },
46
+ {
47
+ parameter: 'codec = Nats.JSONCodec()',
48
+ parameterType: 'codec?: Nats.Codec<any>',
49
+ jsDoc: ' * @param codec the serialization codec to use when transmitting request and receiving reply'
50
+ },
51
+ {
52
+ parameter: 'options',
53
+ parameterType: 'options?: Nats.RequestOptions',
54
+ jsDoc: ' * @param options when sending the request'
55
+ },
56
+ {
57
+ parameter: 'skipMessageValidation = false',
58
+ parameterType: 'skipMessageValidation?: boolean',
59
+ jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
60
+ }
61
+ ];
62
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
63
+ description,
64
+ deprecated,
65
+ fallbackDescription: `NATS request operation for \`${requestTopic}\``,
66
+ parameters: functionParameters.map((param) => ({
67
+ jsDoc: param.jsDoc
68
+ }))
69
+ });
70
+ const code = `${jsDoc}
71
+ function ${functionName}({
72
+ ${functionParameters.map((param) => param.parameter).join(', \n ')}
73
+ }: {
74
+ ${functionParameters.map((param) => param.parameterType).join(', \n ')}
75
+ }): Promise<${replyType}> {
76
+ return new Promise(async (resolve, reject) => {
77
+ try {
78
+ ${potentialValidatorCreation}
79
+ let dataToSend: any = requestMessage.marshal();
80
+ dataToSend = codec.encode(dataToSend);
81
+
82
+ const msg = await nc.request(${addressToUse}, dataToSend, options);
83
+ const receivedData: any = codec.decode(msg.data);
84
+ ${potentialValidationFunction}
85
+ resolve(${replyMessageModule ? `${replyMessageModule}.unmarshal(receivedData)` : `${replyMessageType}.unmarshal(receivedData)`});
86
+ } catch (e: any) {
87
+ reject(e);
88
+ }
89
+ });
90
+ }`;
91
+ return {
92
+ messageType: requestType,
93
+ replyType,
94
+ code,
95
+ functionName,
96
+ dependencies: [`import * as Nats from 'nats';`],
97
+ functionType: types_1.ChannelFunctionTypes.NATS_REQUEST
98
+ };
99
+ }
100
+ exports.renderCoreRequest = renderCoreRequest;
@@ -0,0 +1,3 @@
1
+ import { SingleFunctionRenderType } from '../../../../../types';
2
+ import { RenderRegularParameters } from '../../types';
3
+ export declare function renderCoreSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, payloadGenerator, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;