@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,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderPublishExchange = 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 renderPublishExchange({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `publishTo${subName}Exchange`, additionalProperties, 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 message properties (headers) if provided
|
|
19
|
+
let publishOptions = { ...options };
|
|
20
|
+
if (headers) {
|
|
21
|
+
const headerData = headers.marshal();
|
|
22
|
+
const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
|
|
23
|
+
publishOptions.headers = {};
|
|
24
|
+
for (const [key, value] of Object.entries(parsedHeaders)) {
|
|
25
|
+
if (value !== undefined) {
|
|
26
|
+
publishOptions.headers[key] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}`
|
|
30
|
+
: `let publishOptions = { ...options };`;
|
|
31
|
+
const publishOperation = `let dataToSend: any = ${messageType === 'null' ? 'null' : messageMarshalling};
|
|
32
|
+
const channel = await amqp.createChannel();
|
|
33
|
+
const routingKey = ${addressToUse};
|
|
34
|
+
${headersHandling}
|
|
35
|
+
channel.publish(exchange, routingKey, Buffer.from(dataToSend), publishOptions);`;
|
|
36
|
+
const functionParameters = [
|
|
37
|
+
{
|
|
38
|
+
parameter: `message`,
|
|
39
|
+
parameterType: `message: ${messageType}`,
|
|
40
|
+
jsDoc: ' * @param message to publish'
|
|
41
|
+
},
|
|
42
|
+
...(channelParameters
|
|
43
|
+
? [
|
|
44
|
+
{
|
|
45
|
+
parameter: `parameters`,
|
|
46
|
+
parameterType: `parameters: ${channelParameters.type}`,
|
|
47
|
+
jsDoc: ' * @param parameters for topic substitution'
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
: []),
|
|
51
|
+
...(channelHeaders
|
|
52
|
+
? [
|
|
53
|
+
{
|
|
54
|
+
parameter: `headers`,
|
|
55
|
+
parameterType: `headers?: ${channelHeaders.type}`,
|
|
56
|
+
jsDoc: ' * @param headers optional headers to include with the message'
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
: []),
|
|
60
|
+
{
|
|
61
|
+
parameter: 'amqp',
|
|
62
|
+
parameterType: 'amqp: Amqp.Connection',
|
|
63
|
+
jsDoc: ' * @param amqp the AMQP connection to send over'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
parameter: `options`,
|
|
67
|
+
parameterType: `options?: {exchange: string | undefined} & Amqp.Options.Publish`,
|
|
68
|
+
jsDoc: ' * @param options for the AMQP publish exchange operation'
|
|
69
|
+
}
|
|
70
|
+
];
|
|
71
|
+
const jsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
72
|
+
description,
|
|
73
|
+
deprecated,
|
|
74
|
+
fallbackDescription: `AMQP publish operation for exchange \`${topic}\``,
|
|
75
|
+
parameters: functionParameters.map((param) => ({
|
|
76
|
+
jsDoc: param.jsDoc
|
|
77
|
+
}))
|
|
78
|
+
});
|
|
79
|
+
const code = `${jsDoc}
|
|
80
|
+
function ${functionName}({
|
|
81
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
82
|
+
}: {
|
|
83
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
84
|
+
}): Promise<void> {
|
|
85
|
+
return new Promise<void>(async (resolve, reject) => {
|
|
86
|
+
const exchange = options?.exchange ?? '${additionalProperties?.exchange}';
|
|
87
|
+
if(!exchange) {
|
|
88
|
+
return reject('No exchange value found, please provide one')
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
${publishOperation}
|
|
92
|
+
resolve();
|
|
93
|
+
} catch (e: any) {
|
|
94
|
+
reject(e);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}`;
|
|
98
|
+
return {
|
|
99
|
+
messageType,
|
|
100
|
+
code,
|
|
101
|
+
functionName,
|
|
102
|
+
dependencies: [`import * as Amqp from 'amqplib';`],
|
|
103
|
+
functionType: __1.ChannelFunctionTypes.AMQP_EXCHANGE_PUBLISH
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
exports.renderPublishExchange = renderPublishExchange;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SingleFunctionRenderType } from '../../../../../types';
|
|
2
|
+
import { RenderRegularParameters } from '../../types';
|
|
3
|
+
export declare function renderPublishQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderPublishQueue = 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 renderPublishQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `publishTo${subName}Queue`, 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 message properties (headers) if provided
|
|
19
|
+
let publishOptions = { ...options };
|
|
20
|
+
if (headers) {
|
|
21
|
+
const headerData = headers.marshal();
|
|
22
|
+
const parsedHeaders = typeof headerData === 'string' ? JSON.parse(headerData) : headerData;
|
|
23
|
+
publishOptions.headers = {};
|
|
24
|
+
for (const [key, value] of Object.entries(parsedHeaders)) {
|
|
25
|
+
if (value !== undefined) {
|
|
26
|
+
publishOptions.headers[key] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}`
|
|
30
|
+
: `let publishOptions = { ...options };`;
|
|
31
|
+
const publishOperation = `let dataToSend: any = ${messageType === 'null' ? 'null' : messageMarshalling};
|
|
32
|
+
const channel = await amqp.createChannel();
|
|
33
|
+
const queue = ${addressToUse};
|
|
34
|
+
${headersHandling}
|
|
35
|
+
channel.sendToQueue(queue, Buffer.from(dataToSend), publishOptions);`;
|
|
36
|
+
const functionParameters = [
|
|
37
|
+
{
|
|
38
|
+
parameter: `message`,
|
|
39
|
+
parameterType: `message: ${messageType}`,
|
|
40
|
+
jsDoc: ' * @param message to publish'
|
|
41
|
+
},
|
|
42
|
+
...(channelParameters
|
|
43
|
+
? [
|
|
44
|
+
{
|
|
45
|
+
parameter: `parameters`,
|
|
46
|
+
parameterType: `parameters: ${channelParameters.type}`,
|
|
47
|
+
jsDoc: ' * @param parameters for topic substitution'
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
: []),
|
|
51
|
+
...(channelHeaders
|
|
52
|
+
? [
|
|
53
|
+
{
|
|
54
|
+
parameter: `headers`,
|
|
55
|
+
parameterType: `headers?: ${channelHeaders.type}`,
|
|
56
|
+
jsDoc: ' * @param headers optional headers to include with the message'
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
: []),
|
|
60
|
+
{
|
|
61
|
+
parameter: 'amqp',
|
|
62
|
+
parameterType: 'amqp: Amqp.Connection',
|
|
63
|
+
jsDoc: ' * @param amqp the AMQP connection to send over'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
parameter: `options`,
|
|
67
|
+
parameterType: `options?: Amqp.Options.Publish`,
|
|
68
|
+
jsDoc: ' * @param options for the AMQP publish queue operation'
|
|
69
|
+
}
|
|
70
|
+
];
|
|
71
|
+
const jsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
72
|
+
description,
|
|
73
|
+
deprecated,
|
|
74
|
+
fallbackDescription: `AMQP publish operation for queue \`${topic}\``,
|
|
75
|
+
parameters: functionParameters.map((param) => ({
|
|
76
|
+
jsDoc: param.jsDoc
|
|
77
|
+
}))
|
|
78
|
+
});
|
|
79
|
+
const code = `${jsDoc}
|
|
80
|
+
function ${functionName}({
|
|
81
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
82
|
+
}: {
|
|
83
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
84
|
+
}): Promise<void> {
|
|
85
|
+
return new Promise<void>(async (resolve, reject) => {
|
|
86
|
+
try {
|
|
87
|
+
${publishOperation}
|
|
88
|
+
resolve();
|
|
89
|
+
} catch (e: any) {
|
|
90
|
+
reject(e);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}`;
|
|
94
|
+
return {
|
|
95
|
+
messageType,
|
|
96
|
+
code,
|
|
97
|
+
functionName,
|
|
98
|
+
dependencies: [`import * as Amqp from 'amqplib';`],
|
|
99
|
+
functionType: __1.ChannelFunctionTypes.AMQP_QUEUE_PUBLISH
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
exports.renderPublishQueue = renderPublishQueue;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SingleFunctionRenderType } from '../../../../../types';
|
|
2
|
+
import { RenderRegularParameters } from '../../types';
|
|
3
|
+
export declare function renderSubscribeQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, payloadGenerator, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderSubscribeQueue = void 0;
|
|
4
|
+
const __1 = require("../..");
|
|
5
|
+
const utils_1 = require("../../../utils");
|
|
6
|
+
const utils_2 = require("../../utils");
|
|
7
|
+
function renderSubscribeQueue({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `subscribeTo${subName}Queue`, payloadGenerator, description, deprecated }) {
|
|
8
|
+
const includeValidation = payloadGenerator.generator.includeValidation;
|
|
9
|
+
const addressToUse = channelParameters
|
|
10
|
+
? `parameters.getChannelWithParameters('${topic}')`
|
|
11
|
+
: `'${topic}'`;
|
|
12
|
+
const messageUnmarshalling = `${messageModule ?? messageType}.unmarshal(receivedData)`;
|
|
13
|
+
messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
|
|
14
|
+
const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
|
|
15
|
+
includeValidation,
|
|
16
|
+
messageModule,
|
|
17
|
+
messageType,
|
|
18
|
+
onValidationFail: `onDataCallback({err: new Error(\`Invalid message payload received $\{JSON.stringify({cause: errors})}\`), msg: undefined${channelHeaders ? ', headers: extractedHeaders' : ''}, amqpMsg: msg}); return;`
|
|
19
|
+
});
|
|
20
|
+
const subscribeOperation = `const channel = await amqp.createChannel();
|
|
21
|
+
const queue = ${addressToUse};
|
|
22
|
+
await channel.assertQueue(queue, { durable: true });
|
|
23
|
+
${potentialValidatorCreation}
|
|
24
|
+
channel.consume(queue, (msg) => {
|
|
25
|
+
if (msg !== null) {
|
|
26
|
+
const receivedData = msg.content.toString()
|
|
27
|
+
${channelHeaders
|
|
28
|
+
? `// Extract headers if present
|
|
29
|
+
let extractedHeaders: ${channelHeaders.type} | undefined = undefined;
|
|
30
|
+
if (msg.properties && msg.properties.headers) {
|
|
31
|
+
const headerObj: Record<string, any> = {};
|
|
32
|
+
for (const [key, value] of Object.entries(msg.properties.headers)) {
|
|
33
|
+
if (value !== undefined) {
|
|
34
|
+
headerObj[key] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
extractedHeaders = ${channelHeaders.type}.unmarshal(headerObj);
|
|
38
|
+
}`
|
|
39
|
+
: ''}
|
|
40
|
+
${potentialValidationFunction}
|
|
41
|
+
const message = ${messageUnmarshalling};
|
|
42
|
+
onDataCallback({err: undefined, msg: message${channelHeaders ? ', headers: extractedHeaders' : ''}, amqpMsg: msg});
|
|
43
|
+
}
|
|
44
|
+
}, options);`;
|
|
45
|
+
const callbackFunctionParameters = [
|
|
46
|
+
{
|
|
47
|
+
parameter: 'err?: Error',
|
|
48
|
+
jsDoc: ' * @param err if any error occurred this will be sat'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
parameter: `msg?: ${messageType}`,
|
|
52
|
+
jsDoc: ' * @param msg that was received'
|
|
53
|
+
},
|
|
54
|
+
...(channelHeaders
|
|
55
|
+
? [
|
|
56
|
+
{
|
|
57
|
+
parameter: `headers?: ${channelHeaders.type}`,
|
|
58
|
+
jsDoc: ' * @param headers that was received with the message'
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
: []),
|
|
62
|
+
{
|
|
63
|
+
parameter: `amqpMsg?: Amqp.ConsumeMessage`,
|
|
64
|
+
jsDoc: ' * @param amqpMsg'
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
const callbackObjectType = `{${callbackFunctionParameters.map((param) => param.parameter).join(', ')}}`;
|
|
68
|
+
const callbackParameterNames = callbackFunctionParameters
|
|
69
|
+
.map((param) => param.parameter.split('?')[0])
|
|
70
|
+
.join(', ');
|
|
71
|
+
const functionParameters = [
|
|
72
|
+
{
|
|
73
|
+
parameter: `onDataCallback`,
|
|
74
|
+
parameterType: `onDataCallback: (params: ${callbackObjectType}) => void`,
|
|
75
|
+
jsDoc: ` * @param {${functionName}Callback} onDataCallback to call when messages are received`
|
|
76
|
+
},
|
|
77
|
+
...(channelParameters
|
|
78
|
+
? [
|
|
79
|
+
{
|
|
80
|
+
parameter: `parameters`,
|
|
81
|
+
parameterType: `parameters: ${channelParameters.type}`,
|
|
82
|
+
jsDoc: ' * @param parameters for topic substitution'
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
: []),
|
|
86
|
+
{
|
|
87
|
+
parameter: 'amqp',
|
|
88
|
+
parameterType: 'amqp: Amqp.Connection',
|
|
89
|
+
jsDoc: ' * @param amqp the AMQP connection to receive from'
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
parameter: `options`,
|
|
93
|
+
parameterType: `options?: Amqp.Options.Consume`,
|
|
94
|
+
jsDoc: ' * @param options for the AMQP subscribe queue operation'
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
parameter: 'skipMessageValidation = false',
|
|
98
|
+
parameterType: 'skipMessageValidation?: boolean',
|
|
99
|
+
jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
|
|
100
|
+
}
|
|
101
|
+
];
|
|
102
|
+
const jsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
103
|
+
description,
|
|
104
|
+
deprecated,
|
|
105
|
+
fallbackDescription: `AMQP subscribe operation for queue \`${topic}\``,
|
|
106
|
+
parameters: functionParameters.map((param) => ({
|
|
107
|
+
jsDoc: param.jsDoc
|
|
108
|
+
}))
|
|
109
|
+
});
|
|
110
|
+
const code = `${jsDoc}
|
|
111
|
+
function ${functionName}({
|
|
112
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
113
|
+
}: {
|
|
114
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
115
|
+
}): Promise<Amqp.Channel> {
|
|
116
|
+
return new Promise(async (resolve, reject) => {
|
|
117
|
+
try {
|
|
118
|
+
${subscribeOperation}
|
|
119
|
+
resolve(channel);
|
|
120
|
+
} catch (e: any) {
|
|
121
|
+
reject(e);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}`;
|
|
125
|
+
return {
|
|
126
|
+
messageType,
|
|
127
|
+
code,
|
|
128
|
+
functionName,
|
|
129
|
+
dependencies: [`import * as Amqp from 'amqplib';`],
|
|
130
|
+
functionType: __1.ChannelFunctionTypes.AMQP_QUEUE_SUBSCRIBE
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
exports.renderSubscribeQueue = renderSubscribeQueue;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SingleFunctionRenderType } from '../../../../../types';
|
|
2
|
+
import { RenderRegularParameters } from '../../types';
|
|
3
|
+
export declare function renderExpress({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, description, deprecated }: RenderRegularParameters): SingleFunctionRenderType;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderExpress = 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 renderExpress({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `register${subName}`, description, deprecated }) {
|
|
9
|
+
let addressToUse = topic.replace(/{([^}]+)}/g, ':$1');
|
|
10
|
+
addressToUse = addressToUse.startsWith('/')
|
|
11
|
+
? addressToUse
|
|
12
|
+
: `/${addressToUse}`;
|
|
13
|
+
let messageMarshalling = 'message.marshal()';
|
|
14
|
+
if (messageModule) {
|
|
15
|
+
messageMarshalling = `${messageModule}.marshal(message)`;
|
|
16
|
+
}
|
|
17
|
+
messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
|
|
18
|
+
const callbackFunctionParameters = [
|
|
19
|
+
{
|
|
20
|
+
parameter: 'req: Request',
|
|
21
|
+
jsDoc: ' * @param req from the request'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
parameter: 'res: Response',
|
|
25
|
+
jsDoc: ' * @param res from the request'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
parameter: 'next: NextFunction',
|
|
29
|
+
jsDoc: ' * @param next attached to the request'
|
|
30
|
+
},
|
|
31
|
+
...(channelParameters
|
|
32
|
+
? [
|
|
33
|
+
{
|
|
34
|
+
parameter: `parameters: ${channelParameters.type}`,
|
|
35
|
+
jsDoc: ' * @param parameters that was received when client made the connection'
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
: []),
|
|
39
|
+
{
|
|
40
|
+
parameter: `sendEvent: (message: ${messageType}) => void`,
|
|
41
|
+
jsDoc: ' * @param sendEvent callback you can use to send message to the client'
|
|
42
|
+
}
|
|
43
|
+
];
|
|
44
|
+
const functionParameters = [
|
|
45
|
+
{
|
|
46
|
+
parameter: 'router',
|
|
47
|
+
parameterType: 'router: Router',
|
|
48
|
+
jsDoc: ' * @param router to attach the event source to'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
parameter: `callback`,
|
|
52
|
+
parameterType: `callback: ((${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => void) | ((${callbackFunctionParameters.map((param) => param.parameter).join(', ')}) => Promise<void>)`,
|
|
53
|
+
jsDoc: ' * @param callback to call when receiving events'
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
const jsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
57
|
+
description,
|
|
58
|
+
deprecated,
|
|
59
|
+
fallbackDescription: `Register EventSource endpoint for \`${topic}\``,
|
|
60
|
+
parameters: functionParameters.map((param) => ({
|
|
61
|
+
jsDoc: param.jsDoc
|
|
62
|
+
}))
|
|
63
|
+
});
|
|
64
|
+
const code = `${jsDoc}
|
|
65
|
+
function ${functionName}({
|
|
66
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
67
|
+
}: {
|
|
68
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
69
|
+
}): void {
|
|
70
|
+
const event = '${addressToUse}';
|
|
71
|
+
router.get(event, async (req, res, next) => {
|
|
72
|
+
${channelParameters ? `const listenParameters = ${channelParameters.type}.createFromChannel(req.originalUrl.startsWith('/') ? req.originalUrl.slice(1) : req.originalUrl, '${topic}', ${(0, utils_1.findRegexFromChannel)(topic)});` : ''}
|
|
73
|
+
res.writeHead(200, {
|
|
74
|
+
'Cache-Control': 'no-cache, no-transform',
|
|
75
|
+
'Content-Type': 'text/event-stream',
|
|
76
|
+
Connection: 'keep-alive',
|
|
77
|
+
'Access-Control-Allow-Origin': '*',
|
|
78
|
+
})
|
|
79
|
+
const sendEventCallback = (message: ${messageType}) => {
|
|
80
|
+
if (res.closed) {
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
res.write(\`event: \${event}\\n\`)
|
|
84
|
+
res.write(\`data: \${${messageMarshalling}}\\n\\n\`)
|
|
85
|
+
}
|
|
86
|
+
await callback(req, res, next, ${channelParameters ? 'listenParameters, ' : ' '}sendEventCallback)
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
return {
|
|
91
|
+
messageType,
|
|
92
|
+
code,
|
|
93
|
+
functionName,
|
|
94
|
+
dependencies: [
|
|
95
|
+
`import { NextFunction, Request, Response, Router } from 'express';`
|
|
96
|
+
],
|
|
97
|
+
functionType: __1.ChannelFunctionTypes.EVENT_SOURCE_EXPRESS
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
exports.renderExpress = renderExpress;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SingleFunctionRenderType } from '../../../../../types';
|
|
2
|
+
import { RenderRegularParameters } from '../../types';
|
|
3
|
+
export declare function renderFetch({ topic, messageType, messageModule, channelParameters, channelHeaders, subName, functionName, additionalProperties, payloadGenerator, description, deprecated }: RenderRegularParameters<{
|
|
4
|
+
fetchDependency: string;
|
|
5
|
+
}>): SingleFunctionRenderType;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderFetch = void 0;
|
|
4
|
+
/* eslint-disable sonarjs/no-nested-template-literals */
|
|
5
|
+
const __1 = require("../..");
|
|
6
|
+
const utils_1 = require("../../../utils");
|
|
7
|
+
const types_1 = require("../../types");
|
|
8
|
+
const utils_2 = require("../../utils");
|
|
9
|
+
function renderFetch({ topic, messageType, messageModule, channelParameters, channelHeaders, subName = (0, utils_1.pascalCase)(topic), functionName = `listenFor${subName}`, additionalProperties = {
|
|
10
|
+
fetchDependency: types_1.defaultTypeScriptChannelsGenerator.eventSourceDependency
|
|
11
|
+
}, payloadGenerator, description, deprecated }) {
|
|
12
|
+
const includeValidation = payloadGenerator.generator.includeValidation;
|
|
13
|
+
const addressToUse = channelParameters
|
|
14
|
+
? `parameters.getChannelWithParameters('${topic}')`
|
|
15
|
+
: `'${topic}'`;
|
|
16
|
+
const messageUnmarshalling = `${messageModule ?? messageType}.unmarshal(receivedData)`;
|
|
17
|
+
messageType = messageModule ? `${messageModule}.${messageType}` : messageType;
|
|
18
|
+
const { potentialValidatorCreation, potentialValidationFunction } = (0, utils_2.getValidationFunctions)({
|
|
19
|
+
includeValidation,
|
|
20
|
+
messageModule,
|
|
21
|
+
messageType,
|
|
22
|
+
onValidationFail: `return callback({error: new Error(\`Invalid message payload received; $\{JSON.stringify({cause: errors})}\`), messageEvent: undefined});`
|
|
23
|
+
});
|
|
24
|
+
const functionParameters = [
|
|
25
|
+
{
|
|
26
|
+
parameter: `callback`,
|
|
27
|
+
parameterType: `callback: (params: {error?: Error, messageEvent?: ${messageType}}) => void`,
|
|
28
|
+
jsDoc: ' * @param callback to call when receiving events'
|
|
29
|
+
},
|
|
30
|
+
...(channelParameters
|
|
31
|
+
? [
|
|
32
|
+
{
|
|
33
|
+
parameter: `parameters`,
|
|
34
|
+
parameterType: `parameters: ${channelParameters.type}`,
|
|
35
|
+
jsDoc: ' * @param parameters for listening'
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
: []),
|
|
39
|
+
...(channelHeaders
|
|
40
|
+
? [
|
|
41
|
+
{
|
|
42
|
+
parameter: `headers`,
|
|
43
|
+
parameterType: `headers?: ${channelHeaders.type}`,
|
|
44
|
+
jsDoc: ' * @param headers optional headers to include with the EventSource connection'
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
: []),
|
|
48
|
+
{
|
|
49
|
+
parameter: 'options',
|
|
50
|
+
parameterType: `options: {authorization?: string, onClose?: (err?: string) => void, baseUrl: string, headers?: Record<string, string>}`,
|
|
51
|
+
jsDoc: ' * @param options additionally used to handle the event source'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
parameter: 'skipMessageValidation = false',
|
|
55
|
+
parameterType: 'skipMessageValidation?: boolean',
|
|
56
|
+
jsDoc: ' * @param skipMessageValidation turn off runtime validation of incoming messages'
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
const jsDoc = (0, utils_2.renderChannelJSDoc)({
|
|
60
|
+
description,
|
|
61
|
+
deprecated,
|
|
62
|
+
fallbackDescription: `Event source fetch for \`${topic}\``,
|
|
63
|
+
parameters: [
|
|
64
|
+
...functionParameters.map((param) => ({
|
|
65
|
+
jsDoc: param.jsDoc
|
|
66
|
+
})),
|
|
67
|
+
{
|
|
68
|
+
jsDoc: ' * @returns A cleanup function to abort the connection'
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
const code = `${jsDoc}
|
|
73
|
+
function ${functionName}({
|
|
74
|
+
${functionParameters.map((param) => param.parameter).join(', \n ')}
|
|
75
|
+
}: {
|
|
76
|
+
${functionParameters.map((param) => param.parameterType).join(', \n ')}
|
|
77
|
+
}): (() => void) {
|
|
78
|
+
const controller = new AbortController();
|
|
79
|
+
let eventsUrl: string = ${addressToUse};
|
|
80
|
+
const url = \`\${options.baseUrl}/\${eventsUrl}\`
|
|
81
|
+
const requestHeaders: Record<string, string> = {
|
|
82
|
+
...options.headers ?? {},
|
|
83
|
+
Accept: 'text/event-stream'
|
|
84
|
+
}
|
|
85
|
+
if(options.authorization) {
|
|
86
|
+
requestHeaders['authorization'] = \`Bearer \${options?.authorization}\`;
|
|
87
|
+
}
|
|
88
|
+
${channelHeaders
|
|
89
|
+
? `// Add headers from AsyncAPI specification if provided
|
|
90
|
+
if (headers) {
|
|
91
|
+
const asyncApiHeaderData = headers.marshal();
|
|
92
|
+
const parsedAsyncApiHeaders = typeof asyncApiHeaderData === 'string' ? JSON.parse(asyncApiHeaderData) : asyncApiHeaderData;
|
|
93
|
+
for (const [key, value] of Object.entries(parsedAsyncApiHeaders)) {
|
|
94
|
+
if (value !== undefined) {
|
|
95
|
+
requestHeaders[key] = String(value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}`
|
|
99
|
+
: ''}
|
|
100
|
+
${potentialValidatorCreation}
|
|
101
|
+
fetchEventSource(\`\${url}\`, {
|
|
102
|
+
method: 'GET',
|
|
103
|
+
headers: requestHeaders,
|
|
104
|
+
signal: controller.signal,
|
|
105
|
+
onmessage: (ev: EventSourceMessage) => {
|
|
106
|
+
const receivedData = ev.data;
|
|
107
|
+
${potentialValidationFunction}
|
|
108
|
+
const callbackData = ${messageUnmarshalling};
|
|
109
|
+
callback({error: undefined, messageEvent: callbackData});
|
|
110
|
+
},
|
|
111
|
+
onerror: (err) => {
|
|
112
|
+
options.onClose?.(err);
|
|
113
|
+
},
|
|
114
|
+
onclose: () => {
|
|
115
|
+
options.onClose?.();
|
|
116
|
+
},
|
|
117
|
+
async onopen(response: { ok: any; headers: any; status: number }) {
|
|
118
|
+
if (response.ok && response.headers.get('content-type') === EventStreamContentType) {
|
|
119
|
+
return // everything's good
|
|
120
|
+
} else if (response.status >= 400 && response.status < 500 && response.status !== 429) {
|
|
121
|
+
// client-side errors are usually non-retriable:
|
|
122
|
+
callback({error: new Error('Client side error, could not open event connection'), messageEvent: undefined})
|
|
123
|
+
} else {
|
|
124
|
+
callback({error: new Error('Unknown error, could not open event connection'), messageEvent: undefined});
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return () => {
|
|
130
|
+
controller.abort();
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
`;
|
|
134
|
+
return {
|
|
135
|
+
messageType,
|
|
136
|
+
code,
|
|
137
|
+
functionName,
|
|
138
|
+
dependencies: [
|
|
139
|
+
`import { fetchEventSource, EventStreamContentType, EventSourceMessage } from '${additionalProperties.fetchDependency}';`
|
|
140
|
+
],
|
|
141
|
+
functionType: __1.ChannelFunctionTypes.EVENT_SOURCE_FETCH
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
exports.renderFetch = renderFetch;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TypeScriptChannelRenderedFunctionType, TypeScriptChannelsGeneratorContext } from '../../types';
|
|
2
|
+
import { renderExpress } from './express';
|
|
3
|
+
import { renderFetch } from './fetch';
|
|
4
|
+
import { ChannelInterface } from '@asyncapi/parser';
|
|
5
|
+
export { renderFetch, renderExpress };
|
|
6
|
+
export declare function generateEventSourceChannels(context: TypeScriptChannelsGeneratorContext, channel: ChannelInterface, protocolCodeFunctions: Record<string, string[]>, externalProtocolFunctionInformation: Record<string, TypeScriptChannelRenderedFunctionType[]>, dependencies: string[]): Promise<void>;
|