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