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