UNPKG

8.48 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.generator = void 0;
4const utils_1 = require("./utils");
5const generateApis_1 = require("./generateApis");
6const generateTypes_1 = require("./generateTypes");
7const generateConstants_1 = require("./generateConstants");
8const generateHook_1 = require("./generateHook");
9function 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}
159exports.generator = generator;
160function 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//# sourceMappingURL=generator.js.map
\No newline at end of file