@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.
- package/LICENSE +201 -0
- package/README.md +336 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.mjs +3 -0
- package/bin/run.cmd +3 -0
- package/bin/run.mjs +4 -0
- package/dist/LoggingInterface.d.ts +123 -0
- package/dist/LoggingInterface.js +300 -0
- package/dist/PersistedConfig.d.ts +46 -0
- package/dist/PersistedConfig.js +94 -0
- package/dist/browser/adapters/output.d.ts +69 -0
- package/dist/browser/adapters/output.js +91 -0
- package/dist/browser/config.d.ts +18 -0
- package/dist/browser/config.js +59 -0
- package/dist/browser/generate.d.ts +20 -0
- package/dist/browser/generate.js +129 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.js +26 -0
- package/dist/browser/parser.d.ts +9 -0
- package/dist/browser/parser.js +61 -0
- package/dist/browser/shims/asyncapi-parser.d.ts +30 -0
- package/dist/browser/shims/asyncapi-parser.js +52 -0
- package/dist/browser/shims/fs.d.ts +190 -0
- package/dist/browser/shims/fs.js +188 -0
- package/dist/browser/shims/json-schema-ref-parser.d.ts +73 -0
- package/dist/browser/shims/json-schema-ref-parser.js +246 -0
- package/dist/browser/shims/swagger-parser.d.ts +20 -0
- package/dist/browser/shims/swagger-parser.js +40 -0
- package/dist/codegen/configurationSchemaBuilder.d.ts +15 -0
- package/dist/codegen/configurationSchemaBuilder.js +48 -0
- package/dist/codegen/configurations.d.ts +29 -0
- package/dist/codegen/configurations.js +260 -0
- package/dist/codegen/detection.d.ts +19 -0
- package/dist/codegen/detection.js +174 -0
- package/dist/codegen/errors.d.ts +111 -0
- package/dist/codegen/errors.js +352 -0
- package/dist/codegen/generators/generic/custom.d.ts +75 -0
- package/dist/codegen/generators/generic/custom.js +66 -0
- package/dist/codegen/generators/index.d.ts +14 -0
- package/dist/codegen/generators/index.js +42 -0
- package/dist/codegen/generators/typescript/channels/asyncapi.d.ts +10 -0
- package/dist/codegen/generators/typescript/channels/asyncapi.js +131 -0
- package/dist/codegen/generators/typescript/channels/index.d.ts +8 -0
- package/dist/codegen/generators/typescript/channels/index.js +142 -0
- package/dist/codegen/generators/typescript/channels/openapi.d.ts +9 -0
- package/dist/codegen/generators/typescript/channels/openapi.js +168 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/index.d.ts +7 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/index.js +149 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.d.ts +5 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishExchange.js +106 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/publishQueue.js +102 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/amqp/subscribeQueue.js +133 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/express.js +100 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.d.ts +5 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/fetch.js +144 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.d.ts +6 -0
- package/dist/codegen/generators/typescript/channels/protocols/eventsource/index.js +132 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/client.d.ts +10 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/client.js +224 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/common-types.d.ts +14 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/common-types.js +800 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/index.d.ts +8 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/index.js +96 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/security.d.ts +48 -0
- package/dist/codegen/generators/typescript/channels/protocols/http/security.js +491 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/index.d.ts +6 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/index.js +127 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/publish.js +108 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/subscribe.js +154 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.d.ts +11 -0
- package/dist/codegen/generators/typescript/channels/protocols/kafka/utils.js +58 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.d.ts +6 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/index.js +113 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/publish.js +99 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/mqtt/subscribe.js +186 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/corePublish.js +90 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreReply.js +142 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreRequest.js +100 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/coreSubscribe.js +143 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/index.d.ts +11 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/index.js +224 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPublish.js +89 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPullSubscribe.js +146 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/jetstreamPushSubscription.js +149 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/utils.d.ts +35 -0
- package/dist/codegen/generators/typescript/channels/protocols/nats/utils.js +120 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/index.d.ts +7 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/index.js +152 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/publish.js +64 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/register.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/register.js +115 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.d.ts +3 -0
- package/dist/codegen/generators/typescript/channels/protocols/websocket/subscribe.js +151 -0
- package/dist/codegen/generators/typescript/channels/types.d.ts +181 -0
- package/dist/codegen/generators/typescript/channels/types.js +131 -0
- package/dist/codegen/generators/typescript/channels/utils.d.ts +64 -0
- package/dist/codegen/generators/typescript/channels/utils.js +163 -0
- package/dist/codegen/generators/typescript/client/index.d.ts +8 -0
- package/dist/codegen/generators/typescript/client/index.js +61 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/corePublish.js +53 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/coreSubscribe.js +90 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetStreamPullSubscription.js +83 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPublish.js +54 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.d.ts +6 -0
- package/dist/codegen/generators/typescript/client/protocols/nats/jetstreamPushSubscription.js +82 -0
- package/dist/codegen/generators/typescript/client/protocols/nats.d.ts +2 -0
- package/dist/codegen/generators/typescript/client/protocols/nats.js +182 -0
- package/dist/codegen/generators/typescript/client/types.d.ts +49 -0
- package/dist/codegen/generators/typescript/client/types.js +37 -0
- package/dist/codegen/generators/typescript/headers.d.ts +54 -0
- package/dist/codegen/generators/typescript/headers.js +138 -0
- package/dist/codegen/generators/typescript/index.d.ts +7 -0
- package/dist/codegen/generators/typescript/index.js +38 -0
- package/dist/codegen/generators/typescript/models.d.ts +21761 -0
- package/dist/codegen/generators/typescript/models.js +64 -0
- package/dist/codegen/generators/typescript/parameters.d.ts +37 -0
- package/dist/codegen/generators/typescript/parameters.js +101 -0
- package/dist/codegen/generators/typescript/payloads.d.ts +73 -0
- package/dist/codegen/generators/typescript/payloads.js +250 -0
- package/dist/codegen/generators/typescript/types.d.ts +34 -0
- package/dist/codegen/generators/typescript/types.js +70 -0
- package/dist/codegen/generators/typescript/utils.d.ts +38 -0
- package/dist/codegen/generators/typescript/utils.js +195 -0
- package/dist/codegen/index.d.ts +7 -0
- package/dist/codegen/index.js +38 -0
- package/dist/codegen/inputs/asyncapi/generators/headers.d.ts +3 -0
- package/dist/codegen/inputs/asyncapi/generators/headers.js +41 -0
- package/dist/codegen/inputs/asyncapi/generators/parameters.d.ts +14 -0
- package/dist/codegen/inputs/asyncapi/generators/parameters.js +120 -0
- package/dist/codegen/inputs/asyncapi/generators/payloads.d.ts +16 -0
- package/dist/codegen/inputs/asyncapi/generators/payloads.js +124 -0
- package/dist/codegen/inputs/asyncapi/generators/types.d.ts +9 -0
- package/dist/codegen/inputs/asyncapi/generators/types.js +61 -0
- package/dist/codegen/inputs/asyncapi/index.d.ts +1 -0
- package/dist/codegen/inputs/asyncapi/index.js +7 -0
- package/dist/codegen/inputs/asyncapi/parser.d.ts +4 -0
- package/dist/codegen/inputs/asyncapi/parser.js +90 -0
- package/dist/codegen/inputs/index.d.ts +3 -0
- package/dist/codegen/inputs/index.js +19 -0
- package/dist/codegen/inputs/jsonschema/generators/index.d.ts +1 -0
- package/dist/codegen/inputs/jsonschema/generators/index.js +5 -0
- package/dist/codegen/inputs/jsonschema/generators/models.d.ts +7 -0
- package/dist/codegen/inputs/jsonschema/generators/models.js +26 -0
- package/dist/codegen/inputs/jsonschema/index.d.ts +1 -0
- package/dist/codegen/inputs/jsonschema/index.js +7 -0
- package/dist/codegen/inputs/jsonschema/parser.d.ts +31 -0
- package/dist/codegen/inputs/jsonschema/parser.js +128 -0
- package/dist/codegen/inputs/openapi/generators/headers.d.ts +3 -0
- package/dist/codegen/inputs/openapi/generators/headers.js +101 -0
- package/dist/codegen/inputs/openapi/generators/parameters.d.ts +10 -0
- package/dist/codegen/inputs/openapi/generators/parameters.js +852 -0
- package/dist/codegen/inputs/openapi/generators/payloads.d.ts +3 -0
- package/dist/codegen/inputs/openapi/generators/payloads.js +231 -0
- package/dist/codegen/inputs/openapi/generators/types.d.ts +9 -0
- package/dist/codegen/inputs/openapi/generators/types.js +86 -0
- package/dist/codegen/inputs/openapi/index.d.ts +2 -0
- package/dist/codegen/inputs/openapi/index.js +8 -0
- package/dist/codegen/inputs/openapi/parser.d.ts +4 -0
- package/dist/codegen/inputs/openapi/parser.js +115 -0
- package/dist/codegen/inputs/openapi/security.d.ts +56 -0
- package/dist/codegen/inputs/openapi/security.js +193 -0
- package/dist/codegen/modelina/index.d.ts +2 -0
- package/dist/codegen/modelina/index.js +20 -0
- package/dist/codegen/modelina/presets/index.d.ts +3 -0
- package/dist/codegen/modelina/presets/index.js +14 -0
- package/dist/codegen/modelina/presets/primitives.d.ts +34 -0
- package/dist/codegen/modelina/presets/primitives.js +211 -0
- package/dist/codegen/modelina/presets/union.d.ts +33 -0
- package/dist/codegen/modelina/presets/union.js +197 -0
- package/dist/codegen/modelina/presets/validation.d.ts +66 -0
- package/dist/codegen/modelina/presets/validation.js +183 -0
- package/dist/codegen/modelina/types.d.ts +61845 -0
- package/dist/codegen/modelina/types.js +412 -0
- package/dist/codegen/output/filesystem.d.ts +30 -0
- package/dist/codegen/output/filesystem.js +61 -0
- package/dist/codegen/output/index.d.ts +16 -0
- package/dist/codegen/output/index.js +57 -0
- package/dist/codegen/output/memory.d.ts +54 -0
- package/dist/codegen/output/memory.js +81 -0
- package/dist/codegen/output/modelina.d.ts +30 -0
- package/dist/codegen/output/modelina.js +30 -0
- package/dist/codegen/output/types.d.ts +47 -0
- package/dist/codegen/output/types.js +6 -0
- package/dist/codegen/renderer.d.ts +13 -0
- package/dist/codegen/renderer.js +309 -0
- package/dist/codegen/schemaPostProcess.d.ts +25 -0
- package/dist/codegen/schemaPostProcess.js +38 -0
- package/dist/codegen/types.d.ts +285187 -0
- package/dist/codegen/types.js +177 -0
- package/dist/codegen/utils.d.ts +126 -0
- package/dist/codegen/utils.js +373 -0
- package/dist/commands/base.d.ts +18 -0
- package/dist/commands/base.js +59 -0
- package/dist/commands/generate.d.ts +46 -0
- package/dist/commands/generate.js +305 -0
- package/dist/commands/init.d.ts +55 -0
- package/dist/commands/init.js +544 -0
- package/dist/commands/telemetry.d.ts +25 -0
- package/dist/commands/telemetry.js +115 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +35 -0
- package/dist/telemetry/anonymize.d.ts +19 -0
- package/dist/telemetry/anonymize.js +73 -0
- package/dist/telemetry/collector.d.ts +26 -0
- package/dist/telemetry/collector.js +57 -0
- package/dist/telemetry/config.d.ts +32 -0
- package/dist/telemetry/config.js +97 -0
- package/dist/telemetry/events.d.ts +72 -0
- package/dist/telemetry/events.js +5 -0
- package/dist/telemetry/index.d.ts +46 -0
- package/dist/telemetry/index.js +91 -0
- package/dist/telemetry/notice.d.ts +8 -0
- package/dist/telemetry/notice.js +50 -0
- package/dist/telemetry/sender.d.ts +14 -0
- package/dist/telemetry/sender.js +125 -0
- package/dist/utils/gitignore.d.ts +66 -0
- package/dist/utils/gitignore.js +111 -0
- package/dist/utils/inputSource.d.ts +3 -0
- package/dist/utils/inputSource.js +26 -0
- package/dist/utils/refResolvers.d.ts +29 -0
- package/dist/utils/refResolvers.js +83 -0
- package/dist/utils/remoteFetch.d.ts +18 -0
- package/dist/utils/remoteFetch.js +64 -0
- package/oclif.manifest.json +510 -0
- package/package.json +155 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateKafkaChannels = exports.renderSubscribe = exports.renderPublish = 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 publish_1 = require("./publish");
|
|
11
|
+
Object.defineProperty(exports, "renderPublish", { enumerable: true, get: function () { return publish_1.renderPublish; } });
|
|
12
|
+
const subscribe_1 = require("./subscribe");
|
|
13
|
+
Object.defineProperty(exports, "renderSubscribe", { enumerable: true, get: function () { return subscribe_1.renderSubscribe; } });
|
|
14
|
+
const errors_1 = require("../../../../../errors");
|
|
15
|
+
async function generateKafkaChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
|
|
16
|
+
const { parameter, topic } = context;
|
|
17
|
+
const ignoreOperation = !context.generator.asyncapiGenerateForOperations;
|
|
18
|
+
let kafkaTopic = topic.startsWith('/') ? topic.slice(1) : topic;
|
|
19
|
+
kafkaTopic = kafkaTopic.replace(/\//g, context.generator.kafkaTopicSeparator);
|
|
20
|
+
const kafkaContext = {
|
|
21
|
+
channelParameters: parameter,
|
|
22
|
+
channelHeaders: context.headers, // Kafka supports headers
|
|
23
|
+
topic: kafkaTopic,
|
|
24
|
+
messageType: '',
|
|
25
|
+
subName: context.subName,
|
|
26
|
+
payloadGenerator: context.payloads
|
|
27
|
+
};
|
|
28
|
+
const operations = channel.operations().all();
|
|
29
|
+
const renders = operations.length > 0 && !ignoreOperation
|
|
30
|
+
? await generateForOperations(context, channel, kafkaContext)
|
|
31
|
+
: await generateForChannels(context, channel, kafkaContext);
|
|
32
|
+
addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
|
|
33
|
+
}
|
|
34
|
+
exports.generateKafkaChannels = generateKafkaChannels;
|
|
35
|
+
function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
|
|
36
|
+
protocolCodeFunctions['kafka'].push(...renders.map((value) => value.code));
|
|
37
|
+
externalProtocolFunctionInformation['kafka'].push(...renders.map((value) => ({
|
|
38
|
+
functionType: value.functionType,
|
|
39
|
+
functionName: value.functionName,
|
|
40
|
+
messageType: value.messageType,
|
|
41
|
+
replyType: value.replyType,
|
|
42
|
+
parameterType: parameter?.type
|
|
43
|
+
})));
|
|
44
|
+
const renderedDependencies = renders
|
|
45
|
+
.map((value) => value.dependencies)
|
|
46
|
+
.flat(Infinity);
|
|
47
|
+
dependencies.push(...new Set(renderedDependencies));
|
|
48
|
+
}
|
|
49
|
+
async function generateForOperations(context, channel, kafkaContext) {
|
|
50
|
+
const renders = [];
|
|
51
|
+
const { generator, payloads } = context;
|
|
52
|
+
const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
|
|
53
|
+
for (const operation of channel.operations().all()) {
|
|
54
|
+
const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
|
|
55
|
+
const payloadId = (0, utils_1.findOperationId)(operation, channel);
|
|
56
|
+
const payload = payloads.operationModels[payloadId];
|
|
57
|
+
if (!payload) {
|
|
58
|
+
throw (0, errors_1.createMissingPayloadError)({
|
|
59
|
+
channelOrOperation: payloadId,
|
|
60
|
+
protocol: 'Kafka'
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
|
|
64
|
+
if (messageType === undefined) {
|
|
65
|
+
throw new Error(`Could not find message type for channel typescript generator for Kafka`);
|
|
66
|
+
}
|
|
67
|
+
// Extract operation metadata for JSDoc
|
|
68
|
+
const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
|
|
69
|
+
const updatedContext = {
|
|
70
|
+
...kafkaContext,
|
|
71
|
+
messageType,
|
|
72
|
+
messageModule,
|
|
73
|
+
subName: (0, utils_1.findNameFromOperation)(operation, channel),
|
|
74
|
+
description,
|
|
75
|
+
deprecated
|
|
76
|
+
};
|
|
77
|
+
renders.push(...generateOperationRenders(operation, updatedContext, updatedFunctionTypeMapping, generator));
|
|
78
|
+
}
|
|
79
|
+
return renders;
|
|
80
|
+
}
|
|
81
|
+
function generateOperationRenders(operation, kafkaContext, functionTypeMapping, generator) {
|
|
82
|
+
const renders = [];
|
|
83
|
+
const action = operation.action();
|
|
84
|
+
if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.KAFKA_PUBLISH, action, generator.asyncapiReverseOperations)) {
|
|
85
|
+
renders.push((0, publish_1.renderPublish)(kafkaContext));
|
|
86
|
+
}
|
|
87
|
+
if ((0, asyncapi_1.shouldRenderFunctionType)(functionTypeMapping, types_1.ChannelFunctionTypes.KAFKA_SUBSCRIBE, action, generator.asyncapiReverseOperations)) {
|
|
88
|
+
renders.push((0, subscribe_1.renderSubscribe)(kafkaContext));
|
|
89
|
+
}
|
|
90
|
+
return renders;
|
|
91
|
+
}
|
|
92
|
+
async function generateForChannels(context, channel, kafkaContext) {
|
|
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: 'Kafka'
|
|
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 Kafka`);
|
|
107
|
+
}
|
|
108
|
+
const updatedContext = { ...kafkaContext, messageType, messageModule };
|
|
109
|
+
const renderChecks = [
|
|
110
|
+
{
|
|
111
|
+
check: types_1.ChannelFunctionTypes.KAFKA_PUBLISH,
|
|
112
|
+
render: publish_1.renderPublish,
|
|
113
|
+
action: 'send'
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
check: types_1.ChannelFunctionTypes.KAFKA_SUBSCRIBE,
|
|
117
|
+
render: subscribe_1.renderSubscribe,
|
|
118
|
+
action: 'receive'
|
|
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(updatedContext));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return renders;
|
|
127
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SingleFunctionRenderType } from '../../../../../types';
|
|
2
|
+
import { RenderRegularParameters } from '../../types';
|
|
3
|
+
export declare function renderPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
|
|
@@ -0,0 +1,108 @@
|
|
|
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 = `produceTo${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 publishOperation = messageType === 'null'
|
|
18
|
+
? `let dataToSend: any = null;`
|
|
19
|
+
: `let dataToSend: any = ${messageMarshalling};`;
|
|
20
|
+
const functionParameters = [
|
|
21
|
+
{
|
|
22
|
+
parameter: `message`,
|
|
23
|
+
parameterType: `message: ${messageType}`,
|
|
24
|
+
jsDoc: ' * @param message to publish'
|
|
25
|
+
},
|
|
26
|
+
...(channelParameters
|
|
27
|
+
? [
|
|
28
|
+
{
|
|
29
|
+
parameter: `parameters`,
|
|
30
|
+
parameterType: `parameters: ${channelParameters.type}`,
|
|
31
|
+
jsDoc: ' * @param parameters for topic substitution'
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
: []),
|
|
35
|
+
...(channelHeaders
|
|
36
|
+
? [
|
|
37
|
+
{
|
|
38
|
+
parameter: `headers`,
|
|
39
|
+
parameterType: `headers?: ${channelHeaders.type}`,
|
|
40
|
+
jsDoc: ' * @param headers optional headers to include with the message'
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
: []),
|
|
44
|
+
{
|
|
45
|
+
parameter: 'kafka',
|
|
46
|
+
parameterType: 'kafka: Kafka.Kafka',
|
|
47
|
+
jsDoc: ' * @param kafka the KafkaJS client to publish from'
|
|
48
|
+
}
|
|
49
|
+
];
|
|
50
|
+
const headersHandling = channelHeaders
|
|
51
|
+
? `// Set up headers if provided
|
|
52
|
+
let messageHeaders: Record<string, string> | undefined = undefined;
|
|
53
|
+
if (headers) {
|
|
54
|
+
const headerData = headers.marshal();
|
|
55
|
+
const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
|
|
56
|
+
messageHeaders = {};
|
|
57
|
+
for (const [key, value] of Object.entries(parsedHeaders)) {
|
|
58
|
+
if (value !== undefined) {
|
|
59
|
+
messageHeaders[key] = String(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}`
|
|
63
|
+
: '';
|
|
64
|
+
const headersInMessage = channelHeaders ? 'headers: messageHeaders' : '';
|
|
65
|
+
const jsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
66
|
+
description,
|
|
67
|
+
deprecated,
|
|
68
|
+
fallbackDescription: `Kafka publish operation for \`${topic}\``,
|
|
69
|
+
parameters: functionParameters.map((param) => ({
|
|
70
|
+
jsDoc: param.jsDoc
|
|
71
|
+
}))
|
|
72
|
+
});
|
|
73
|
+
const code = `${jsDoc}
|
|
74
|
+
function ${functionName}({
|
|
75
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
76
|
+
}: {
|
|
77
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
78
|
+
}): Promise<Kafka.Producer> {
|
|
79
|
+
return new Promise(async (resolve, reject) => {
|
|
80
|
+
try {
|
|
81
|
+
${publishOperation}
|
|
82
|
+
const producer = kafka.producer();
|
|
83
|
+
await producer.connect();
|
|
84
|
+
${headersHandling}
|
|
85
|
+
|
|
86
|
+
await producer.send({
|
|
87
|
+
topic: ${addressToUse},
|
|
88
|
+
messages: [
|
|
89
|
+
{
|
|
90
|
+
value: dataToSend${channelHeaders ? `,\n ${headersInMessage}` : ''}
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
});
|
|
94
|
+
resolve(producer);
|
|
95
|
+
} catch (e: any) {
|
|
96
|
+
reject(e);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}`;
|
|
100
|
+
return {
|
|
101
|
+
messageType,
|
|
102
|
+
code,
|
|
103
|
+
functionName,
|
|
104
|
+
dependencies: [`import * as Kafka from 'kafkajs';`],
|
|
105
|
+
functionType: __1.ChannelFunctionTypes.KAFKA_PUBLISH
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
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,154 @@
|
|
|
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
|
+
const utils_3 = require("./utils");
|
|
10
|
+
function renderSubscribe({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `consumeFrom${subName}`, payloadGenerator, description, deprecated }) {
|
|
11
|
+
const includeValidation = payloadGenerator.generator.includeValidation;
|
|
12
|
+
const addressToUse = channelParameters
|
|
13
|
+
? `parameters.getChannelWithParameters('${topic}')`
|
|
14
|
+
: `'${topic}'`;
|
|
15
|
+
const messageUnmarshalling = `${messageModule ?? messageType}.unmarshal(receivedData)`;
|
|
16
|
+
messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
|
|
17
|
+
const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
|
|
18
|
+
includeValidation,
|
|
19
|
+
messageModule,
|
|
20
|
+
messageType,
|
|
21
|
+
onValidationFail: channelParameters && channelHeaders
|
|
22
|
+
? `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, parameters, extractedHeaders, kafkaMessage);`
|
|
23
|
+
: channelParameters
|
|
24
|
+
? `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, parameters, kafkaMessage);`
|
|
25
|
+
: channelHeaders
|
|
26
|
+
? `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, extractedHeaders, kafkaMessage);`
|
|
27
|
+
: `return onDataCallback(new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), undefined, kafkaMessage);`
|
|
28
|
+
});
|
|
29
|
+
const callbackFunctionParameters = [
|
|
30
|
+
{
|
|
31
|
+
parameter: 'err?: Error',
|
|
32
|
+
jsDoc: ' * @param err if any error occurred this will be sat'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
parameter: `msg?: ${messageType}`,
|
|
36
|
+
jsDoc: ' * @param msg that was received'
|
|
37
|
+
},
|
|
38
|
+
...(channelParameters
|
|
39
|
+
? [
|
|
40
|
+
{
|
|
41
|
+
parameter: `parameters?: ${channelParameters.type}`,
|
|
42
|
+
jsDoc: ' * @param parameters that was received in the topic'
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
: []),
|
|
46
|
+
...(channelHeaders
|
|
47
|
+
? [
|
|
48
|
+
{
|
|
49
|
+
parameter: `headers?: ${channelHeaders.type}`,
|
|
50
|
+
jsDoc: ' * @param headers that was received with the message'
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
: []),
|
|
54
|
+
{
|
|
55
|
+
parameter: `kafkaMsg?: Kafka.EachMessagePayload`,
|
|
56
|
+
jsDoc: ' * @param kafkaMsg'
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
const functionParameters = [
|
|
60
|
+
{
|
|
61
|
+
parameter: `onDataCallback`,
|
|
62
|
+
parameterType: `onDataCallback: (${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => void`,
|
|
63
|
+
jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when messages are received`
|
|
64
|
+
},
|
|
65
|
+
...(channelParameters
|
|
66
|
+
? [
|
|
67
|
+
{
|
|
68
|
+
parameter: `parameters`,
|
|
69
|
+
parameterType: `parameters: ${channelParameters.type}`,
|
|
70
|
+
jsDoc: ' * @param parameters for topic substitution'
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
: []),
|
|
74
|
+
{
|
|
75
|
+
parameter: 'kafka',
|
|
76
|
+
parameterType: 'kafka: Kafka.Kafka',
|
|
77
|
+
jsDoc: ' * @param kafka the KafkaJS client to subscribe through'
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
parameter: `options = {fromBeginning: true, groupId: ''}`,
|
|
81
|
+
parameterType: `options: {fromBeginning: boolean, groupId: string}`,
|
|
82
|
+
jsDoc: ' * @param options when setting up the subscription'
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
parameter: 'skipMessageValidation = false',
|
|
86
|
+
parameterType: 'skipMessageValidation?: boolean',
|
|
87
|
+
jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
// Generate message receiving code using utility function
|
|
91
|
+
const whenReceivingMessage = (0, utils_3.generateKafkaMessageReceivingCode)({
|
|
92
|
+
channelParameters,
|
|
93
|
+
channelHeaders,
|
|
94
|
+
messageType,
|
|
95
|
+
messageUnmarshalling,
|
|
96
|
+
potentialValidationFunction
|
|
97
|
+
});
|
|
98
|
+
const callbackJsDocParameters = callbackFunctionParameters
|
|
99
|
+
.map((param) => param.jsDoc)
|
|
100
|
+
.join('\n');
|
|
101
|
+
const mainJsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
102
|
+
description,
|
|
103
|
+
deprecated,
|
|
104
|
+
fallbackDescription: `Kafka 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
|
+
${mainJsDoc}
|
|
117
|
+
function ${functionName}({
|
|
118
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
119
|
+
}: {
|
|
120
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
121
|
+
}): Promise<Kafka.Consumer> {
|
|
122
|
+
return new Promise(async (resolve, reject) => {
|
|
123
|
+
try {
|
|
124
|
+
if(!options.groupId) {
|
|
125
|
+
return reject('No group ID provided');
|
|
126
|
+
}
|
|
127
|
+
const consumer = kafka.consumer({ groupId: options.groupId });
|
|
128
|
+
|
|
129
|
+
${potentialValidatorCreation}
|
|
130
|
+
await consumer.connect();
|
|
131
|
+
await consumer.subscribe({ topic: ${addressToUse}, fromBeginning: options.fromBeginning });
|
|
132
|
+
await consumer.run({
|
|
133
|
+
eachMessage: async (kafkaMessage: Kafka.EachMessagePayload) => {
|
|
134
|
+
const { topic, message } = kafkaMessage;
|
|
135
|
+
const receivedData = message.value?.toString()!;
|
|
136
|
+
${channelParameters ? `const parameters = ${channelParameters.type}.createFromChannel(topic, '${topic}', ${(0, utils_1.findRegexFromChannel)(topic)});` : ''}
|
|
137
|
+
${whenReceivingMessage}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
resolve(consumer);
|
|
141
|
+
} catch (e: any) {
|
|
142
|
+
reject(e);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}`;
|
|
146
|
+
return {
|
|
147
|
+
messageType,
|
|
148
|
+
code,
|
|
149
|
+
functionName,
|
|
150
|
+
dependencies: [`import * as Kafka from 'kafkajs';`],
|
|
151
|
+
functionType: __1.ChannelFunctionTypes.KAFKA_SUBSCRIBE
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
exports.renderSubscribe = renderSubscribe;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConstrainedObjectModel } from '@asyncapi/modelina';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the message receiving code for Kafka subscribe functions
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateKafkaMessageReceivingCode({ channelParameters, channelHeaders, messageType, messageUnmarshalling, potentialValidationFunction }: {
|
|
6
|
+
channelParameters?: ConstrainedObjectModel;
|
|
7
|
+
channelHeaders?: ConstrainedObjectModel;
|
|
8
|
+
messageType: string;
|
|
9
|
+
messageUnmarshalling: string;
|
|
10
|
+
potentialValidationFunction: string;
|
|
11
|
+
}): string;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateKafkaMessageReceivingCode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Generates the message receiving code for Kafka subscribe functions
|
|
6
|
+
*/
|
|
7
|
+
function generateKafkaMessageReceivingCode({ channelParameters, channelHeaders, messageType, messageUnmarshalling, potentialValidationFunction }) {
|
|
8
|
+
// Generate header extraction code
|
|
9
|
+
const headerExtraction = channelHeaders
|
|
10
|
+
? `
|
|
11
|
+
// Extract headers if present
|
|
12
|
+
let extractedHeaders: ${channelHeaders.type} | undefined = undefined;
|
|
13
|
+
if (message.headers) {
|
|
14
|
+
const headerObj: Record<string, any> = {};
|
|
15
|
+
for (const [key, value] of Object.entries(message.headers)) {
|
|
16
|
+
if (value !== undefined) {
|
|
17
|
+
headerObj[key] = value.toString();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
extractedHeaders = ${channelHeaders.type}.unmarshal(headerObj);
|
|
21
|
+
}`
|
|
22
|
+
: '';
|
|
23
|
+
if (channelParameters && channelHeaders) {
|
|
24
|
+
if (messageType === 'null') {
|
|
25
|
+
return `${headerExtraction}
|
|
26
|
+
onDataCallback(undefined, null, parameters, extractedHeaders, kafkaMessage);`;
|
|
27
|
+
}
|
|
28
|
+
return `${headerExtraction}
|
|
29
|
+
${potentialValidationFunction}
|
|
30
|
+
const callbackData = ${messageUnmarshalling};
|
|
31
|
+
onDataCallback(undefined, callbackData, parameters, extractedHeaders, kafkaMessage);`;
|
|
32
|
+
}
|
|
33
|
+
else if (channelParameters) {
|
|
34
|
+
if (messageType === 'null') {
|
|
35
|
+
return `onDataCallback(undefined, null, parameters, kafkaMessage);`;
|
|
36
|
+
}
|
|
37
|
+
return `${potentialValidationFunction}
|
|
38
|
+
const callbackData = ${messageUnmarshalling};
|
|
39
|
+
onDataCallback(undefined, callbackData, parameters, kafkaMessage);`;
|
|
40
|
+
}
|
|
41
|
+
else if (channelHeaders) {
|
|
42
|
+
if (messageType === 'null') {
|
|
43
|
+
return `${headerExtraction}
|
|
44
|
+
onDataCallback(undefined, null, extractedHeaders, kafkaMessage);`;
|
|
45
|
+
}
|
|
46
|
+
return `${headerExtraction}
|
|
47
|
+
${potentialValidationFunction}
|
|
48
|
+
const callbackData = ${messageUnmarshalling};
|
|
49
|
+
onDataCallback(undefined, callbackData, extractedHeaders, kafkaMessage);`;
|
|
50
|
+
}
|
|
51
|
+
else if (messageType === 'null') {
|
|
52
|
+
return `onDataCallback(undefined, null, kafkaMessage);`;
|
|
53
|
+
}
|
|
54
|
+
return `${potentialValidationFunction}
|
|
55
|
+
const callbackData = ${messageUnmarshalling};
|
|
56
|
+
onDataCallback(undefined, callbackData, kafkaMessage);`;
|
|
57
|
+
}
|
|
58
|
+
exports.generateKafkaMessageReceivingCode = generateKafkaMessageReceivingCode;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TypeScriptChannelRenderedFunctionType, TypeScriptChannelsGeneratorContext } from '../../types';
|
|
2
|
+
import { renderPublish } from './publish';
|
|
3
|
+
import { renderSubscribe } from './subscribe';
|
|
4
|
+
import { ChannelInterface } from '@asyncapi/parser';
|
|
5
|
+
export { renderPublish, renderSubscribe };
|
|
6
|
+
export declare function generateMqttChannels(context: TypeScriptChannelsGeneratorContext, channel: ChannelInterface, protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, dependencies: string[]): Promise<void>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateMqttChannels = exports.renderSubscribe = exports.renderPublish = 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 publish_1 = require("./publish");
|
|
10
|
+
Object.defineProperty(exports, "renderPublish", { enumerable: true, get: function () { return publish_1.renderPublish; } });
|
|
11
|
+
const subscribe_1 = require("./subscribe");
|
|
12
|
+
Object.defineProperty(exports, "renderSubscribe", { enumerable: true, get: function () { return subscribe_1.renderSubscribe; } });
|
|
13
|
+
const asyncapi_1 = require("../../asyncapi");
|
|
14
|
+
const errors_1 = require("../../../../../errors");
|
|
15
|
+
async function generateMqttChannels(context, channel, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies) {
|
|
16
|
+
const { generator, parameter, topic } = context;
|
|
17
|
+
const ignoreOperation = !generator.asyncapiGenerateForOperations;
|
|
18
|
+
const mqttContext = {
|
|
19
|
+
channelParameters: parameter,
|
|
20
|
+
channelHeaders: context.headers, // MQTT v5 supports user properties as headers
|
|
21
|
+
topic,
|
|
22
|
+
subName: context.subName,
|
|
23
|
+
messageType: '',
|
|
24
|
+
payloadGenerator: context.payloads
|
|
25
|
+
};
|
|
26
|
+
let renders = [];
|
|
27
|
+
const operations = channel.operations().all();
|
|
28
|
+
if (operations.length > 0 && !ignoreOperation) {
|
|
29
|
+
renders = generateForOperations(context, channel, mqttContext);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
renders = generateForChannels(context, channel, mqttContext);
|
|
33
|
+
}
|
|
34
|
+
addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter);
|
|
35
|
+
}
|
|
36
|
+
exports.generateMqttChannels = generateMqttChannels;
|
|
37
|
+
function addRendersToExternal(renders, protocolCodeFunctions, externalProtocolFunctionInformation, dependencies, parameter) {
|
|
38
|
+
protocolCodeFunctions['mqtt'].push(...renders.map((value) => value.code));
|
|
39
|
+
externalProtocolFunctionInformation['mqtt'].push(...renders.map((value) => ({
|
|
40
|
+
functionType: value.functionType,
|
|
41
|
+
functionName: value.functionName,
|
|
42
|
+
messageType: value.messageType,
|
|
43
|
+
replyType: value.replyType,
|
|
44
|
+
parameterType: parameter?.type
|
|
45
|
+
})));
|
|
46
|
+
const renderedDependencies = renders
|
|
47
|
+
.map((value) => value.dependencies)
|
|
48
|
+
.flat(Infinity);
|
|
49
|
+
dependencies.push(...new Set(renderedDependencies));
|
|
50
|
+
}
|
|
51
|
+
function generateForOperations(context, channel, mqttContext) {
|
|
52
|
+
const renders = [];
|
|
53
|
+
const { generator, payloads } = context;
|
|
54
|
+
const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
|
|
55
|
+
for (const operation of channel.operations().all()) {
|
|
56
|
+
const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(operation) ?? functionTypeMapping;
|
|
57
|
+
const payloadId = (0, utils_1.findOperationId)(operation, channel);
|
|
58
|
+
const payload = payloads.operationModels[payloadId];
|
|
59
|
+
if (payload === undefined) {
|
|
60
|
+
throw (0, errors_1.createMissingPayloadError)({
|
|
61
|
+
channelOrOperation: payloadId,
|
|
62
|
+
protocol: 'MQTT'
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
|
|
66
|
+
if (messageType === undefined) {
|
|
67
|
+
throw new Error(`Could not find message type for ${payloadId} for mqtt channel typescript generator`);
|
|
68
|
+
}
|
|
69
|
+
// Extract operation metadata for JSDoc
|
|
70
|
+
const { description, deprecated } = (0, utils_1.getOperationMetadata)(operation);
|
|
71
|
+
const updatedContext = {
|
|
72
|
+
...mqttContext,
|
|
73
|
+
messageType,
|
|
74
|
+
messageModule,
|
|
75
|
+
subName: (0, utils_1.findNameFromOperation)(operation, channel),
|
|
76
|
+
description,
|
|
77
|
+
deprecated
|
|
78
|
+
};
|
|
79
|
+
const action = operation.action();
|
|
80
|
+
if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_PUBLISH, action, generator.asyncapiReverseOperations)) {
|
|
81
|
+
renders.push((0, publish_1.renderPublish)(updatedContext));
|
|
82
|
+
}
|
|
83
|
+
if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_SUBSCRIBE, action, generator.asyncapiReverseOperations)) {
|
|
84
|
+
renders.push((0, subscribe_1.renderSubscribe)(updatedContext));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return renders;
|
|
88
|
+
}
|
|
89
|
+
function generateForChannels(context, channel, mqttContext) {
|
|
90
|
+
const renders = [];
|
|
91
|
+
const { generator, payloads } = context;
|
|
92
|
+
const functionTypeMapping = generator.functionTypeMapping?.[channel.id()];
|
|
93
|
+
const updatedFunctionTypeMapping = (0, asyncapi_1.getFunctionTypeMappingFromAsyncAPI)(channel) ?? functionTypeMapping;
|
|
94
|
+
const payload = payloads.channelModels[channel.id()];
|
|
95
|
+
if (payload === undefined) {
|
|
96
|
+
throw (0, errors_1.createMissingPayloadError)({
|
|
97
|
+
channelOrOperation: channel.id(),
|
|
98
|
+
protocol: 'MQTT'
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const { messageModule, messageType } = (0, utils_2.getMessageTypeAndModule)(payload);
|
|
102
|
+
if (messageType === undefined) {
|
|
103
|
+
throw new Error(`Could not find message type for ${channel.id()} for mqtt channel typescript generator`);
|
|
104
|
+
}
|
|
105
|
+
const updatedContext = { ...mqttContext, messageType, messageModule };
|
|
106
|
+
if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_PUBLISH, 'send', generator.asyncapiReverseOperations)) {
|
|
107
|
+
renders.push((0, publish_1.renderPublish)(updatedContext));
|
|
108
|
+
}
|
|
109
|
+
if ((0, asyncapi_1.shouldRenderFunctionType)(updatedFunctionTypeMapping, types_1.ChannelFunctionTypes.MQTT_SUBSCRIBE, 'receive', generator.asyncapiReverseOperations)) {
|
|
110
|
+
renders.push((0, subscribe_1.renderSubscribe)(updatedContext));
|
|
111
|
+
}
|
|
112
|
+
return renders;
|
|
113
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SingleFunctionRenderType } from '../../../../../types';
|
|
2
|
+
import { RenderRegularParameters } from '../../types';
|
|
3
|
+
export declare function renderPublish({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
|