@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,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;
|