react-query-lightbase-codegen 1.1.1 → 1.1.4

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.
@@ -0,0 +1,5 @@
1
+ import { OpenAPIObject } from 'openapi3-ts';
2
+ /**
3
+ * Import and parse the openapi spec from a yaml/json
4
+ */
5
+ export declare const convertSwaggerFile: (data: string, extension: 'yaml' | 'json') => Promise<OpenAPIObject>;
@@ -23,3 +23,4 @@ export const convertSwaggerFile = (data, extension) => {
23
23
  }
24
24
  });
25
25
  };
26
+ //# sourceMappingURL=convertSwaggerFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertSwaggerFile.js","sourceRoot":"","sources":["../src/convertSwaggerFile.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,iBAAiB,CAAC;AAC9C,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,SAA0B,EAA0B,EAAE;IACrG,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACvD,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE;gBAC3D,IAAI,GAAG,EAAE;oBACP,MAAM,CAAC,GAAG,CAAC,CAAC;iBACb;qBAAM;oBACL,aAAa;oBACb,YAAY,CAAC,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC/D,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;iBAC/B;YACH,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { ComponentsObject, OperationObject, ParameterObject, ReferenceObject } from 'openapi3-ts';
2
+ /**
3
+ * Generate a react-query component from openapi operation specs
4
+ */
5
+ export declare const createHook: ({ operation, verb, route, operationIds, parameters, schemasComponents, headerFilters, overrides, }: {
6
+ operation: OperationObject;
7
+ verb: string;
8
+ route: string;
9
+ operationIds: string[];
10
+ parameters: (ReferenceObject | ParameterObject)[] | undefined;
11
+ schemasComponents?: ComponentsObject | undefined;
12
+ headerFilters?: string[] | undefined;
13
+ overrides?: Record<string, {
14
+ type: 'query';
15
+ } | {
16
+ type: 'mutation';
17
+ } | {
18
+ type: 'infiniteQuery';
19
+ infiniteQueryParm: string;
20
+ }> | undefined;
21
+ }) => {
22
+ implementation: string;
23
+ imports: string[];
24
+ queryImports: ("query" | "mutation" | "infiniteQuery")[];
25
+ };
@@ -0,0 +1,395 @@
1
+ import lodash from 'lodash';
2
+ const { get, groupBy } = lodash;
3
+ import { formatDescription, getResReqTypes, isReference, resolveValue } from './utils.js';
4
+ import pasCase from 'case';
5
+ import chalk from 'chalk';
6
+ const { pascal, camel } = pasCase;
7
+ const IdentifierRegexp = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
8
+ /**
9
+ * Return every params in a path
10
+ */
11
+ const getParamsInPath = (path) => {
12
+ let n;
13
+ const output = [];
14
+ const templatePathRegex = /\{(\w+)}/g;
15
+ while ((n = templatePathRegex.exec(path)) !== null) {
16
+ output.push(n[1]);
17
+ }
18
+ return output;
19
+ };
20
+ /**
21
+ * Generate a react-query component from openapi operation specs
22
+ */
23
+ export const createHook = ({ operation, verb, route, operationIds, parameters, schemasComponents, headerFilters, overrides, }) => {
24
+ const { operationId = route.replace('/', '') } = operation;
25
+ if (operationId === '*') {
26
+ throw new Error(`Invalid operationId/Route set for ${verb} ${route}`);
27
+ }
28
+ if (operationIds.includes(operationId)) {
29
+ return { implementation: '', imports: [], queryImports: [] };
30
+ }
31
+ operationIds.push(operationId);
32
+ route = route.replace(/\{/g, '${').replace('//', '/'); // `/pet/{id}` => `/pet/${id}`
33
+ // Remove the last param of the route if we are in the DELETE case
34
+ let lastParamInTheRoute = null;
35
+ const componentName = pascal(operationId);
36
+ const isOk = ([statusCode]) => statusCode.toString().startsWith('2');
37
+ const responseTypes = getResReqTypes(Object.entries(operation.responses).filter(isOk)) || 'void';
38
+ const requestBodyTypes = getResReqTypes([['body', operation.requestBody]]);
39
+ let imports = [responseTypes];
40
+ let queryImports = [];
41
+ const paramsInPath = getParamsInPath(route).filter((param) => !(verb === 'delete' && param === lastParamInTheRoute));
42
+ const { query: queryParams = [], path: pathParams = [], header = [], } = groupBy([...(parameters || []), ...(operation.parameters || [])].map((p) => {
43
+ if (isReference(p)) {
44
+ return get(schemasComponents, p.$ref.replace('#/components/', '').replace('/', '.'));
45
+ }
46
+ else {
47
+ return p;
48
+ }
49
+ }), 'in');
50
+ const headerParams = header.filter((p) => !headerFilters?.includes(p.name));
51
+ let enabled = [];
52
+ // TODO: extract all requestBody or remove useQuery variants
53
+ let enabledParam = '!!params';
54
+ [...queryParams, ...pathParams, ...headerParams].forEach((item) => {
55
+ if (item.required) {
56
+ enabled.push(`["${item.name}"]`);
57
+ if (enabledParam && enabledParam !== '!!params') {
58
+ enabledParam += `&& params['${item.name}'] != null`;
59
+ }
60
+ else {
61
+ enabledParam = `params['${item.name}'] != null`;
62
+ }
63
+ }
64
+ });
65
+ // `!props${enabled.join('== null && !props')}`;
66
+ const paramsTypes = paramsInPath
67
+ .map((p) => {
68
+ try {
69
+ const { name, required, schema } = pathParams.find((i) => i.name === p);
70
+ return `${name}${required ? '' : '?'}: ${resolveValue(schema)}`;
71
+ }
72
+ catch (err) {
73
+ throw new Error(`The path params ${p} can't be found in parameters (${operationId})`);
74
+ }
75
+ })
76
+ .join('; ');
77
+ const queryParamsType = queryParams
78
+ .map((p) => {
79
+ const processedName = IdentifierRegexp.test(p.name) ? p.name : `"${p.name}"`;
80
+ return `${formatDescription(p.description)}
81
+ ${processedName}${p.required ? '' : '?'}: ${resolveValue(p.schema)}`;
82
+ })
83
+ .join(';\n ');
84
+ const headerType = headerParams
85
+ .map((p) => {
86
+ try {
87
+ const { name, required, schema } = headerParams.find((i) => i.name === p.name);
88
+ return `"${name}"${required ? '' : '?'}: ${resolveValue(schema)}`;
89
+ }
90
+ catch (err) {
91
+ throw new Error(`The path params ${p} can't be found in parameters (${operationId})`);
92
+ }
93
+ })
94
+ .join('; ');
95
+ // Retrieve the type of the param for delete verb
96
+ const lastParamInTheRouteDefinition = operation.parameters && lastParamInTheRoute
97
+ ? operation.parameters.find((p) => {
98
+ if (isReference(p)) {
99
+ return false;
100
+ }
101
+ return p.name === lastParamInTheRoute;
102
+ }) // Reference is not possible
103
+ : { schema: { type: 'string' } };
104
+ if (!lastParamInTheRouteDefinition) {
105
+ throw new Error(`The path params ${lastParamInTheRoute} can't be found in parameters (${operationId})`);
106
+ }
107
+ const defaultDescription = `type: ${verb}\noperationId: ${operationId}\nurl: ${route}`;
108
+ const description = formatDescription(operation.summary && operation.description
109
+ ? `${defaultDescription}\n\n${operation.summary}\n\n${operation.description}`
110
+ : `${defaultDescription}`);
111
+ let output = `\n\n${description}`;
112
+ const headerParam = headerType && headerType !== 'void' ? `${headerType};` : '';
113
+ const queryParam = queryParamsType && queryParamsType !== 'void' ? `${queryParamsType}` : '';
114
+ const requestBodyComponent = requestBodyTypes && requestBodyTypes !== 'void' ? `${requestBodyTypes}` : '';
115
+ if (requestBodyComponent) {
116
+ imports.push(requestBodyComponent);
117
+ }
118
+ const isUpdateRequest = ['post', 'patch', 'put'].includes(verb);
119
+ const fetchName = camel(componentName);
120
+ const createQueryHooks = (emptyParams) => {
121
+ const params = emptyParams ? '' : `params: ${componentName}Params,`;
122
+ const key = emptyParams ? '' : `params`;
123
+ const mutationParams = emptyParams ? 'void' : `${componentName}Params`;
124
+ const queryParamType = emptyParams ? '' : `${componentName}Params &`;
125
+ const filterParams = emptyParams
126
+ ? '{ filters }: { filters?: QueryFilters }'
127
+ : `{ params, filters }: { params: ${componentName}Params, filters?: QueryFilters }`;
128
+ const cacheParams = emptyParams
129
+ ? `{updater, options}: {updater: Updater<${responseTypes} | undefined, ${responseTypes} | undefined>, options?: SetDataOptions | undefined}`
130
+ : `{params, updater, options}: {params: ${componentName}Params, updater: Updater<${responseTypes} | undefined, ${responseTypes} | undefined>, options?: SetDataOptions | undefined}`;
131
+ const queryKey = emptyParams
132
+ ? `use${componentName}Query.baseKey()`
133
+ : `[...use${componentName}Query.baseKey(), params]`;
134
+ const props = emptyParams ? `props?` : `{ options = {}, ...params }`;
135
+ const options = emptyParams ? `...props?.options:` : `...options`;
136
+ const createQuery = () => `
137
+ type ${componentName}QueryProps<T = ${responseTypes}> = ${queryParamType} {
138
+ options?: UseQueryOptions<${responseTypes}, AxiosError, T, any>
139
+ }
140
+ export function use${componentName}Query<T = ${responseTypes}>(${props}: ${componentName}QueryProps<T>) {
141
+ return useQuery(use${componentName}Query.queryKey(${key}), async () => ${fetchName}(${key}), { enabled: ${enabledParam}, ${options} });
142
+ }
143
+
144
+ use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
145
+
146
+ use${componentName}Query.queryKey = (${params}): QueryKey => ${queryKey};
147
+
148
+ use${componentName}Query.updateCache = (${cacheParams}) => queryClient.setQueryData<${responseTypes}>(use${componentName}Query.queryKey(${key}), updater, options);
149
+
150
+ use${componentName}Query.getQueryState = (${filterParams})=> queryClient.getQueryState<${responseTypes}>(use${componentName}Query.queryKey(${key}), filters);
151
+
152
+ use${componentName}Query.getQueryData = (${filterParams})=> queryClient.getQueryData<${responseTypes}>(use${componentName}Query.queryKey(${key}), filters);
153
+
154
+ use${componentName}Query.prefetch = (${params}) => queryClient.prefetchQuery<${responseTypes}>(use${componentName}Query.queryKey(${key}), ()=> ${fetchName}(${key}));
155
+
156
+ use${componentName}Query.cancelQueries = (${params}) => queryClient.cancelQueries(use${componentName}Query.queryKey(${key}))
157
+
158
+ use${componentName}Query.invalidate = (${params}) => queryClient.invalidateQueries<${responseTypes}>(use${componentName}Query.queryKey(${key}));
159
+
160
+ use${componentName}Query.refetchStale = (${params}) => queryClient.refetchQueries<${responseTypes}>(use${componentName}Query.queryKey(${key}), { stale: true });
161
+ `;
162
+ const getInfiniteQuery = ({ pageParam }) => `
163
+ type ${componentName}QueryProps<T = ${responseTypes}> = ${queryParamType} {
164
+ options: UseInfiniteQueryOptions<${responseTypes}, AxiosError, T, any>
165
+ }
166
+ export function use${componentName}Query<T = ${responseTypes}>({ options = {}, ...params }: ${componentName}QueryProps<T>) {
167
+ return useInfiniteQuery(use${componentName}Query.queryKey(${key}), async ({ pageParam = 0 }) => ${fetchName}({${pageParam}: pageParam, ...params}), { enabled: ${enabledParam}, ...options });
168
+ }
169
+
170
+ use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
171
+
172
+ use${componentName}Query.queryKey = (${params}): QueryKey => ${queryKey};
173
+
174
+ `;
175
+ const createMutation = () => `
176
+ type ${componentName}MutationProps<T> = {
177
+ options?: UseMutationOptions<${responseTypes}, AxiosError, ${mutationParams}, T>
178
+ }
179
+ export function use${componentName}Mutation<T = ${responseTypes}>(props?: ${componentName}MutationProps<T>) {
180
+ return useMutation(async (${key}) => ${fetchName}(${key}), props?.options)
181
+ };
182
+ `;
183
+ const override = overrides?.[operationId];
184
+ if (override?.type === 'query') {
185
+ console.log(chalk.blue(`⚙️ [${operationId}] has been changed to a useQuery hook`));
186
+ queryImports.push('query');
187
+ return createQuery();
188
+ }
189
+ if (override?.type === 'mutation') {
190
+ queryImports.push('mutation');
191
+ console.log(chalk.blue(`⚙️ [${operationId}] has been changed to a useMutation hook`));
192
+ return createMutation();
193
+ }
194
+ if (override?.type === 'infiniteQuery') {
195
+ console.log(chalk.blue(`⚙️ [${operationId}] has been changed to a useInfiniteQuery hook`));
196
+ queryImports.push('infiniteQuery');
197
+ return getInfiniteQuery({ pageParam: override.infiniteQueryParm });
198
+ }
199
+ if (verb === 'get') {
200
+ queryImports.push('query');
201
+ return createQuery();
202
+ }
203
+ queryImports.push('mutation');
204
+ return createMutation();
205
+ };
206
+ output += createQueryHooks(!requestBodyComponent && !paramsInPath.length && !queryParam && !headerParam);
207
+ const hasRequestBodyArrray = requestBodyComponent && requestBodyComponent.includes('[]');
208
+ const body = hasRequestBodyArrray ? `{body: ${requestBodyComponent}}` : `${requestBodyComponent}`;
209
+ const bodyProps = hasRequestBodyArrray ? `{body, ...props}` : '{props}';
210
+ const generateProps = (props) => {
211
+ return props.map((item) => `["${item.name}"]: props["${item.name}"]`).join(',');
212
+ };
213
+ const generateBodyProps = () => {
214
+ const definitionKey = Object.keys(schemasComponents?.schemas || {}).find((key) => pascal(key) === requestBodyComponent);
215
+ if (definitionKey && !hasRequestBodyArrray) {
216
+ const scheme = schemasComponents?.schemas?.[definitionKey];
217
+ const generatedBodyProps = Object.keys(scheme.properties)
218
+ .map((item) => `["${item}"]: props["${item}"]`)
219
+ .join(',');
220
+ return `const body = {${generatedBodyProps}}`;
221
+ }
222
+ return '';
223
+ };
224
+ if (!requestBodyComponent && !paramsInPath.length && !queryParam && !headerParam) {
225
+ output += `
226
+ const ${fetchName} = async () => {
227
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`);
228
+ return result.data;
229
+ }
230
+ `;
231
+ }
232
+ if (!requestBodyComponent && paramsInPath.length && queryParam && !headerParam) {
233
+ const config = isUpdateRequest ? 'body,{params}' : '{params}';
234
+ output += `
235
+ type ${componentName}Params = {
236
+ ${paramsTypes}
237
+ ${queryParamsType};
238
+ }
239
+
240
+ const ${fetchName} = async (props:${componentName}Params) => {
241
+ const {${paramsInPath.join(', ')}, ...params} = props
242
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, ${config})
243
+ return result.data;
244
+ }`;
245
+ }
246
+ if (!requestBodyComponent && paramsInPath.length && !queryParam && !headerParam) {
247
+ output += `
248
+ type ${componentName}Params = {
249
+ ${paramsTypes}
250
+ }
251
+
252
+ const ${fetchName} = async (props: ${componentName}Params ) => {
253
+ const result = await api.${verb}<${responseTypes}>(\`${route.replace(/\{/g, '{props.')}\`);
254
+ return result.data;
255
+ }
256
+ `;
257
+ }
258
+ if (!requestBodyComponent && !paramsInPath.length && queryParam && !headerParam) {
259
+ const config = isUpdateRequest ? 'null,{params}' : '{params}';
260
+ output += `
261
+ type ${componentName}Params = {
262
+ ${queryParamsType}
263
+ }
264
+
265
+ const ${fetchName} = async (params: ${componentName}Params) => {
266
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, ${config})
267
+ return result.data;
268
+ }
269
+ `;
270
+ }
271
+ if (!requestBodyComponent && !paramsInPath.length && queryParam && headerParam) {
272
+ const config = isUpdateRequest ? 'null,{headers, params: queryParams}' : '{headers, params: queryParams}';
273
+ output += `
274
+ type ${componentName}Params = {
275
+ ${headerParam}
276
+ ${queryParamsType}
277
+ }
278
+ const ${fetchName} = async (props: ${componentName}Params) => {
279
+ const headers = {${generateProps(header)}}
280
+ const queryParams = {${generateProps(queryParams)}}
281
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, ${config})
282
+ return result.data
283
+ }`;
284
+ }
285
+ if (!requestBodyComponent && !paramsInPath.length && !queryParam && headerParam) {
286
+ const config = isUpdateRequest ? 'null,{headers}' : '{headers}';
287
+ output += `
288
+ type ${componentName}Params = {
289
+ ${headerParam}
290
+ };
291
+
292
+ const ${fetchName} = async (headers: ${componentName}Params) => {
293
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, ${config});
294
+ return result.data;
295
+ }
296
+ `;
297
+ }
298
+ if (requestBodyComponent && !paramsInPath.length && !queryParam && !headerParam) {
299
+ output += `
300
+ type ${componentName}Params = ${requestBodyComponent}
301
+
302
+ const ${fetchName} = async (body: ${componentName}Params) => {
303
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, body)
304
+ return result.data
305
+ }
306
+ `;
307
+ }
308
+ if (requestBodyComponent && !paramsInPath.length && queryParam && !headerParam) {
309
+ output += `
310
+ type ${componentName}Params = ${body} & {
311
+ ${queryParamsType}
312
+ }
313
+
314
+ const ${fetchName} = async (${bodyProps}: ${componentName}Params) => {
315
+ ${generateBodyProps()}
316
+ const params = {${generateProps(queryParams)}}
317
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, body, {params})
318
+ return result.data
319
+ }
320
+ `;
321
+ }
322
+ if (requestBodyComponent && !paramsInPath.length && !queryParam && headerParam) {
323
+ output += `
324
+ type ${componentName}Params = ${body} & {
325
+ ${headerParam}
326
+ };
327
+
328
+ const ${fetchName} = async (${bodyProps}: ${componentName}Params) => {
329
+ ${generateBodyProps()}
330
+ const headers = {${generateProps(header)}}
331
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, body, {headers})
332
+ return result.data
333
+ }
334
+ `;
335
+ }
336
+ if (requestBodyComponent && !paramsInPath.length && queryParam && headerParam) {
337
+ output += `
338
+ type ${componentName}Params = ${body} & {
339
+ ${headerParam}
340
+ ${paramsTypes}
341
+ };
342
+
343
+ const ${fetchName} = async (${bodyProps}: ${componentName}Params) => {
344
+ ${generateBodyProps()}
345
+ const headers = {${generateProps(header)}}
346
+ const params = {${generateProps(queryParams)}}
347
+ const result = await api.${verb}<${responseTypes}>(\`${route}\`, body, {headers, params})
348
+ return result.data
349
+ }
350
+ `;
351
+ }
352
+ if (requestBodyComponent && paramsInPath.length && !queryParam && !headerParam) {
353
+ output += `
354
+ type ${componentName}Params = ${body} & {
355
+ ${headerParam}
356
+ ${paramsTypes}
357
+ };
358
+
359
+ const ${fetchName} = async (${bodyProps}: ${componentName}Params) => {
360
+ ${generateBodyProps()}
361
+ const result = await api.${verb}<${responseTypes}>(\`${route.replace(/\{/g, '{props.')}\`, body)
362
+ return result.data
363
+ }
364
+ `;
365
+ }
366
+ if (requestBodyComponent && paramsInPath.length && queryParam && !headerParam) {
367
+ output += `// TODO: NOT SUPPORTED requestBodyComponent && paramsInPath && queryParam)`;
368
+ }
369
+ if (requestBodyComponent && paramsInPath.length && queryParam && headerParam) {
370
+ output += `// TODO: NOT SUPPORTED requestBodyComponent && paramsInPath && queryParam && headerParam)`;
371
+ }
372
+ if (!requestBodyComponent && paramsInPath.length && !queryParam && headerParam) {
373
+ const config = isUpdateRequest ? 'null,{headers}' : '{headers}';
374
+ output += `
375
+ type ${componentName}Params = {
376
+ ${headerParam}
377
+ ${paramsTypes}
378
+ };
379
+
380
+ const ${fetchName} = async (props: ${componentName}Params) => {
381
+ const headers = {${generateProps(header)}}
382
+ const result = await api.${verb}<${responseTypes}>(\`${route.replace(/\{/g, '{props.')}\`, ${config})
383
+ return result.data
384
+ }
385
+ `;
386
+ }
387
+ if (!requestBodyComponent && paramsInPath.length && queryParam && headerParam) {
388
+ output += `// TODO: NOT SUPPORTED (paramsInPath && queryParam && headerParam)`;
389
+ }
390
+ if (requestBodyComponent && paramsInPath.length && !queryParam && headerParam) {
391
+ output += `// TODO: NOT SUPPORTED (requestBodyComponent && paramsInPath && headerParam)`;
392
+ }
393
+ return { implementation: output, imports, queryImports };
394
+ };
395
+ //# sourceMappingURL=generateHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateHooks.js","sourceRoot":"","sources":["../src/generateHooks.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;AAShC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,OAAO,MAAM,MAAM,CAAC;AAC3B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAElC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAEtD;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;IACvC,IAAI,CAAC,CAAC;IACN,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,iBAAiB,GAAG,WAAW,CAAC;IACtC,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,SAAS,EACT,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,SAAS,GAaV,EAAE,EAAE;IACH,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IAC3D,IAAI,WAAW,KAAK,GAAG,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;KACvE;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACtC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;KAC9D;IACD,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,8BAA8B;IAErF,kEAAkE;IAClE,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAE9C,MAAM,aAAa,GAAG,MAAM,CAAC,WAAY,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAA6C,EAAE,EAAE,CACxE,UAAU,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;IACjG,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC;IAE5E,IAAI,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9B,IAAI,YAAY,GAAG,EAAmD,CAAC;IAEvE,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,mBAAmB,CAAC,CACjE,CAAC;IAEF,MAAM,EACJ,KAAK,EAAE,WAAW,GAAG,EAAE,EACvB,IAAI,EAAE,UAAU,GAAG,EAAE,EACrB,MAAM,GAAG,EAAE,GACZ,GAAG,OAAO,CACT,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAkB,CAAC,CAAC,EAAE,EAAE;QAClF,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;YAClB,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;SACtF;aAAM;YACL,OAAO,CAAC,CAAC;SACV;IACH,CAAC,CAAC,EACF,IAAI,CACL,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE5E,IAAI,OAAO,GAAG,EAAS,CAAC;IAExB,4DAA4D;IAC5D,IAAI,YAAY,GAAG,UAAU,CAAC;IAC9B,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YACjC,IAAI,YAAY,IAAI,YAAY,KAAK,UAAU,EAAE;gBAC/C,YAAY,IAAI,cAAc,IAAI,CAAC,IAAI,YAAY,CAAC;aACrD;iBAAM;gBACL,YAAY,GAAG,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC;aACjD;SACF;IACH,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAEhD,MAAM,WAAW,GAAG,YAAY;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAE,CAAC;YACzE,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,MAAO,CAAC,EAAE,CAAC;SAClE;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,kCAAkC,WAAW,GAAG,CAAC,CAAC;SACvF;IACH,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,eAAe,GAAG,WAAW;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7E,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC;QACxC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,MAAO,CAAC,EAAE,CAAC;IACxE,CAAC,CAAC;SACD,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjB,MAAM,UAAU,GAAG,YAAY;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAE,CAAC;YAChF,OAAO,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,MAAO,CAAC,EAAE,CAAC;SACpE;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,kCAAkC,WAAW,GAAG,CAAC,CAAC;SACvF;IACH,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,iDAAiD;IACjD,MAAM,6BAA6B,GACjC,SAAS,CAAC,UAAU,IAAI,mBAAmB;QACzC,CAAC,CAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;gBAClB,OAAO,KAAK,CAAC;aACd;YACD,OAAO,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC;QACxC,CAAC,CAAiC,CAAC,4BAA4B;QACjE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;IAErC,IAAI,CAAC,6BAA6B,EAAE;QAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,mBAAmB,kCAAkC,WAAW,GAAG,CAAC,CAAC;KACzG;IAED,MAAM,kBAAkB,GAAG,SAAS,IAAI,kBAAkB,WAAW,UAAU,KAAK,EAAE,CAAC;IAEvF,MAAM,WAAW,GAAG,iBAAiB,CACnC,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,WAAW;QACxC,CAAC,CAAC,GAAG,kBAAkB,OAAO,SAAS,CAAC,OAAO,OAAO,SAAS,CAAC,WAAW,EAAE;QAC7E,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAC5B,CAAC;IAEF,IAAI,MAAM,GAAG,OAAO,WAAW,EAAE,CAAC;IAElC,MAAM,WAAW,GAAG,UAAU,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,UAAU,GAAG,eAAe,IAAI,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,oBAAoB,GAAG,gBAAgB,IAAI,gBAAgB,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1G,IAAI,oBAAoB,EAAE;QACxB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KACpC;IAED,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEhE,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;IAEvC,MAAM,gBAAgB,GAAG,CAAC,WAAqB,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,aAAa,SAAS,CAAC;QACpE,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxC,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,QAAQ,CAAC;QACvE,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,UAAU,CAAC;QACrE,MAAM,YAAY,GAAG,WAAW;YAC9B,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,kCAAkC,aAAa,kCAAkC,CAAC;QACtF,MAAM,WAAW,GAAG,WAAW;YAC7B,CAAC,CAAC,yCAAyC,aAAa,iBAAiB,aAAa,sDAAsD;YAC5I,CAAC,CAAC,wCAAwC,aAAa,4BAA4B,aAAa,iBAAiB,aAAa,sDAAsD,CAAC;QACvL,MAAM,QAAQ,GAAG,WAAW;YAC1B,CAAC,CAAC,MAAM,aAAa,iBAAiB;YACtC,CAAC,CAAC,UAAU,aAAa,0BAA0B,CAAC;QAEtD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC;QACrE,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC;QAElE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;WACnB,aAAa,kBAAkB,aAAa,OAAO,cAAc;kCAC1C,aAAa;;yBAEtB,aAAa,aAAa,aAAa,KAAK,KAAK,KAAK,aAAa;2BACjE,aAAa,kBAAkB,GAAG,kBAAkB,SAAS,IAAI,GAAG,iBAAiB,YAAY,KAAK,OAAO;;;SAG/H,aAAa,qCAAqC,aAAa,CAAC,WAAW,EAAE;;SAE7E,aAAa,qBAAqB,MAAM,kBAAkB,QAAQ;;SAElE,aAAa,wBAAwB,WAAW,iCAAiC,aAAa,QAAQ,aAAa,kBAAkB,GAAG;;SAExI,aAAa,0BAA0B,YAAY,iCAAiC,aAAa,QAAQ,aAAa,kBAAkB,GAAG;;SAE3I,aAAa,yBAAyB,YAAY,gCAAgC,aAAa,QAAQ,aAAa,kBAAkB,GAAG;;SAEzI,aAAa,qBAAqB,MAAM,kCAAkC,aAAa,QAAQ,aAAa,kBAAkB,GAAG,WAAW,SAAS,IAAI,GAAG;;SAE5J,aAAa,0BAA0B,MAAM,qCAAqC,aAAa,kBAAkB,GAAG;;SAEpH,aAAa,uBAAuB,MAAM,sCAAsC,aAAa,QAAQ,aAAa,kBAAkB,GAAG;;SAEvI,aAAa,yBAAyB,MAAM,mCAAmC,aAAa,QAAQ,aAAa,kBAAkB,GAAG;GAC5I,CAAC;QAEA,MAAM,gBAAgB,GAAG,CAAC,EAAE,SAAS,EAAyB,EAAE,EAAE,CAAC;WAC5D,aAAa,kBAAkB,aAAa,OAAO,cAAc;yCACnC,aAAa;;yBAE7B,aAAa,aAAa,aAAa,kCAAkC,aAAa;mCAC5E,aAAa,kBAAkB,GAAG,mCAAmC,SAAS,KAAK,SAAS,wCAAwC,YAAY;;;SAG1K,aAAa,qCAAqC,aAAa,CAAC,WAAW,EAAE;;SAE7E,aAAa,qBAAqB,MAAM,kBAAkB,QAAQ;;GAExE,CAAC;QAEA,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;WACtB,aAAa;qCACa,aAAa,iBAAiB,cAAc;;yBAExD,aAAa,gBAAgB,aAAa,aAAa,aAAa;kCAC3D,GAAG,QAAQ,SAAS,IAAI,GAAG;;KAExD,CAAC;QAEF,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,IAAI,KAAK,OAAO,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,WAAW,uCAAuC,CAAC,CAAC,CAAC;YACpF,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,WAAW,EAAE,CAAC;SACtB;QAED,IAAI,QAAQ,EAAE,IAAI,KAAK,UAAU,EAAE;YACjC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,WAAW,0CAA0C,CAAC,CAAC,CAAC;YACvF,OAAO,cAAc,EAAE,CAAC;SACzB;QAED,IAAI,QAAQ,EAAE,IAAI,KAAK,eAAe,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,WAAW,+CAA+C,CAAC,CAAC,CAAC;YAC5F,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,OAAO,gBAAgB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;SACpE;QAED,IAAI,IAAI,KAAK,KAAK,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,WAAW,EAAE,CAAC;SACtB;QAED,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,IAAI,gBAAgB,CAAC,CAAC,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,CAAC;IAEzG,MAAM,oBAAoB,GAAG,oBAAoB,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC,UAAU,oBAAoB,GAAG,CAAC,CAAC,CAAC,GAAG,oBAAoB,EAAE,CAAC;IAClG,MAAM,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAE,EAAE;QACjD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CACtE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAC9C,CAAC;QACF,IAAI,aAAa,IAAI,CAAC,oBAAoB,EAAE;YAC1C,MAAM,MAAM,GAAG,iBAAiB,EAAE,OAAO,EAAE,CAAC,aAAa,CAAiB,CAAC;YAC3E,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAA0B,CAAC;iBACtE,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,IAAI,cAAc,IAAI,IAAI,CAAC;iBACtD,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,iBAAiB,kBAAkB,GAAG,CAAC;SAC/C;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE;QAChF,MAAM,IAAI;YACF,SAAS;iCACY,IAAI,IAAI,aAAa,OAAO,KAAK;;;KAG7D,CAAC;KACH;IAED,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE;QAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9D,MAAM,IAAI;WACH,aAAa;QAChB,WAAW;QACX,eAAe;;;aAGV,SAAS,mBAAmB,aAAa;eACvC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;iCACL,IAAI,IAAI,aAAa,OAAO,KAAK,OAAO,MAAM;;MAEzE,CAAC;KACJ;IAED,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE;QAC/E,MAAM,IAAI;WACH,aAAa;QAChB,WAAW;;;YAGP,SAAS,oBAAoB,aAAa;iCACrB,IAAI,IAAI,aAAa,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;;;KAGvF,CAAC;KACH;IAED,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE;QAC/E,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9D,MAAM,IAAI;WACH,aAAa;QAChB,eAAe;;;YAGX,SAAS,qBAAqB,aAAa;iCACtB,IAAI,IAAI,aAAa,OAAO,KAAK,OAAO,MAAM;;;KAG1E,CAAC;KACH;IACD,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,EAAE;QAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,gCAAgC,CAAC;QAC1G,MAAM,IAAI;aACD,aAAa;UAChB,WAAW;UACX,eAAe;;cAEX,SAAS,oBAAoB,aAAa;2BAC7B,aAAa,CAAC,MAAM,CAAC;+BACjB,aAAa,CAAC,WAAW,CAAC;mCACtB,IAAI,IAAI,aAAa,OAAO,KAAK,OAAO,MAAM;;QAEzE,CAAC;KACN;IACD,IAAI,CAAC,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,WAAW,EAAE;QAC/E,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;QAChE,MAAM,IAAI;aACD,aAAa;UAChB,WAAW;;;cAGP,SAAS,sBAAsB,aAAa;mCACvB,IAAI,IAAI,aAAa,OAAO,KAAK,OAAO,MAAM;;;OAG1E,CAAC;KACL;IAED,IAAI,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE;QAC/E,MAAM,IAAI;WACH,aAAa,YAAY,oBAAoB;;YAE5C,SAAS,mBAAmB,aAAa;iCACpB,IAAI,IAAI,aAAa,OAAO,KAAK;;;OAG3D,CAAC;KACL;IAED,IAAI,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE;QAC9E,MAAM,IAAI;aACD,aAAa,aAAa,IAAI;UACjC,eAAe;;;aAGZ,SAAS,aAAa,SAAS,KAAK,aAAa;QACtD,iBAAiB,EAAE;yBACF,aAAa,CAAC,WAAW,CAAC;iCAClB,IAAI,IAAI,aAAa,OAAO,KAAK;;;KAG7D,CAAC;KACH;IAED,IAAI,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,WAAW,EAAE;QAC9E,MAAM,IAAI;WACH,aAAa,aAAa,IAAI;QACjC,WAAW;;;YAGP,SAAS,aAAa,SAAS,KAAK,aAAa;QACrD,iBAAiB,EAAE;yBACF,aAAa,CAAC,MAAM,CAAC;iCACb,IAAI,IAAI,aAAa,OAAO,KAAK;;;KAG7D,CAAC;KACH;IAED,IAAI,oBAAoB,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,EAAE;QAC7E,MAAM,IAAI;WACH,aAAa,YAAY,IAAI;QAChC,WAAW;QACX,WAAW;;;YAGP,SAAS,aAAa,SAAS,KAAK,aAAa;QACrD,iBAAiB,EAAE;yBACF,aAAa,CAAC,MAAM,CAAC;yBACrB,aAAa,CAAC,WAAW,CAAC;iCAClB,IAAI,IAAI,aAAa,OAAO,KAAK;;;KAG7D,CAAC;KACH;IAED,IAAI,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE;QAC9E,MAAM,IAAI;WACH,aAAa,YAAY,IAAI;QAChC,WAAW;QACX,WAAW;;;YAGP,SAAS,aAAa,SAAS,KAAK,aAAa;QACrD,iBAAiB,EAAE;iCACM,IAAI,IAAI,aAAa,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;;;KAGvF,CAAC;KACH;IAED,IAAI,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE;QAC7E,MAAM,IAAI,4EAA4E,CAAC;KACxF;IAED,IAAI,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,EAAE;QAC5E,MAAM,IAAI,2FAA2F,CAAC;KACvG;IAED,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,WAAW,EAAE;QAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;QAChE,MAAM,IAAI;WACH,aAAa;QAChB,WAAW;QACX,WAAW;;;YAGP,SAAS,oBAAoB,aAAa;yBAC7B,aAAa,CAAC,MAAM,CAAC;iCACb,IAAI,IAAI,aAAa,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,MAAM;;;KAGpG,CAAC;KACH;IAED,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,EAAE;QAC7E,MAAM,IAAI,oEAAoE,CAAC;KAChF;IAED,IAAI,oBAAoB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,WAAW,EAAE;QAC7E,MAAM,IAAI,8EAA8E,CAAC;KAC1F;IAED,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC3D,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const generateImports: ({ schemaName, apiDirectory, queryClientDir, schemaImports, queryImports, }: {
2
+ apiDirectory: string;
3
+ queryClientDir: string;
4
+ schemaName: string;
5
+ schemaImports: string[];
6
+ queryImports: ('query' | 'mutation' | 'infiniteQuery')[];
7
+ }) => string;
@@ -0,0 +1,28 @@
1
+ export const generateImports = ({ schemaName, apiDirectory, queryClientDir, schemaImports, queryImports, }) => {
2
+ const importTypes = schemaImports.join(',');
3
+ let imports = [];
4
+ if (queryImports.includes('query')) {
5
+ imports = [...imports, 'useQuery', 'UseQueryOptions', 'QueryKey', 'SetDataOptions', 'QueryFilters'];
6
+ }
7
+ if (queryImports.includes('infiniteQuery')) {
8
+ imports = [...imports, 'useInfiniteQuery', 'UseInfiniteQueryOptions', 'QueryKey'];
9
+ }
10
+ if (queryImports.includes('mutation')) {
11
+ imports = [...imports, 'UseMutationOptions', 'useMutation'];
12
+ }
13
+ const importString = [...new Set(imports)].join(',');
14
+ return `
15
+ import {
16
+ ${importString}
17
+ } from '@tanstack/react-query';
18
+
19
+ import { AxiosError } from 'axios';
20
+ import { api } from '${apiDirectory}';
21
+ import { queryClient } from '${queryClientDir}';
22
+
23
+ import {${importTypes}} from './${schemaName}'
24
+
25
+ type Updater<TInput, TOutput> = TOutput | ((input: TInput) => TOutput);
26
+ `;
27
+ };
28
+ //# sourceMappingURL=generateImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateImports.js","sourceRoot":"","sources":["../src/generateImports.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,UAAU,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,GAOb,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,EAAc,CAAC;IAC7B,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClC,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;KACrG;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;QAC1C,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,UAAU,CAAC,CAAC;KACnF;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACrC,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,oBAAoB,EAAE,aAAa,CAAC,CAAC;KAC7D;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErD,OAAO;;MAEH,YAAY;;;;yBAIO,YAAY;iCACJ,cAAc;;YAEnC,WAAW,aAAa,UAAU;;;GAG3C,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { OpenAPIObject } from 'openapi3-ts';
2
+ /**
3
+ * Extract all types from #/components/schemas
4
+ */
5
+ export declare const generateSchemas: ({ spec }: {
6
+ spec: OpenAPIObject;
7
+ }) => string;
@@ -9,8 +9,7 @@ import { getDocs, getResReqTypes } from './utils.js';
9
9
  */
