@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,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateEventSourceChannels = exports.renderExpress = exports.renderFetch = 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 express_1 = require("./express");
11
+ Object.defineProperty(exports, "renderExpress", { enumerable: true, get: function () { return express_1.renderExpress; } });
12
+ const fetch_1 = require("./fetch");
13
+ Object.defineProperty(exports, "renderFetch", { enumerable: true, get: function () { return fetch_1.renderFetch; } });
14
+ const errors_1 = require("../../../../../errors");
15
+ async function generateEventSourceChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
16
+ const { parameter, topic } = context;
17
+ const ignoreOperation = !context.generator.asyncapiGenerateForOperations;
18
+ const eventSourceContext = {
19
+ channelParameters: parameter,
20
+ channelHeaders: context.headers, // EventSource supports custom headers
21
+ topic,
22
+ messageType: '',
23
+ subName: context.subName,
24
+ payloadGenerator: context.payloads
25
+ };
26
+ const operations = channel.operations().all();
27
+ const renders = operations.length > 0 && !ignoreOperation
28
+ ? await generateForOperations(context, channel, eventSourceContext)
29
+ : await generateForChannels(context, channel, eventSourceContext);
30
+ addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
31
+ }
32
+ exports.generateEventSourceChannels = generateEventSourceChannels;
33
+ function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
34
+ protocolCodeFunctions['event_source'].push(...renders.map((value) => value.code));
35
+ externalProtocolFunctionInformation['event_source'].push(...renders.map((value) => ({
36
+ functionType: value.functionType,
37
+ functionName: value.functionName,
38
+ messageType: value.messageType,
39
+ replyType: value.replyType,
40
+ parameterType: parameter?.type
41
+ })));
42
+ const renderedDependencies = renders
43
+ .map((value) => value.dependencies)
44
+ .flat(Infinity);
45
+ dependencies.push(...new Set(renderedDependencies));
46
+ }
47
+ async function generateForOperations(context, channel, eventSourceContext) {
48
+ const renders = [];
49
+ const { generator, payloads } = context;
50
+ const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
51
+ for (const operation of channel.operations().all()) {
52
+ const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
53
+ const payloadId = (0, utils_1.findOperationId)(operation, channel);
54
+ const payload = payloads.operationModels[payloadId];
55
+ if (!payload) {
56
+ throw new Error(`Could not find payload for operation in channel typescript generator for EventSource`);
57
+ }
58
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
59
+ if (messageType === undefined) {
60
+ throw new Error(`Could not find message type for channel typescript generator for EventSource`);
61
+ }
62
+ // Extract operation metadata for JSDoc
63
+ const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
64
+ const updatedContext = {
65
+ ...eventSourceContext,
66
+ messageType,
67
+ messageModule,
68
+ subName: (0, utils_1.findNameFromOperation)(operation, channel),
69
+ description,
70
+ deprecated
71
+ };
72
+ renders.push(...generateOperationRenders(operation, updatedContext, updatedFunctionTypeMapping, generator));
73
+ }
74
+ return renders;
75
+ }
76
+ function generateOperationRenders(operation, eventSourceContext, functionTypeMapping, generator) {
77
+ const renders = [];
78
+ const action = operation.action();
79
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.EVENT_SOURCE_FETCH, action, generator.asyncapiReverseOperations)) {
80
+ renders.push((0, fetch_1.renderFetch)({
81
+ ...eventSourceContext,
82
+ additionalProperties: {
83
+ fetchDependency: generator.eventSourceDependency
84
+ }
85
+ }));
86
+ }
87
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.EVENT_SOURCE_EXPRESS, action, generator.asyncapiReverseOperations)) {
88
+ renders.push((0, express_1.renderExpress)(eventSourceContext));
89
+ }
90
+ return renders;
91
+ }
92
+ async function generateForChannels(context, channel, eventSourceContext) {
93
+ const renders = [];
94
+ const { generator, payloads } = context;
95
+ const functionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(channel) ??
96
+ generator.functionTypeMapping?.[channel.id()];
97
+ const payload = payloads.channelModels[channel.id()];
98
+ if (!payload) {
99
+ throw (0, errors_1.createMissingPayloadError)({
100
+ channelOrOperation: channel.id(),
101
+ protocol: 'EventSource'
102
+ });
103
+ }
104
+ const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
105
+ if (messageType === undefined) {
106
+ throw new Error(`Could not find message type for channel typescript generator for EventSource`);
107
+ }
108
+ const updatedContext = { ...eventSourceContext, messageType, messageModule };
109
+ const renderChecks = [
110
+ {
111
+ check: types_1.ChannelFunctionTypes.EVENT_SOURCE_FETCH,
112
+ render: fetch_1.renderFetch,
113
+ action: 'receive'
114
+ },
115
+ {
116
+ check: types_1.ChannelFunctionTypes.EVENT_SOURCE_EXPRESS,
117
+ render: express_1.renderExpress,
118
+ action: 'send'
119
+ }
120
+ ];
121
+ for (const { check, render, action } of renderChecks) {
122
+ if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, check, action, generator.asyncapiReverseOperations)) {
123
+ renders.push(render({
124
+ ...updatedContext,
125
+ additionalProperties: check === types_1.ChannelFunctionTypes.EVENT_SOURCE_FETCH
126
+ ? { fetchDependency: generator.eventSourceDependency }
127
+ : undefined
128
+ }));
129
+ }
130
+ }
131
+ return renders;
132
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Generates HTTP client functions for individual API operations.
3
+ * Each operation gets a typed function with request/response handling.
4
+ */
5
+ import { HttpRenderType } from '../../../../../types';
6
+ import { RenderHttpParameters } from '../../types';
7
+ /**
8
+ * Renders an HTTP fetch client function for a specific API operation.
9
+ */
10
+ export declare function renderHttpFetchClient({ requestTopic, requestMessageType, requestMessageModule, replyMessageType, replyMessageModule, channelParameters, method, servers, subName, functionName, includesStatusCodes, description, deprecated }: RenderHttpParameters): HttpRenderType;
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderHttpFetchClient = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const types_1 = require("../../types");
6
+ const utils_2 = require("../../utils");
7
+ /**
8
+ * Renders an HTTP fetch client function for a specific API operation.
9
+ */
10
+ function renderHttpFetchClient({ requestTopic, requestMessageType, requestMessageModule, replyMessageType, replyMessageModule, channelParameters, method, servers = [], subName = (0, utils_1.pascalCase)(requestTopic), functionName = `${method.toLowerCase()}${subName}`, includesStatusCodes = false, description, deprecated }) {
11
+ const messageType = requestMessageModule
12
+ ? `${requestMessageModule}.${requestMessageType}`
13
+ : requestMessageType;
14
+ const replyType = replyMessageModule
15
+ ? `${replyMessageModule}.${replyMessageType}`
16
+ : replyMessageType;
17
+ // Generate context interface name
18
+ const contextInterfaceName = `${(0, utils_1.pascalCase)(functionName)}Context`;
19
+ // Determine if operation has path parameters
20
+ const hasParameters = channelParameters !== undefined;
21
+ // Generate the context interface (extends HttpClientContext)
22
+ const contextInterface = generateContextInterface(contextInterfaceName, messageType, hasParameters, method);
23
+ // Generate JSDoc for the function
24
+ const jsDoc = (0, utils_2.renderChannelJSDoc)({
25
+ description,
26
+ deprecated,
27
+ fallbackDescription: `HTTP ${method} request to ${requestTopic}`
28
+ });
29
+ // Generate the function implementation
30
+ const functionCode = generateFunctionImplementation({
31
+ functionName,
32
+ contextInterfaceName,
33
+ replyType,
34
+ replyMessageModule,
35
+ replyMessageType,
36
+ messageType,
37
+ requestTopic,
38
+ hasParameters,
39
+ method,
40
+ servers,
41
+ includesStatusCodes,
42
+ jsDoc
43
+ });
44
+ const code = `${contextInterface}
45
+
46
+ ${functionCode}`;
47
+ return {
48
+ messageType,
49
+ replyType,
50
+ code,
51
+ functionName,
52
+ dependencies: [
53
+ `import { URLSearchParams, URL } from 'url';`,
54
+ `import * as NodeFetch from 'node-fetch';`
55
+ ],
56
+ functionType: types_1.ChannelFunctionTypes.HTTP_CLIENT
57
+ };
58
+ }
59
+ exports.renderHttpFetchClient = renderHttpFetchClient;
60
+ /**
61
+ * Generate the context interface for an HTTP operation
62
+ */
63
+ function generateContextInterface(interfaceName, messageType, hasParameters, method) {
64
+ const fields = [];
65
+ // Add payload field for methods that have a body
66
+ if (messageType && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {
67
+ fields.push(` payload: ${messageType};`);
68
+ }
69
+ // Add parameters field if operation has path parameters
70
+ if (hasParameters) {
71
+ fields.push(` parameters: { getChannelWithParameters: (path: string) => string };`);
72
+ }
73
+ // Add requestHeaders field (optional) for operations that support typed headers
74
+ // This is always optional since headers can also be passed via additionalHeaders
75
+ fields.push(` requestHeaders?: { marshal: () => string };`);
76
+ const fieldsStr = fields.length > 0 ? `\n${fields.join('\n')}\n` : '';
77
+ return `export interface ${interfaceName} extends HttpClientContext {${fieldsStr}}`;
78
+ }
79
+ /**
80
+ * Generate the function implementation
81
+ */
82
+ function generateFunctionImplementation(params) {
83
+ const { functionName, contextInterfaceName, replyType, replyMessageModule, replyMessageType, messageType, requestTopic, hasParameters, method, servers, includesStatusCodes, jsDoc } = params;
84
+ const defaultServer = servers[0] ?? "'localhost:3000'";
85
+ const hasBody = messageType && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase());
86
+ // Generate URL building code
87
+ const urlBuildCode = hasParameters
88
+ ? `let url = buildUrlWithParameters(config.server, '${requestTopic}', context.parameters);`
89
+ : 'let url = `${config.server}${config.path}`;';
90
+ // Generate headers initialization
91
+ const headersInit = `let headers = context.requestHeaders
92
+ ? applyTypedHeaders(context.requestHeaders, config.additionalHeaders)
93
+ : { 'Content-Type': 'application/json', ...config.additionalHeaders } as Record<string, string | string[]>;`;
94
+ // Generate body preparation
95
+ const bodyPrep = hasBody
96
+ ? `const body = context.payload?.marshal();`
97
+ : `const body = undefined;`;
98
+ // Generate response parsing
99
+ // Use unmarshalByStatusCode if the payload is a union type with status code support
100
+ let responseParseCode;
101
+ if (replyMessageModule) {
102
+ responseParseCode = includesStatusCodes
103
+ ? `const responseData = ${replyMessageModule}.unmarshalByStatusCode(rawData, response.status);`
104
+ : `const responseData = ${replyMessageModule}.unmarshal(rawData);`;
105
+ }
106
+ else {
107
+ responseParseCode = `const responseData = ${replyMessageType}.unmarshal(rawData);`;
108
+ }
109
+ // Generate default context for optional context parameter
110
+ const contextDefault = !hasBody && !hasParameters ? ' = {}' : '';
111
+ return `${jsDoc}
112
+ async function ${functionName}(context: ${contextInterfaceName}${contextDefault}): Promise<HttpClientResponse<${replyType}>> {
113
+ // Apply defaults
114
+ const config = {
115
+ path: '${requestTopic}',
116
+ server: ${defaultServer},
117
+ ...context,
118
+ };
119
+
120
+ // Validate OAuth2 config if present
121
+ if (config.auth?.type === 'oauth2' && AUTH_FEATURES.oauth2) {
122
+ validateOAuth2Config(config.auth);
123
+ }
124
+
125
+ // Build headers
126
+ ${headersInit}
127
+
128
+ // Build URL
129
+ ${urlBuildCode}
130
+ url = applyQueryParams(config.queryParams, url);
131
+
132
+ // Apply pagination (can affect URL and/or headers)
133
+ const paginationResult = applyPagination(config.pagination, url, headers);
134
+ url = paginationResult.url;
135
+ headers = paginationResult.headers;
136
+
137
+ // Apply authentication
138
+ const authResult = applyAuth(config.auth, headers, url);
139
+ headers = authResult.headers;
140
+ url = authResult.url;
141
+
142
+ // Prepare body
143
+ ${bodyPrep}
144
+
145
+ // Determine request function
146
+ const makeRequest = config.hooks?.makeRequest ?? defaultMakeRequest;
147
+
148
+ // Build request params
149
+ let requestParams: HttpRequestParams = {
150
+ url,
151
+ method: '${method}',
152
+ headers,
153
+ body
154
+ };
155
+
156
+ // Apply beforeRequest hook
157
+ if (config.hooks?.beforeRequest) {
158
+ requestParams = await config.hooks.beforeRequest(requestParams);
159
+ }
160
+
161
+ try {
162
+ // Execute request with retry logic
163
+ let response = await executeWithRetry(requestParams, makeRequest, config.retry);
164
+
165
+ // Apply afterResponse hook
166
+ if (config.hooks?.afterResponse) {
167
+ response = await config.hooks.afterResponse(response, requestParams);
168
+ }
169
+
170
+ // Handle OAuth2 token flows that require getting a token first
171
+ if (config.auth?.type === 'oauth2' && !config.auth.accessToken && AUTH_FEATURES.oauth2) {
172
+ const tokenFlowResponse = await handleOAuth2TokenFlow(config.auth, requestParams, makeRequest, config.retry);
173
+ if (tokenFlowResponse) {
174
+ response = tokenFlowResponse;
175
+ }
176
+ }
177
+
178
+ // Handle 401 with token refresh
179
+ if (response.status === 401 && config.auth?.type === 'oauth2' && AUTH_FEATURES.oauth2) {
180
+ try {
181
+ const refreshResponse = await handleTokenRefresh(config.auth, requestParams, makeRequest, config.retry);
182
+ if (refreshResponse) {
183
+ response = refreshResponse;
184
+ }
185
+ } catch {
186
+ throw new Error('Unauthorized');
187
+ }
188
+ }
189
+
190
+ // Handle error responses
191
+ if (!response.ok) {
192
+ handleHttpError(response.status, response.statusText);
193
+ }
194
+
195
+ // Parse response
196
+ const rawData = await response.json();
197
+ ${responseParseCode}
198
+
199
+ // Extract response metadata
200
+ const responseHeaders = extractHeaders(response);
201
+ const paginationInfo = extractPaginationInfo(responseHeaders, config.pagination);
202
+
203
+ // Build response wrapper with pagination helpers
204
+ const result: HttpClientResponse<${replyType}> = {
205
+ data: responseData,
206
+ status: response.status,
207
+ statusText: response.statusText,
208
+ headers: responseHeaders,
209
+ rawData,
210
+ pagination: paginationInfo,
211
+ ...createPaginationHelpers(config, paginationInfo, ${functionName}),
212
+ };
213
+
214
+ return result;
215
+
216
+ } catch (error) {
217
+ // Apply onError hook if present
218
+ if (config.hooks?.onError && error instanceof Error) {
219
+ throw await config.hooks.onError(error, requestParams);
220
+ }
221
+ throw error;
222
+ }
223
+ }`;
224
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Generates common types and helper functions shared across all HTTP client functions.
3
+ * This module renders the shared infrastructure code that is included once per generation.
4
+ */
5
+ import { SecuritySchemeOptions } from '../../types';
6
+ /**
7
+ * Generates common types and helper functions shared across all HTTP client functions.
8
+ * This should be called once per protocol generation to avoid code duplication.
9
+ *
10
+ * @param securitySchemes - Optional security schemes extracted from OpenAPI.
11
+ * When provided, only relevant auth types are generated.
12
+ * When undefined/empty, all auth types are generated for backward compatibility.
13
+ */
14
+ export declare function renderHttpCommonTypes(securitySchemes?: SecuritySchemeOptions[]): string;