UNPKG

8.69 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.generateHook = void 0;
4const utils_1 = require("./utils");
5const strings_1 = require("./strings");
6const jsdoc_1 = require("./utilities/jsdoc");
7const allowedPageParametersNames = ["page", "pageno", "pagenumber"];
8function generateHook(apis, types, config) {
9 var _a, _b;
10 let code = strings_1.getHooksImports({
11 hasInfinity: !!((_a = config.useInfiniteQuery) === null || _a === void 0 ? void 0 : _a.length),
12 });
13 try {
14 apis = apis.sort(({ serviceName }, { serviceName: _serviceName }) => utils_1.isAscending(serviceName, _serviceName));
15 const apisCode = apis.reduce((prev, { summary, deprecated, serviceName, queryParamsTypeName, pathParams, requestBody, headerParams, isQueryParamsNullable, isHeaderParamsNullable, responses, method, queryParameters, }) => {
16 var _a, _b, _c;
17 const hookName = `use${utils_1.toPascalCase(serviceName)}`;
18 const hasPaging = (_a = config.useInfiniteQuery) === null || _a === void 0 ? void 0 : _a.find((name) => name.toLowerCase() === serviceName.toLowerCase() ||
19 name.toLowerCase() === hookName.toLowerCase());
20 const isGet = hasPaging ||
21 method === "get" ||
22 ((_b = config.useQuery) === null || _b === void 0 ? void 0 : _b.find((name) => name.toLowerCase() === serviceName.toLowerCase() ||
23 name.toLowerCase() === hookName.toLowerCase()));
24 const getParamsString = (override) => ` ${pathParams.length ? `${pathParams.map(({ name }) => name)},` : ""}
25 ${requestBody ? "requestBody," : ""}
26 ${queryParamsTypeName
27 ? hasPaging && override
28 ? `{
29 ..._param,
30 ...queryParams,
31 },`
32 : "queryParams,"
33 : ""}
34 ${headerParams ? "headerParams," : ""}`;
35 const TData = `${responses ? utils_1.getTsType(responses, config) : "any"}`;
36 const TQueryFnData = `SwaggerResponse<${TData}>`;
37 const TError = "RequestError | Error";
38 const getQueryParamName = (name, nullable = isQueryParamsNullable, isPartial) => queryParamsTypeName
39 ? `${utils_1.getParamString(name, !nullable, queryParamsTypeName, undefined, isPartial)},`
40 : "";
41 const TVariables = `${
42 /** Path parameters */
43 pathParams
44 .map(({ name, required, schema, description }) => utils_1.getDefineParam(name, required, schema, config, description))
45 .join(",")}${pathParams.length > 0 ? "," : ""}${
46 /** Request Body */
47 requestBody
48 ? `${utils_1.getDefineParam("requestBody", true, requestBody, config)},`
49 : ""}${
50 /** Query parameters */
51 getQueryParamName("queryParams")}${
52 /** Header parameters */
53 headerParams
54 ? `${utils_1.getParamString("headerParams", !isHeaderParamsNullable, headerParams)},`
55 : ""}`;
56 const deps = `[${serviceName}.key,${pathParams.length ? `${pathParams.map(({ name }) => name)},` : ""}
57 ${requestBody ? "requestBody," : ""}
58 ${queryParamsTypeName ? "queryParams," : ""}
59 ${headerParams ? "headerParams," : ""}]`;
60 let result = prev +
61 `
62 ${jsdoc_1.getJsdoc({
63 description: summary,
64 deprecated: deprecated ? strings_1.DEPRECATED_WARM_MESSAGE : undefined,
65 })}`;
66 result += `export const ${hookName} =`;
67 if (!isGet) {
68 result += `<TExtra>`;
69 }
70 const params = [
71 `${isGet ? TVariables : ""}`,
72 `options?:${hasPaging
73 ? `UseInfiniteQueryOptions<${TQueryFnData}, ${TError}>`
74 : isGet
75 ? `InternalUseQueryOptions<${TData}>`
76 : `${TVariables
77 ? `InternalUseMutationOptions<${TData}, {${TVariables}}, TExtra>`
78 : `InternalUseMutationOptionsVoid<${TData}, TExtra>`}`},`,
79 `${isGet ? `configOverride?:AxiosRequestConfig` : ""}`,
80 ];
81 result += ` (
82 ${params.join("")}
83 ) => {`;
84 if (isGet) {
85 result += `
86 const { key, fun } = ${hookName}.info(${getParamsString()} configOverride);
87 `;
88 if (hasPaging) {
89 result += `const {
90 data: { pages } = {},
91 data,
92 ...rest
93 } = useInfiniteQuery(
94 key,
95 ({ pageParam = 1 }) =>
96 fun({
97 ${(_c = queryParameters.find(({ name }) => allowedPageParametersNames.includes(name.toLowerCase()))) === null || _c === void 0 ? void 0 : _c.name}:pageParam,
98 }),
99 {
100 getNextPageParam: (_lastPage, allPages) => allPages.length + 1,
101 ...(options as any),
102 },
103 );
104
105 const list = useMemo(() => paginationFlattenData(pages), [pages]);
106 const total = getTotal(pages);
107
108 const hasMore = useHasMore(pages, list, queryParams);
109
110 return {...rest, data, list, hasMore, total}
111 `;
112 }
113 else {
114 result += `return useQuery(
115 key,
116 fun,
117 options
118 )`;
119 }
120 }
121 else {
122 result += `return useMutation((_o)=>{
123 const {${getParamsString()} configOverride } = _o || {};
124
125 return ${serviceName}(
126 ${getParamsString()} configOverride,
127 )
128 },
129 options
130 )`;
131 }
132 result += `
133 }
134 `;
135 if (isGet) {
136 result += `${hookName}.info = (${params
137 .filter((param) => !param.startsWith("options?:"))
138 .join("")}) => {
139 return {
140 key: ${deps} as QueryKey,
141 fun: (${hasPaging ? getQueryParamName("_param", true, true) : ""}) =>
142 ${serviceName}(
143 ${getParamsString(true)}
144 configOverride
145 ),
146 };
147 };`;
148 result += `${hookName}.prefetch = (
149 client: QueryClient,
150 ${params.join("")}) => {
151 const { key, fun } = ${hookName}.info(${getParamsString()} configOverride);
152
153 return client.getQueryData(key)
154 ? Promise.resolve()
155 : client.prefetchQuery(
156 key,
157 ()=>fun(),
158 options
159 );
160 }`;
161 }
162 return result;
163 }, "");
164 code +=
165 types
166 .sort(({ name }, { name: _name }) => utils_1.isAscending(name, _name))
167 .reduce((prev, { name: _name }) => {
168 const name = utils_1.getSchemaName(_name);
169 if (!utils_1.isMatchWholeWord(apisCode, name)) {
170 return prev;
171 }
172 return prev + ` ${name},`;
173 }, "import {") + '} from "./types"\n';
174 code += strings_1.getHooksFunctions({
175 hasInfinity: !!((_b = config.useInfiniteQuery) === null || _b === void 0 ? void 0 : _b.length),
176 });
177 code +=
178 apis.reduce((prev, { serviceName }) => {
179 return prev + ` ${serviceName},`;
180 }, "import {") + '} from "./services"\n';
181 code += `
182 type InternalMutationDefaultParams<TExtra> = {_extraVariables?:TExtra, configOverride?:AxiosRequestConfig}
183 type InternalUseQueryOptions<TData> = UseQueryOptions<SwaggerResponse<TData>,RequestError | Error>;
184
185 type InternalUseMutationOptions<TData, TRequest, TExtra> = UseMutationOptions<
186 SwaggerResponse<TData>,
187 RequestError | Error,
188 TRequest & InternalMutationDefaultParams<TExtra>
189 >;
190
191 type InternalUseMutationOptionsVoid<
192 TData,
193 TExtra
194 > = UseMutationOptions<
195 SwaggerResponse<TData>,
196 RequestError | Error,
197 InternalMutationDefaultParams<TExtra> | void
198 >;
199 `;
200 code += apisCode;
201 return code;
202 }
203 catch (error) {
204 console.error(error);
205 return "";
206 }
207}
208exports.generateHook = generateHook;
209//# sourceMappingURL=generateHook.js.map
\No newline at end of file