1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.generator = void 0;
|
4 | const utils_1 = require("./utils");
|
5 | const generateApis_1 = require("./generateApis");
|
6 | const generateTypes_1 = require("./generateTypes");
|
7 | const generateConstants_1 = require("./generateConstants");
|
8 | const generateHook_1 = require("./generateHook");
|
9 | function generator(input, config) {
|
10 | var _a, _b, _c;
|
11 | const apis = [];
|
12 | const types = [];
|
13 | let constantsCounter = 0;
|
14 | const constants = [];
|
15 | function getConstantName(value) {
|
16 | const constant = constants.find((_constant) => _constant.value === value);
|
17 | if (constant) {
|
18 | return constant.name;
|
19 | }
|
20 | const name = `_CONSTANT${constantsCounter++}`;
|
21 | constants.push({
|
22 | name,
|
23 | value,
|
24 | });
|
25 | return name;
|
26 | }
|
27 | try {
|
28 | Object.entries(input.paths).forEach(([endPoint, value]) => {
|
29 | const parametersExtended = value.parameters;
|
30 | Object.entries(value).forEach(([method, options]) => {
|
31 | var _a, _b, _c, _d, _e, _f, _g, _h;
|
32 | if (method === "parameters") {
|
33 | return;
|
34 | }
|
35 | const { operationId, security } = options;
|
36 | const allParameters = parametersExtended || options.parameters
|
37 | ? [...(parametersExtended || []), ...(options.parameters || [])]
|
38 | : undefined;
|
39 | const parameters = allParameters === null || allParameters === void 0 ? void 0 : allParameters.map((parameter) => {
|
40 | var _a, _b;
|
41 | const { $ref } = parameter;
|
42 | if ($ref) {
|
43 | const name = $ref.replace("#/components/parameters/", "");
|
44 | return Object.assign(Object.assign({}, (_b = (_a = input.components) === null || _a === void 0 ? void 0 : _a.parameters) === null || _b === void 0 ? void 0 : _b[name]), { $ref, schema: { $ref } });
|
45 | }
|
46 | return parameter;
|
47 | });
|
48 | const serviceName = utils_1.generateServiceName(endPoint, method, operationId, config);
|
49 | const pathParams = utils_1.getPathParams(parameters);
|
50 | const { exist: queryParams, isNullable: isQueryParamsNullable, params: queryParameters, } = utils_1.getParametersInfo(parameters, "query");
|
51 | let queryParamsTypeName = `${utils_1.toPascalCase(serviceName)}QueryParams`;
|
52 | queryParamsTypeName = queryParams && queryParamsTypeName;
|
53 | if (queryParamsTypeName) {
|
54 | const required = config._isSwagger2 ? [] : undefined;
|
55 | types.push({
|
56 | name: queryParamsTypeName,
|
57 | schema: {
|
58 | type: "object",
|
59 | nullable: isQueryParamsNullable,
|
60 | required,
|
61 | properties: queryParameters === null || queryParameters === void 0 ? void 0 : queryParameters.reduce((prev, { name, schema, $ref, required: _required, description }) => {
|
62 | if (_required) {
|
63 | required === null || required === void 0 ? void 0 : required.push(name);
|
64 | }
|
65 | return Object.assign(Object.assign({}, prev), { [name]: Object.assign(Object.assign({}, ($ref ? { $ref } : schema)), { nullable: !_required, description }) });
|
66 | }, {}),
|
67 | },
|
68 | });
|
69 | }
|
70 | const { params: headerParams, isNullable: hasNullableHeaderParams, } = utils_1.getHeaderParams(parameters, config);
|
71 | const requestBody = getBodyContent(options.requestBody);
|
72 | const contentType = Object.keys(((_a = options.requestBody) === null || _a === void 0 ? void 0 : _a.content) ||
|
73 | (((_b = options.requestBody) === null || _b === void 0 ? void 0 : _b.$ref) &&
|
74 | ((_e = (_d = (_c = input.components) === null || _c === void 0 ? void 0 : _c.requestBodies) === null || _d === void 0 ? void 0 : _d[utils_1.getRefName(options.requestBody.$ref)]) === null || _e === void 0 ? void 0 : _e.content)) || {
|
75 | "application/json": null,
|
76 | })[0];
|
77 | const accept = Object.keys(((_g = (_f = options.responses) === null || _f === void 0 ? void 0 : _f[200]) === null || _g === void 0 ? void 0 : _g.content) || {
|
78 | "application/json": null,
|
79 | })[0];
|
80 | const responses = getBodyContent((_h = options.responses) === null || _h === void 0 ? void 0 : _h[200]);
|
81 | let pathParamsRefString = pathParams.reduce((prev, { name }) => `${prev}${name},`, "");
|
82 | pathParamsRefString = pathParamsRefString
|
83 | ? `{${pathParamsRefString}}`
|
84 | : undefined;
|
85 | const additionalAxiosConfig = headerParams
|
86 | ? `{
|
87 | headers:{
|
88 | ...${getConstantName(`{
|
89 | "Content-Type": "${contentType}",
|
90 | Accept: "${accept}",
|
91 |
|
92 | }`)},
|
93 | ...headerParams,
|
94 | },
|
95 | }`
|
96 | : getConstantName(`{
|
97 | headers: {
|
98 | "Content-Type": "${contentType}",
|
99 | Accept: "${accept}",
|
100 | },
|
101 | }`);
|
102 | apis.push({
|
103 | contentType,
|
104 | summary: options.summary,
|
105 | deprecated: options.deprecated,
|
106 | serviceName,
|
107 | queryParamsTypeName,
|
108 | pathParams,
|
109 | requestBody,
|
110 | headerParams,
|
111 | isQueryParamsNullable,
|
112 | isHeaderParamsNullable: hasNullableHeaderParams,
|
113 | responses,
|
114 | pathParamsRefString,
|
115 | endPoint,
|
116 | method: method,
|
117 | security: security
|
118 | ? getConstantName(JSON.stringify(security))
|
119 | : "undefined",
|
120 | additionalAxiosConfig,
|
121 | queryParameters,
|
122 | });
|
123 | });
|
124 | });
|
125 | if ((_a = input === null || input === void 0 ? void 0 : input.components) === null || _a === void 0 ? void 0 : _a.schemas) {
|
126 | types.push(...Object.entries(input.components.schemas).map(([name, schema]) => {
|
127 | return {
|
128 | name,
|
129 | schema,
|
130 | };
|
131 | }));
|
132 | }
|
133 | if ((_b = input === null || input === void 0 ? void 0 : input.components) === null || _b === void 0 ? void 0 : _b.parameters) {
|
134 | types.push(...Object.entries(input.components.parameters).map(([key, value]) => (Object.assign(Object.assign({}, value), { name: key }))));
|
135 | }
|
136 | if ((_c = input === null || input === void 0 ? void 0 : input.components) === null || _c === void 0 ? void 0 : _c.requestBodies) {
|
137 | types.push(...Object.entries(input.components.requestBodies)
|
138 | .map(([name, _requestBody]) => {
|
139 | var _a;
|
140 | return {
|
141 | name: `RequestBody${name}`,
|
142 | schema: (_a = Object.values(_requestBody.content || {})[0]) === null || _a === void 0 ? void 0 : _a.schema,
|
143 | description: _requestBody.description,
|
144 | };
|
145 | })
|
146 | .filter((v) => v.schema));
|
147 | }
|
148 | let code = generateApis_1.generateApis(apis, types, config);
|
149 | code += generateConstants_1.generateConstants(constants);
|
150 | const type = generateTypes_1.generateTypes(types, config);
|
151 | const hooks = config.reactHooks ? generateHook_1.generateHook(apis, types, config) : "";
|
152 | return { code, hooks, type };
|
153 | }
|
154 | catch (error) {
|
155 | console.error({ error });
|
156 | return { code: "", hooks: "", type: "" };
|
157 | }
|
158 | }
|
159 | exports.generator = generator;
|
160 | function getBodyContent(responses) {
|
161 | if (!responses) {
|
162 | return responses;
|
163 | }
|
164 | return responses.content
|
165 | ? Object.values(responses.content)[0].schema
|
166 | : responses.$ref
|
167 | ? {
|
168 | $ref: responses.$ref,
|
169 | }
|
170 | : undefined;
|
171 | }
|
172 |
|
\ | No newline at end of file |