react-query-lightbase-codegen 0.2.0 → 0.5.0

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.
@@ -3,212 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.importOpenApi = exports.generateRestfulComponent = exports.formatDescription = exports.generateResponsesDefinition = exports.generateRequestBodiesDefinition = exports.generateSchemasDefinition = exports.resolveDiscriminator = exports.generateInterface = exports.getParamsInPath = exports.getResReqTypes = exports.resolveValue = exports.getObject = exports.getArray = exports.getRef = exports.getScalar = exports.isReference = void 0;
7
- const case_1 = require("case");
8
- const get_1 = __importDefault(require("lodash/get"));
9
- const groupBy_1 = __importDefault(require("lodash/groupBy"));
10
- const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
6
+ exports.importOpenApi = void 0;
11
7
  const set_1 = __importDefault(require("lodash/set"));
12
- const uniq_1 = __importDefault(require("lodash/uniq"));
13
- const swagger2openapi_1 = __importDefault(require("swagger2openapi"));
14
- const yaml = require('js-yaml');
15
- const IdentifierRegexp = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
16
- /**
17
- * Import and parse the openapi spec from a yaml/json
18
- */
19
- const importSpecs = (data, extension) => {
20
- const schema = extension === 'yaml' ? yaml.load(data) : JSON.parse(data);
21
- return new Promise((resolve, reject) => {
22
- if (!schema.openapi || !schema.openapi.startsWith('3.')) {
23
- swagger2openapi_1.default.convertObj(schema, {}, (err, convertedObj) => {
24
- if (err) {
25
- reject(err);
26
- }
27
- else {
28
- // @ts-ignore
29
- convertedObj.openapi.basePath = convertedObj.original.basePath;
30
- resolve(convertedObj.openapi);
31
- }
32
- });
33
- }
34
- else {
35
- resolve(schema);
36
- }
37
- });
38
- };
39
- /**
40
- * Discriminator helper for `ReferenceObject`
41
- */
42
- const isReference = (property) => {
43
- return Boolean(property.$ref);
44
- };
45
- exports.isReference = isReference;
46
- /**
47
- * Return the typescript equivalent of open-api data type
48
- */
49
- const getScalar = (item) => {
50
- const nullable = item.nullable ? ' | null' : '';
51
- switch (item.type) {
52
- case 'number':
53
- case 'integer':
54
- return 'number' + nullable;
55
- case 'boolean':
56
- return 'boolean' + nullable;
57
- case 'array':
58
- return (0, exports.getArray)(item) + nullable;
59
- case 'string':
60
- return (item.enum ? `"${item.enum.join(`" | "`)}"` : 'string') + nullable;
61
- case 'object':
62
- default:
63
- return (0, exports.getObject)(item) + nullable;
64
- }
65
- };
66
- exports.getScalar = getScalar;
67
- /**
68
- * Return the output type from the $ref
69
- */
70
- const getRef = ($ref) => {
71
- if ($ref.startsWith('#/components/schemas')) {
72
- return (0, case_1.pascal)($ref.replace('#/components/schemas/', ''));
73
- }
74
- else if ($ref.startsWith('#/components/responses')) {
75
- return (0, case_1.pascal)($ref.replace('#/components/responses/', '')) + 'Response';
76
- }
77
- else if ($ref.startsWith('#/components/parameters')) {
78
- return (0, case_1.pascal)($ref.replace('#/components/parameters/', '')) + 'Parameter';
79
- }
80
- else if ($ref.startsWith('#/components/requestBodies')) {
81
- return (0, case_1.pascal)($ref.replace('#/components/requestBodies/', '')) + 'RequestBody';
82
- }
83
- else {
84
- throw new Error('This library only resolve $ref that are include into `#/components/*` for now');
85
- }
86
- };
87
- exports.getRef = getRef;
88
- /**
89
- * Return the output type from an array
90
- */
91
- const getArray = (item) => {
92
- if (item.items) {
93
- if (!(0, exports.isReference)(item.items) && (item.items.oneOf || item.items.allOf || item.items.enum)) {
94
- return `(${(0, exports.resolveValue)(item.items)})[]`;
95
- }
96
- else {
97
- return `${(0, exports.resolveValue)(item.items)}[]`;
98
- }
99
- }
100
- else {
101
- throw new Error('All arrays must have an `items` key define');
102
- }
103
- };
104
- exports.getArray = getArray;
105
- /**
106
- * Return the output type from an object
107
- */
108
- const getObject = (item) => {
109
- if ((0, exports.isReference)(item)) {
110
- return (0, exports.getRef)(item.$ref);
111
- }
112
- if (item.allOf) {
113
- return item.allOf.map(exports.resolveValue).join(' & ');
114
- }
115
- if (item.oneOf) {
116
- return item.oneOf.map(exports.resolveValue).join(' | ');
117
- }
118
- if (!item.type && !item.properties && !item.additionalProperties) {
119
- return '{}';
120
- }
121
- // Free form object (https://swagger.io/docs/specification/data-models/data-types/#free-form)
122
- if (item.type === 'object' &&
123
- !item.properties &&
124
- (!item.additionalProperties || item.additionalProperties === true || (0, isEmpty_1.default)(item.additionalProperties))) {
125
- return '{[key: string]: any}';
126
- }
127
- // Consolidation of item.properties & item.additionalProperties
128
- let output = '{\n';
129
- if (item.properties) {
130
- output += Object.entries(item.properties)
131
- .map(([key, prop]) => {
132
- const doc = (0, exports.isReference)(prop) ? '' : (0, exports.formatDescription)(prop.description, 2);
133
- const isRequired = (item.required || []).includes(key);
134
- const processedKey = IdentifierRegexp.test(key) ? key : `"${key}"`;
135
- return `${doc}\n${processedKey}${isRequired ? '' : '?'}: ${(0, exports.resolveValue)(prop)};`;
136
- })
137
- .join('\n');
138
- }
139
- if (item.additionalProperties) {
140
- if (item.properties) {
141
- output += '\n';
142
- }
143
- output += `} & { [key: string]: ${item.additionalProperties === true ? 'any' : (0, exports.resolveValue)(item.additionalProperties)}`;
144
- }
145
- if (item.properties || item.additionalProperties) {
146
- if (output === '{\n') {
147
- return '{}';
148
- }
149
- return output + '\n}';
150
- }
151
- return item.type === 'object' ? '{[key: string]: any}' : 'any';
152
- };
153
- exports.getObject = getObject;
154
- /**
155
- * Resolve the value of a schema object to a proper type definition.
156
- */
157
- const resolveValue = (schema) => (0, exports.isReference)(schema) ? (0, exports.getRef)(schema.$ref) : (0, exports.getScalar)(schema);
158
- exports.resolveValue = resolveValue;
159
- /**
160
- * Extract responses / request types from open-api specs
161
- */
162
- const getResReqTypes = (responsesOrRequests) => (0, uniq_1.default)(responsesOrRequests.map(([_, res]) => {
163
- if (!res) {
164
- return 'void';
165
- }
166
- if ((0, exports.isReference)(res)) {
167
- return (0, exports.getRef)(res.$ref);
168
- }
169
- if (res.content) {
170
- for (let contentType of Object.keys(res.content)) {
171
- if (contentType.startsWith('application/json') ||
172
- contentType.startsWith('application/octet-stream')) {
173
- const schema = res.content[contentType].schema;
174
- return (0, exports.resolveValue)(schema);
175
- }
176
- }
177
- return 'void';
178
- }
179
- return 'void';
180
- })).join(' | ');
181
- exports.getResReqTypes = getResReqTypes;
182
- /**
183
- * Return every params in a path
184
- *
185
- * @example
186
- * ```
187
- * getParamsInPath("/pet/{category}/{name}/");
188
- * // => ["category", "name"]
189
- * ```
190
- */
191
- const getParamsInPath = (path) => {
192
- let n;
193
- const output = [];
194
- const templatePathRegex = /\{(\w+)}/g;
195
- while ((n = templatePathRegex.exec(path)) !== null) {
196
- output.push(n[1]);
197
- }
198
- return output;
199
- };
200
- exports.getParamsInPath = getParamsInPath;
201
- /**
202
- * Generate the interface string
203
- */
204
- const generateInterface = (name, schema) => {
205
- const scalar = (0, exports.getScalar)(schema);
206
- return `
207
- ${(0, exports.formatDescription)(schema.description)}
208
- export type ${(0, case_1.pascal)(name)} = ${scalar}
209
- `;
210
- };
211
- exports.generateInterface = generateInterface;
8
+ const generateHooks_1 = require("./generateHooks");
9
+ const generateImports_1 = require("./generateImports");
10
+ const getResReqTypes_1 = require("./getResReqTypes");
212
11
  /**
213
12
  * Propagate every `discriminator.propertyName` mapping to the original ref
214
13
  *
@@ -217,7 +16,7 @@ exports.generateInterface = generateInterface;
217
16
  const resolveDiscriminator = (specs) => {
218
17
  if (specs.components && specs.components.schemas) {
219
18
  Object.values(specs.components.schemas).forEach((schema) => {
220
- if ((0, exports.isReference)(schema) || !schema.discriminator || !schema.discriminator.mapping) {
19
+ if ((0, getResReqTypes_1.isReference)(schema) || !schema.discriminator || !schema.discriminator.mapping) {
221
20
  return;
222
21
  }
223
22
  const { mapping, propertyName } = schema.discriminator;
@@ -230,766 +29,11 @@ const resolveDiscriminator = (specs) => {
230
29
  });
231
30
  }
232
31
  };
233
- exports.resolveDiscriminator = resolveDiscriminator;
234
- /**
235
- * Extract all types from #/components/schemas
236
- */
237
- const generateSchemasDefinition = (schemas = {}) => {
238
- if ((0, isEmpty_1.default)(schemas)) {
239
- return '';
240
- }
241
- return (Object.entries(schemas)
242
- .map(([name, schema]) => !(0, exports.isReference)(schema) &&
243
- (!schema.type || schema.type === 'object') &&
244
- !schema.allOf &&
245
- !schema.oneOf &&
246
- !(0, exports.isReference)(schema) &&
247
- !schema.nullable
248
- ? (0, exports.generateInterface)(name, schema)
249
- : `${(0, exports.formatDescription)((0, exports.isReference)(schema) ? undefined : schema.description)}export type ${(0, case_1.pascal)(name)} = ${(0, exports.resolveValue)(schema)};`)
250
- .join('\n\n') + '\n');
251
- };
252
- exports.generateSchemasDefinition = generateSchemasDefinition;
253
- /**
254
- * Extract all types from #/components/requestBodies
255
- */
256
- const generateRequestBodiesDefinition = (requestBodies = {}) => {
257
- if ((0, isEmpty_1.default)(requestBodies)) {
258
- return '';
259
- }
260
- return ('\n' +
261
- Object.entries(requestBodies)
262
- .map(([name, requestBody]) => {
263
- const doc = (0, exports.isReference)(requestBody) ? '' : (0, exports.formatDescription)(requestBody.description);
264
- const type = (0, exports.getResReqTypes)([['', requestBody]]);
265
- const isEmptyInterface = type === '{}';
266
- if (isEmptyInterface) {
267
- return `export type ${(0, case_1.pascal)(name)}RequestBody = ${type}`;
268
- }
269
- else if (type.includes('{') && !type.includes('|') && !type.includes('&')) {
270
- return `${doc}export type ${(0, case_1.pascal)(name)}RequestBody = ${type}`;
271
- }
272
- else {
273
- return `${doc}export type ${(0, case_1.pascal)(name)}RequestBody = ${type};`;
274
- }
275
- })
276
- .join('\n\n') +
277
- '\n');
278
- };
279
- exports.generateRequestBodiesDefinition = generateRequestBodiesDefinition;
280
- /**
281
- * Extract all types from #/components/responses
282
- */
283
- const generateResponsesDefinition = (responses = {}) => {
284
- if ((0, isEmpty_1.default)(responses)) {
285
- return '';
286
- }
287
- return ('\n' +
288
- Object.entries(responses)
289
- .map(([name, response]) => {
290
- const doc = (0, exports.isReference)(response) ? '' : (0, exports.formatDescription)(response.description);
291
- const type = (0, exports.getResReqTypes)([['', response]]);
292
- const isEmptyInterface = type === '{}';
293
- if (isEmptyInterface) {
294
- return `export type RQ${(0, case_1.pascal)(name)}Response = ${type}`;
295
- }
296
- else if (type.includes('{') && !type.includes('|') && !type.includes('&')) {
297
- return `${doc}export type RQ${(0, case_1.pascal)(name)}Response = ${type}`;
298
- }
299
- else {
300
- return `${doc}export type RQ${(0, case_1.pascal)(name)}Response = ${type};`;
301
- }
302
- })
303
- .join('\n\n') +
304
- '\n');
305
- };
306
- exports.generateResponsesDefinition = generateResponsesDefinition;
307
- /**
308
- * Format a description to code documentation.
309
- */
310
- const formatDescription = (description, tabSize = 0) => description
311
- ? `/**\n${description
312
- .split('\n')
313
- .map((i) => `${' '.repeat(tabSize)} * ${i}`)
314
- .join('\n')}\n${' '.repeat(tabSize)} */${' '.repeat(tabSize)}`
315
- : '';
316
- exports.formatDescription = formatDescription;
317
- /**
318
- * Generate a react-query component from openapi operation specs
319
- */
320
- const generateRestfulComponent = ({ operation, verb, route, operationIds, parameters, schemasComponents, headerFilters, }) => {
321
- const { operationId = route.replace('/', '') } = operation;
322
- if (operationId === '*') {
323
- throw new Error(`Invalid operationId/Route set for ${verb} ${route}`);
324
- }
325
- if (operationIds.includes(operationId)) {
326
- throw new Error(`"${operationId}" is duplicated in your schema definition!`);
327
- }
328
- operationIds.push(operationId);
329
- route = route.replace(/\{/g, '${').replace('//', '/'); // `/pet/{id}` => `/pet/${id}`
330
- // Remove the last param of the route if we are in the DELETE case
331
- let lastParamInTheRoute = null;
332
- const componentName = (0, case_1.pascal)(operationId);
333
- const isOk = ([statusCode]) => statusCode.toString().startsWith('2');
334
- const responseTypes = (0, exports.getResReqTypes)(Object.entries(operation.responses).filter(isOk)) || 'void';
335
- const requestBodyTypes = (0, exports.getResReqTypes)([['body', operation.requestBody]]);
336
- const needAResponseComponent = true;
337
- const paramsInPath = (0, exports.getParamsInPath)(route).filter((param) => !(verb === 'delete' && param === lastParamInTheRoute));
338
- const { query: queryParams = [], path: pathParams = [], header = [], } = (0, groupBy_1.default)([...(parameters || []), ...(operation.parameters || [])].map((p) => {
339
- if ((0, exports.isReference)(p)) {
340
- return (0, get_1.default)(schemasComponents, p.$ref.replace('#/components/', '').replace('/', '.'));
341
- }
342
- else {
343
- return p;
344
- }
345
- }), 'in');
346
- const headerParams = header.filter((p) => !headerFilters?.includes(p.name));
347
- let enabled = [];
348
- // TODO: extract all requestBody or remove useQuery variants
349
- let enabledParam = '!!props';
350
- [...queryParams, ...pathParams, ...headerParams].forEach((item) => {
351
- if (item.required) {
352
- enabled.push(`["${item.name}"]`);
353
- if (enabledParam && enabledParam !== '!!props') {
354
- enabledParam += `&& props['${item.name}'] != null`;
355
- }
356
- else {
357
- enabledParam = `props['${item.name}'] != null`;
358
- }
359
- }
360
- });
361
- // `!props${enabled.join('== null && !props')}`;
362
- const paramsTypes = paramsInPath
363
- .map((p) => {
364
- try {
365
- const { name, required, schema } = pathParams.find((i) => i.name === p);
366
- return `${name}${required ? '' : '?'}: ${(0, exports.resolveValue)(schema)}`;
367
- }
368
- catch (err) {
369
- throw new Error(`The path params ${p} can't be found in parameters (${operationId})`);
370
- }
371
- })
372
- .join('; ');
373
- const queryParamsType = queryParams
374
- .map((p) => {
375
- const processedName = IdentifierRegexp.test(p.name) ? p.name : `"${p.name}"`;
376
- return `${(0, exports.formatDescription)(p.description, 2)}${processedName}${p.required ? '' : '?'}: ${(0, exports.resolveValue)(p.schema)}`;
377
- })
378
- .join(';\n ');
379
- const headerType = headerParams
380
- .map((p) => {
381
- try {
382
- const { name, required, schema } = headerParams.find((i) => i.name === p.name);
383
- return `"${name}"${required ? '' : '?'}: ${(0, exports.resolveValue)(schema)}`;
384
- }
385
- catch (err) {
386
- throw new Error(`The path params ${p} can't be found in parameters (${operationId})`);
387
- }
388
- })
389
- .join('; ');
390
- // Retrieve the type of the param for delete verb
391
- const lastParamInTheRouteDefinition = operation.parameters && lastParamInTheRoute
392
- ? operation.parameters.find((p) => {
393
- if ((0, exports.isReference)(p)) {
394
- return false;
395
- }
396
- return p.name === lastParamInTheRoute;
397
- }) // Reference is not possible
398
- : { schema: { type: 'string' } };
399
- if (!lastParamInTheRouteDefinition) {
400
- throw new Error(`The path params ${lastParamInTheRoute} can't be found in parameters (${operationId})`);
401
- }
402
- let genericsTypes = `${needAResponseComponent ? componentName + 'Res' : responseTypes}`;
403
- if (verb !== 'get') {
404
- genericsTypes = `${needAResponseComponent ? componentName + 'Res' : responseTypes}`;
405
- }
406
- const description = (0, exports.formatDescription)(operation.summary && operation.description
407
- ? `${operation.summary}\n\n${operation.description}`
408
- : `${operation.summary || ''}${operation.description || ''}`);
409
- let output = `\n\n${description}`;
410
- const typeOrInterface = `type ${componentName}Res =`;
411
- output += `
412
- ${needAResponseComponent ? `export ${typeOrInterface} ${responseTypes}` : ''}
413
- `;
414
- const headerParam = headerType && headerType !== 'void' ? `${headerType};` : '';
415
- const queryParam = queryParamsType && queryParamsType !== 'void' ? `${queryParamsType}` : '';
416
- const requestBodyComponent = requestBodyTypes && requestBodyTypes !== 'void' ? `${requestBodyTypes}` : '';
417
- // QUERIES
418
- if (!requestBodyComponent && paramsInPath.length && !queryParam && !headerParam) {
419
- output += `
420
- type ${componentName}Return = ${genericsTypes}
421
- type ${componentName}Variables = {
422
- ${paramsTypes}
423
- }
424
-
425
- use${componentName}Query.fetch = async (props: ${componentName}Variables ) => {
426
- const result = await api.${verb}<${componentName}Return>(\`${route.replace(/\{/g, '{props.')}\`);
427
- return result.data;
428
- }
429
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
430
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
431
-
432
- use${componentName}Query.updateCache = (
433
- {params, updater, options}:
434
- {params: ${componentName}Variables,
435
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
436
- options?: SetDataOptions | undefined}
437
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
438
-
439
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
440
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
441
-
442
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
443
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
444
-
445
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
446
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
447
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
448
-
449
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
450
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
451
- }
452
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
453
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
454
- { enabled: ${enabledParam}, ...options }
455
- );}
456
-
457
- type ${componentName}MutationProps<T> = {
458
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
459
- }
460
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
461
- return useMutation(async (data) => use${componentName}Query.fetch(data),
462
- props?.options
463
- )};`;
464
- }
465
- if (!requestBodyComponent && paramsInPath.length && queryParam && !headerParam) {
466
- output += `
467
- type ${componentName}Return = ${genericsTypes}
468
- type ${componentName}Variables = {
469
- ${paramsTypes}
470
- ${queryParamsType};
471
- }
472
-
473
- use${componentName}Query.fetch = async (props:${componentName}Variables) => {
474
- const {${paramsInPath.join(', ')}, ...queryParams} = props
475
- const params = queryString.stringify(queryParams);
476
- const result = await api.${verb}<${componentName}Return>(\`${route}?\${params}\`)
477
- return result.data;
478
- }
479
-
480
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
481
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
482
-
483
- use${componentName}Query.updateCache = (
484
- {params, updater, options}:
485
- {params: ${componentName}Variables,
486
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
487
- options?: SetDataOptions | undefined}
488
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
489
-
490
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
491
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
492
-
493
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
494
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
495
-
496
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
497
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
498
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
499
-
500
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
501
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
502
- }
503
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
504
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
505
- { enabled: ${enabledParam}, ...options }
506
- );}
507
-
508
- type ${componentName}MutationProps<T> = {
509
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
510
- }
511
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
512
- return useMutation(async (data) => use${componentName}Query.fetch(data),
513
- props?.options
514
- )};`;
515
- }
516
- if (!requestBodyComponent && !paramsInPath.length && !queryParam && !headerParam) {
517
- output += `
518
- type ${componentName}Return = ${genericsTypes}
519
- use${componentName}Query.fetch = async () => {
520
- const result = await api.${verb}<${componentName}Return>(\`${route}\`);
521
- return result.data;
522
- }
523
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
524
- use${componentName}Query.queryKey = (): QueryKey => use${componentName}Query.baseKey()
525
-
526
- use${componentName}Query.updateCache = ({updater, options}:
527
- {updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
528
- options?: SetDataOptions | undefined}
529
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(), updater, options);
530
-
531
- use${componentName}Query.getQueryState = (props?: {filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(), props?.filters);
532
- use${componentName}Query.getQueryData = (props?: {filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(), props?.filters);
533
-
534
- use${componentName}Query.prefetch = () =>
535
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(), ()=> use${componentName}Query.fetch());
536
-
537
- use${componentName}Query.cancelQueries = () => queryClient.cancelQueries(use${componentName}Query.queryKey())
538
- use${componentName}Query.invalidate = () =>
539
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey());
540
-
541
-
542
- type ${componentName}QueryProps<T = ${componentName}Return> = {
543
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
544
- }
545
- export function use${componentName}Query<T = ${componentName}Return>(props?: ${componentName}QueryProps<T>) {
546
- return useQuery(use${componentName}Query.queryKey(), use${componentName}Query.fetch, props?.options
547
- );}
548
-
549
- type ${componentName}MutationProps<T> = {
550
- options?: UseMutationOptions<${componentName}Return, AxiosError, void, T>
551
- }
552
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
553
- return useMutation(async () => use${componentName}Query.fetch(),
554
- props?.options
555
- )};`;
556
- }
557
- if (!requestBodyComponent && !paramsInPath.length && queryParam && !headerParam) {
558
- output += `
559
-
560
- type ${componentName}Return = ${genericsTypes}
561
- type ${componentName}Variables = {
562
- ${queryParamsType}
563
- }
564
-
565
- use${componentName}Query.fetch = async (props: ${componentName}Variables) => {
566
- const params = queryString.stringify({${queryParams
567
- .map((param) => `"${param.name}": props["${param.name}"]`)
568
- .join(',')}});
569
- const result = await api.${verb}<${componentName}Return>(\`${route}?\${params}\`)
570
- return result.data;
571
- }
572
-
573
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
574
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
575
-
576
- use${componentName}Query.updateCache = (
577
- {params, updater, options}:
578
- {params: ${componentName}Variables,
579
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
580
- options?: SetDataOptions | undefined}
581
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
582
-
583
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
584
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
585
-
586
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
587
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
588
-
589
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
590
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
591
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
592
-
593
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}Variables & { options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>}) {
594
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
595
- { enabled: ${enabledParam}, ...options }
596
- );}
597
-
598
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: { options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>}) {
599
- return useMutation(async (data) => use${componentName}Query.fetch(data),
600
- props?.options
601
- )};
602
- `;
603
- }
604
- if (requestBodyComponent && !paramsInPath.length && !queryParam && !headerParam) {
605
- output += `
606
- type ${componentName}Return = ${genericsTypes}
607
- type ${componentName}Variables = ${requestBodyComponent};
608
-
609
- use${componentName}Query.fetch = async (body: ${componentName}Variables) => {
610
- const result = await api.${verb}<${componentName}Return>(\`${route}\`, body)
611
- return result.data
612
- }
613
-
614
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
615
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
616
-
617
- use${componentName}Query.updateCache = (
618
- {params, updater, options}:
619
- {params: ${componentName}Variables,
620
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
621
- options?: SetDataOptions | undefined}
622
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
623
-
624
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
625
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
626
-
627
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
628
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
629
-
630
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
631
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
632
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
633
-
634
-
635
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
636
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
637
- }
638
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...body }: ${componentName}QueryProps<T>) {
639
- return useQuery(use${componentName}Query.queryKey(body), async () => use${componentName}Query.fetch(body), options
640
- );}
641
-
642
- type ${componentName}MutationProps<T> = {
643
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
644
- }
645
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
646
- return useMutation(async (body) => use${componentName}Query.fetch(body),
647
- props?.options
648
- )};`;
649
- }
650
- if (requestBodyComponent && paramsInPath.length && !queryParam && !headerParam) {
651
- output += `
652
- type ${componentName}Return = ${genericsTypes}
653
- type ${componentName}Variables = {
654
- body: ${requestBodyComponent}
655
- ${paramsTypes}
656
- }
657
-
658
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
659
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
660
- }
661
-
662
- use${componentName}Query.fetch = async (props: ${componentName}Variables) => {
663
- const {${paramsInPath.join(', ')}, ...body} = props
664
- const result = await api.${verb}<${componentName}Return>(\`${route}\`, body)
665
- return result.data
666
- }
667
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
668
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
669
-
670
- use${componentName}Query.updateCache = (
671
- {params, updater, options}:
672
- {params: ${componentName}Variables,
673
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
674
- options?: SetDataOptions | undefined}
675
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
676
-
677
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
678
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
679
-
680
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
681
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
682
-
683
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
684
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
685
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
686
-
687
-
688
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
689
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
690
- { enabled: ${enabledParam}, ...options }
691
- );}
692
-
693
- type ${componentName}MutationProps<T> = {
694
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
695
- }
696
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
697
- return useMutation(async (body) => use${componentName}Query.fetch(body),
698
- props?.options
699
- )};`;
700
- }
701
- if (requestBodyComponent && !paramsInPath.length && queryParam && !headerParam) {
702
- output += `
703
- type ${componentName}Return = ${genericsTypes}
704
- type ${componentName}Variables = {
705
- body: ${requestBodyComponent}
706
- ${queryParamsType}
707
- }
708
-
709
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
710
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
711
- }
712
-
713
- use${componentName}Query.fetch = async (props: ${componentName}Variables) => {
714
- const params = queryString.stringify({
715
- ${queryParams.map((param) => `["${param.name}"]: props["${param.name}"]`).join(',')}
716
- });
717
- const result = await api.${verb}<${componentName}Return>(\`${route}?\${params}\`, props.body)
718
- return result.data
719
- }
720
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
721
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
722
-
723
- use${componentName}Query.updateCache = (
724
- {params, updater, options}:
725
- {params: ${componentName}Variables,
726
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
727
- options?: SetDataOptions | undefined}
728
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
729
-
730
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
731
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
732
-
733
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
734
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
735
-
736
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
737
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
738
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
739
-
740
-
741
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
742
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
743
- { enabled: ${enabledParam}, ...options }
744
- );}
745
-
746
-
747
- type ${componentName}MutationProps<T> = {
748
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
749
- }
750
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
751
- return useMutation(async (body) => use${componentName}Query.fetch(body),
752
- props?.options
753
- )};`;
754
- }
755
- if (requestBodyComponent && paramsInPath.length && queryParam && !headerParam) {
756
- output += `// TODO: NOT SUPPORTED 2`;
757
- }
758
- if (requestBodyComponent && !paramsInPath.length && queryParam && headerParam) {
759
- output += `// TODO: NOT SUPPORTED 3`;
760
- }
761
- if (requestBodyComponent && paramsInPath.length && queryParam && headerParam) {
762
- output += `// TODO: NOT SUPPORTED 4`;
763
- }
764
- if (!requestBodyComponent && paramsInPath.length && !queryParam && headerParam) {
765
- output += `// TODO: NOT SUPPORTED 5`;
766
- }
767
- if (!requestBodyComponent && paramsInPath.length && queryParam && headerParam) {
768
- output += `// TODO: NOT SUPPORTED 6`;
769
- }
770
- if (!requestBodyComponent && !paramsInPath.length && !queryParam && headerParam) {
771
- output += `
772
- type ${componentName}Return = ${genericsTypes}
773
- type ${componentName}Variables = {
774
- ${headerParam}
775
- };
776
-
777
- use${componentName}Query.fetch = async (headers: ${componentName}Variables) => {
778
- const result = await api.${verb}<${componentName}Return>(\`${route}\`, {headers: headers});
779
- return result.data;
780
- }
781
-
782
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
783
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
784
-
785
- use${componentName}Query.updateCache = (
786
- {params, updater, options}:
787
- {params: ${componentName}Variables,
788
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
789
- options?: SetDataOptions | undefined}
790
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
791
-
792
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
793
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
794
-
795
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
796
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
797
-
798
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
799
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
800
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
801
-
802
-
803
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
804
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
805
- }
806
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
807
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
808
- { enabled: ${enabledParam}, ...options }
809
- );}
810
-
811
- type ${componentName}MutationProps<T> = {
812
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
813
- }
814
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
815
- return useMutation(async (data) => use${componentName}Query.fetch(data),
816
- props?.options
817
- )};`;
818
- }
819
- if (!requestBodyComponent && !paramsInPath.length && queryParam && headerParam) {
820
- output += `
821
- type ${componentName}Return = ${genericsTypes}
822
-
823
- type ${componentName}Variables = {
824
- ${headerParam}
825
- ${queryParamsType};
826
- };
827
-
828
- use${componentName}Query.fetch = async (data: ${componentName}Variables) => {
829
- const params = queryString.stringify({
830
- ${queryParams.map((p) => `"${p.name}": data["${p.name}"]`).join(',')}
831
- });
832
- const headers = {
833
- ${headerParams.map((p) => `"${p.name}": data["${p.name}"]`).join(',')}
834
- }
835
- const result = await api.${verb}<${componentName}Return>(\`${route}?\${params}\`, {headers})
836
- return result.data;
837
- }
838
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
839
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
840
-
841
- use${componentName}Query.updateCache = (
842
- {params, updater, options}:
843
- {params: ${componentName}Variables,
844
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
845
- options?: SetDataOptions | undefined}
846
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
847
-
848
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
849
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
850
-
851
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
852
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
853
-
854
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
855
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
856
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
857
-
858
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
859
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
860
- }
861
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
862
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
863
- { enabled: ${enabledParam}, ...options }
864
- );}
865
-
866
- type ${componentName}MutationProps<T> = {
867
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
868
- }
869
-
870
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
871
- return useMutation(async (data) => use${componentName}Query.fetch(data),
872
- props?.options
873
- )};`;
874
- }
875
- if (requestBodyComponent && !paramsInPath.length && !queryParam && headerParam) {
876
- output += `
877
- type ${componentName}Return = ${genericsTypes}
878
-
879
- type ${componentName}Variables = {
880
- body: ${requestBodyComponent}
881
- ${headerParam}
882
- };
883
-
884
- use${componentName}Query.fetch = async (body: ${componentName}Variables) => {
885
- const headers = {
886
- ${headerParams.map((param) => `"${param.name}": body["${param.name}"]`).join(',')}
887
- }
888
- const result = await api.${verb}<${componentName}Return>(\`${route}\`, body, {headers})
889
- return result.data
890
- }
891
-
892
- use${componentName}Query.baseKey = (): QueryKey => ["${componentName.toLowerCase()}"];
893
- use${componentName}Query.queryKey = (params: ${componentName}Variables ): QueryKey => [...use${componentName}Query.baseKey(), params];
894
-
895
- use${componentName}Query.updateCache = (
896
- {params, updater, options}:
897
- {params: ${componentName}Variables,
898
- updater: Updater<${componentName}Return | undefined, ${componentName}Return>,
899
- options?: SetDataOptions | undefined}
900
- ) => queryClient.setQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), updater, options);
901
-
902
- use${componentName}Query.getQueryState = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryState<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
903
- use${componentName}Query.getQueryData = ({params, filters}:{params: ${componentName}Variables, filters?: QueryFilters})=> queryClient.getQueryData<${componentName}Return>(use${componentName}Query.queryKey(params), filters);
904
-
905
- use${componentName}Query.prefetch = (params: ${componentName}Variables) =>
906
- queryClient.prefetchQuery<${componentName}Return>(use${componentName}Query.queryKey(params), ()=> use${componentName}Query.fetch(params));
907
-
908
- use${componentName}Query.cancelQueries = (params: ${componentName}Variables) => queryClient.cancelQueries(use${componentName}Query.queryKey(params))
909
- use${componentName}Query.invalidate = (params: ${componentName}Variables) =>
910
- queryClient.invalidateQueries<${componentName}Return>(use${componentName}Query.queryKey(params));
911
-
912
- type ${componentName}QueryProps<T = ${componentName}Return> = ${componentName}Variables & {
913
- options?: UseQueryOptions<${componentName}Return, AxiosError, T, any>
914
- }
915
- export function use${componentName}Query<T = ${componentName}Return>({ options = {}, ...props }: ${componentName}QueryProps<T>) {
916
- return useQuery(use${componentName}Query.queryKey(props), async () => use${componentName}Query.fetch(props),
917
- { enabled: ${enabledParam}, ...options }
918
- );}
919
-
920
-
921
- type ${componentName}MutationProps<T> = {
922
- options?: UseMutationOptions<${componentName}Return, AxiosError, ${componentName}Variables, T>
923
- }
924
- export function use${componentName}Mutation<T = ${componentName}Return>(props?: ${componentName}MutationProps<T>) {
925
- return useMutation(async (body) => use${componentName}Query.fetch(body),
926
- props?.options
927
- )};`;
928
- }
929
- if (requestBodyComponent && paramsInPath.length && !queryParam && headerParam) {
930
- output += `// TODO: CODEGEN DOES NOT SUPPORT requestBodyComponent AND paramsInPath AND headerParam`;
931
- }
932
- return output;
933
- };
934
- exports.generateRestfulComponent = generateRestfulComponent;
935
- const generateQueryHooks = (spec, operationIds, headerFilters) => {
936
- const { paths, components } = spec;
937
- let output = '';
938
- Object.entries(paths).forEach(([route, verbs]) => {
939
- Object.entries(verbs).forEach(([verb, operation]) => {
940
- if (['get', 'post', 'patch', 'put', 'delete'].includes(verb) && !operation.deprecated) {
941
- output += (0, exports.generateRestfulComponent)({
942
- operation,
943
- verb,
944
- route: spec.basePath + route,
945
- operationIds,
946
- parameters: verbs.parameters,
947
- schemasComponents: components,
948
- headerFilters,
949
- });
950
- }
951
- });
952
- });
953
- return output;
954
- };
955
- /**
956
- * Main entry of the generator. Generate react-query component from openAPI.
957
- */
958
- const importOpenApi = async ({ data, format, apiDirectory, queryClientDir, headerFilters = [], }) => {
32
+ const importOpenApi = async ({ specs, apiDirectory, queryClientDir, headerFilters = [], }) => {
959
33
  const operationIds = [];
960
- let specs = await importSpecs(data, format);
961
- (0, exports.resolveDiscriminator)(specs);
962
- let output = '';
963
- output = `
964
- import {
965
- useQuery,
966
- useMutation,
967
- UseQueryOptions,
968
- UseMutationOptions,
969
- QueryKey,
970
- SetDataOptions,
971
- QueryFilters
972
- } from '@tanstack/react-query';
973
-
974
- import queryString from 'query-string';
975
- import { AxiosError } from 'axios';
976
- import { api } from '${apiDirectory}';
977
- import { queryClient } from '${queryClientDir}';
978
-
979
- type Updater<TInput, TOutput> = TOutput | ((input: TInput) => TOutput);
980
-
981
- // SCEHMAS
982
- ${(0, exports.generateSchemasDefinition)(specs.components?.schemas)}
983
-
984
- // RESPONSES
985
- ${(0, exports.generateResponsesDefinition)(specs.components?.responses)}
986
-
987
- // REQUEST BODIES
988
- ${(0, exports.generateRequestBodiesDefinition)(specs.components?.requestBodies)}
989
-
990
- // HOOKS
991
- ${generateQueryHooks(specs, operationIds, headerFilters)}
992
- `;
993
- return output;
34
+ resolveDiscriminator(specs);
35
+ const imports = (0, generateImports_1.generateImports)({ apiDirectory, queryClientDir });
36
+ const hooks = (0, generateHooks_1.generateQueryHooks)(specs, operationIds, headerFilters);
37
+ return imports + hooks;
994
38
  };
995
39
  exports.importOpenApi = importOpenApi;