10
10
  const generateInterface = (name, schema) => {
11
11
  const scalar = getScalar(schema);
12
- return `
13
- ${formatDescription(schema.description)}
12
+ return `${formatDescription(schema.description)}
14
13
  export type ${pascal(name)} = ${scalar}
15
14
  `;
16
15
  };
@@ -48,13 +47,13 @@ const generateRequestBodiesDefinition = (requestBodies = {}) => {
48
47
  const type = getResReqTypes([['', requestBody]]);
49
48
  const isEmptyInterface = type === '{}';
50
49
  if (isEmptyInterface) {
51
- return `${doc}export type ${pascal(name)}RequestBody = ${type}`;
50
+ return `${doc}\nexport type ${pascal(name)}RequestBody = ${type}`;
52
51
  }
53
52
  else if (type.includes('{') && !type.includes('|') && !type.includes('&')) {
54
- return `${doc}export type ${pascal(name)}RequestBody = ${type}`;
53
+ return `${doc}\nexport type ${pascal(name)}RequestBody = ${type}`;
55
54
  }
56
55
  else {
57
- return `${doc}export type ${pascal(name)}RequestBody = ${type};`;
56
+ return `${doc}\nexport type ${pascal(name)}RequestBody = ${type};`;
58
57
  }
59
58
  })
60
59
  .join('\n\n') +
@@ -90,8 +89,9 @@ const generateResponsesDefinition = (responses = {}) => {
90
89
  * Extract all types from #/components/schemas
91
90
  */
92
91
  export const generateSchemas = ({ spec }) => {
93
- const schemaOutput = generateSchemasDefinition(spec.components?.schemas) +
92
+ const schemaOutput = generateRequestBodiesDefinition(spec.components?.requestBodies) +
94
93
  generateResponsesDefinition(spec.components?.responses) +
95
- generateRequestBodiesDefinition(spec.components?.requestBodies);
94
+ generateSchemasDefinition(spec.components?.schemas);
96
95
  return schemaOutput;
97
96
  };
97
+ //# sourceMappingURL=generateSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateSchemas.js","sourceRoot":"","sources":["../src/generateSchemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare function importSpecs({ sourceDirectory, exportDirectory, apiDirectory, queryClientDir, headerFilters, overrides, }: {
2
+ sourceDirectory: string;
3
+ exportDirectory: string;
4
+ apiDirectory: string;
5
+ queryClientDir: string;
6
+ headerFilters?: string[];
7
+ overrides?: Record<string, {
8
+ type: 'query';
9
+ } | {
10
+ type: 'mutation';
11
+ } | {
12
+ type: 'infiniteQuery';
13
+ infiniteQueryParm: string;
14
+ }>;
15
+ }): void;