react-query-lightbase-codegen 2.5.8 → 2.5.10
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.
|
@@ -63,6 +63,11 @@ function generateAxiosMethod(operation, spec) {
|
|
|
63
63
|
requestBody.content?.["application/json;charset=UTF-8"]?.schema)
|
|
64
64
|
: undefined;
|
|
65
65
|
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
|
|
66
|
+
// Check if request body is a primitive type (string, number, boolean)
|
|
67
|
+
const isPrimitiveRequestBody = requestBodySchema &&
|
|
68
|
+
!requestBodySchema.properties &&
|
|
69
|
+
!requestBodySchema.type?.includes("object") &&
|
|
70
|
+
!requestBodySchema.type?.includes("array");
|
|
66
71
|
// Add request body type if it exists
|
|
67
72
|
const hasData = (parameters && parameters.length > 0) || operation.requestBody;
|
|
68
73
|
const namedType = (0, utils_1.pascalCase)(operationId);
|
|
@@ -71,8 +76,14 @@ function generateAxiosMethod(operation, spec) {
|
|
|
71
76
|
? `T.${`${namedType}Response${responseDetails[0]}`}`
|
|
72
77
|
: "unknown";
|
|
73
78
|
const urlWithParams = urlParams.length > 0 ? `\`${path.replace(/{(\w+)}/g, "${encodeURIComponent(data.$1)}")}\`` : `"${path}"`;
|
|
79
|
+
// Handle destructuring based on whether we have primitive request body
|
|
80
|
+
const destructuringLine = hasData
|
|
81
|
+
? isPrimitiveRequestBody
|
|
82
|
+
? "const { axiosConfig = {}, data } = props || {};"
|
|
83
|
+
: "const { axiosConfig = {}, ...data } = props || {};"
|
|
84
|
+
: "const { axiosConfig } = props || {};";
|
|
74
85
|
const methodBody = [
|
|
75
|
-
|
|
86
|
+
destructuringLine,
|
|
76
87
|
"const apiClient = getApiClient();",
|
|
77
88
|
`const url = ${urlWithParams};`,
|
|
78
89
|
queryParams.length > 0
|
|
@@ -94,9 +105,9 @@ function generateAxiosMethod(operation, spec) {
|
|
|
94
105
|
const schemaProperty = prop;
|
|
95
106
|
const isBinary = schemaProperty.format === "binary";
|
|
96
107
|
return formDataSchema?.required?.includes(key)
|
|
97
|
-
? `bodyData.append("${key}", ${isBinary ? "" : "String("}
|
|
98
|
-
: `if (
|
|
99
|
-
bodyData.append("${key}", ${isBinary ? "" : "String("}
|
|
108
|
+
? `bodyData.append("${key}", ${isBinary ? "" : "String("}data.${key}${isBinary ? "" : ")"});`
|
|
109
|
+
: `if (data.${key} != null) {
|
|
110
|
+
bodyData.append("${key}", ${isBinary ? "" : "String("}data.${key}${isBinary ? "" : ")"});
|
|
100
111
|
}`;
|
|
101
112
|
})
|
|
102
113
|
.join("\n ")}`
|
|
@@ -122,7 +133,9 @@ function generateAxiosMethod(operation, spec) {
|
|
|
122
133
|
// ${requestBody ? `data: ${isFormData ? "formData" : "bodyData"},` : ""}
|
|
123
134
|
// ${isFormData ? `config: { headers: { 'Content-Type': 'multipart/form-data', ...axiosConfig?.headers }, ...axiosConfig },` : "...axiosConfig"}
|
|
124
135
|
const requestParms = hasData
|
|
125
|
-
?
|
|
136
|
+
? isPrimitiveRequestBody
|
|
137
|
+
? `props: { data: T.${(0, utils_1.pascalCase)(operationId)}Params; axiosConfig?: AxiosRequestConfig; }`
|
|
138
|
+
: `props: T.${(0, utils_1.pascalCase)(operationId)}Params & { axiosConfig?: AxiosRequestConfig; }`
|
|
126
139
|
: "props?: { axiosConfig?: AxiosRequestConfig }";
|
|
127
140
|
return `
|
|
128
141
|
${jsDocLines.join("\n ")}
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateReactQuery = generateReactQuery;
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
|
+
function resolveSchema(schema, spec) {
|
|
6
|
+
if (!schema)
|
|
7
|
+
return undefined;
|
|
8
|
+
if ("$ref" in schema) {
|
|
9
|
+
const index = schema.$ref.split("/").pop();
|
|
10
|
+
return spec.components?.schemas?.[index];
|
|
11
|
+
}
|
|
12
|
+
return schema;
|
|
13
|
+
}
|
|
5
14
|
function generateQueryOptions(operation, spec) {
|
|
6
15
|
const { operationId, parameters, requestBody, method } = operation;
|
|
7
16
|
const hasData = (parameters && parameters.length > 0) || operation.requestBody;
|
|
@@ -19,6 +28,12 @@ function generateQueryOptions(operation, spec) {
|
|
|
19
28
|
requestBody.content?.["application/json"]?.schema ??
|
|
20
29
|
requestBody.content?.["application/octet-stream"]?.schema)
|
|
21
30
|
: undefined;
|
|
31
|
+
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
|
|
32
|
+
// Check if request body is a primitive type (string, number, boolean)
|
|
33
|
+
const isPrimitiveRequestBody = requestBodySchema &&
|
|
34
|
+
!requestBodySchema.properties &&
|
|
35
|
+
!requestBodySchema.type?.includes("object") &&
|
|
36
|
+
!requestBodySchema.type?.includes("array");
|
|
22
37
|
// Get required parameter names from both parameters and request body
|
|
23
38
|
const requiredParams = [
|
|
24
39
|
...(parameters?.filter((p) => p.required).map((p) => `'${p.name}'`) || []),
|
|
@@ -35,15 +50,34 @@ function generateQueryOptions(operation, spec) {
|
|
|
35
50
|
];
|
|
36
51
|
const namedQueryOptions = (0, utils_1.camelCase)(`get${operationId}QueryOptions`);
|
|
37
52
|
const namedQuery = (0, utils_1.camelCase)(`${operationId}`);
|
|
53
|
+
// Handle destructuring based on whether we have primitive request body
|
|
54
|
+
const destructuringLine = hasData
|
|
55
|
+
? isPrimitiveRequestBody
|
|
56
|
+
? "const { axiosConfig, data } = props || {};"
|
|
57
|
+
: "const { axiosConfig, ...params } = props || {};"
|
|
58
|
+
: "const { axiosConfig } = props || {};";
|
|
59
|
+
const paramsVariable = hasData ? (isPrimitiveRequestBody ? "data" : "params") : "";
|
|
60
|
+
const queryKeyParams = hasData ? paramsVariable : "";
|
|
61
|
+
const functionCall = hasData
|
|
62
|
+
? isPrimitiveRequestBody
|
|
63
|
+
? "{data, axiosConfig}"
|
|
64
|
+
: "{...params, axiosConfig}"
|
|
65
|
+
: "{axiosConfig}";
|
|
66
|
+
// Handle enabled logic based on request body type
|
|
67
|
+
const enabledLogic = hasData
|
|
68
|
+
? isPrimitiveRequestBody
|
|
69
|
+
? "!!data"
|
|
70
|
+
: `hasDefinedProps(${paramsVariable}, ${requiredParams.join(", ")})`
|
|
71
|
+
: "true";
|
|
38
72
|
return `
|
|
39
73
|
export const ${namedQueryOptions} = (
|
|
40
74
|
${hasData ? `props: Partial<Parameters<typeof apiClient.${namedQuery}>[0]>` : `props?: Partial<Parameters<typeof apiClient.${namedQuery}>[0]>`}
|
|
41
75
|
) => {
|
|
42
|
-
${
|
|
43
|
-
const enabled = ${
|
|
76
|
+
${destructuringLine}
|
|
77
|
+
const enabled = ${enabledLogic};
|
|
44
78
|
return queryOptions({
|
|
45
|
-
queryKey: ['${(0, utils_1.camelCase)(operationId)}', ${
|
|
46
|
-
queryFn: enabled ? () => apiClient.${namedQuery}(${
|
|
79
|
+
queryKey: ['${(0, utils_1.camelCase)(operationId)}', ${queryKeyParams}],
|
|
80
|
+
queryFn: enabled ? () => apiClient.${namedQuery}(${functionCall}) : skipToken,
|
|
47
81
|
});
|
|
48
82
|
};`;
|
|
49
83
|
}
|
package/package.json
CHANGED
|
@@ -89,6 +89,13 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
|
|
|
89
89
|
|
|
90
90
|
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
|
|
91
91
|
|
|
92
|
+
// Check if request body is a primitive type (string, number, boolean)
|
|
93
|
+
const isPrimitiveRequestBody =
|
|
94
|
+
requestBodySchema &&
|
|
95
|
+
!requestBodySchema.properties &&
|
|
96
|
+
!requestBodySchema.type?.includes("object") &&
|
|
97
|
+
!requestBodySchema.type?.includes("array");
|
|
98
|
+
|
|
92
99
|
// Add request body type if it exists
|
|
93
100
|
const hasData = (parameters && parameters.length > 0) || operation.requestBody;
|
|
94
101
|
|
|
@@ -104,8 +111,15 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
|
|
|
104
111
|
const urlWithParams =
|
|
105
112
|
urlParams.length > 0 ? `\`${path.replace(/{(\w+)}/g, "${encodeURIComponent(data.$1)}")}\`` : `"${path}"`;
|
|
106
113
|
|
|
114
|
+
// Handle destructuring based on whether we have primitive request body
|
|
115
|
+
const destructuringLine = hasData
|
|
116
|
+
? isPrimitiveRequestBody
|
|
117
|
+
? "const { axiosConfig = {}, data } = props || {};"
|
|
118
|
+
: "const { axiosConfig = {}, ...data } = props || {};"
|
|
119
|
+
: "const { axiosConfig } = props || {};";
|
|
120
|
+
|
|
107
121
|
const methodBody = [
|
|
108
|
-
|
|
122
|
+
destructuringLine,
|
|
109
123
|
"const apiClient = getApiClient();",
|
|
110
124
|
`const url = ${urlWithParams};`,
|
|
111
125
|
queryParams.length > 0
|
|
@@ -129,9 +143,9 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
|
|
|
129
143
|
const schemaProperty = prop as OpenAPIV3.SchemaObject;
|
|
130
144
|
const isBinary = schemaProperty.format === "binary";
|
|
131
145
|
return formDataSchema?.required?.includes(key)
|
|
132
|
-
? `bodyData.append("${key}", ${isBinary ? "" : "String("}
|
|
133
|
-
: `if (
|
|
134
|
-
bodyData.append("${key}", ${isBinary ? "" : "String("}
|
|
146
|
+
? `bodyData.append("${key}", ${isBinary ? "" : "String("}data.${key}${isBinary ? "" : ")"});`
|
|
147
|
+
: `if (data.${key} != null) {
|
|
148
|
+
bodyData.append("${key}", ${isBinary ? "" : "String("}data.${key}${isBinary ? "" : ")"});
|
|
135
149
|
}`;
|
|
136
150
|
})
|
|
137
151
|
.join("\n ")}`
|
|
@@ -159,7 +173,9 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
|
|
|
159
173
|
// ${isFormData ? `config: { headers: { 'Content-Type': 'multipart/form-data', ...axiosConfig?.headers }, ...axiosConfig },` : "...axiosConfig"}
|
|
160
174
|
|
|
161
175
|
const requestParms = hasData
|
|
162
|
-
?
|
|
176
|
+
? isPrimitiveRequestBody
|
|
177
|
+
? `props: { data: T.${pascalCase(operationId)}Params; axiosConfig?: AxiosRequestConfig; }`
|
|
178
|
+
: `props: T.${pascalCase(operationId)}Params & { axiosConfig?: AxiosRequestConfig; }`
|
|
163
179
|
: "props?: { axiosConfig?: AxiosRequestConfig }";
|
|
164
180
|
|
|
165
181
|
return `
|
|
@@ -2,6 +2,18 @@ import type { OpenAPIV3 } from "openapi-types";
|
|
|
2
2
|
import { camelCase, sanitizeTypeName, specTitle } from "../utils";
|
|
3
3
|
import type { OperationInfo } from "./clientGenerator";
|
|
4
4
|
|
|
5
|
+
function resolveSchema(
|
|
6
|
+
schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject | undefined,
|
|
7
|
+
spec: OpenAPIV3.Document
|
|
8
|
+
): OpenAPIV3.SchemaObject | undefined {
|
|
9
|
+
if (!schema) return undefined;
|
|
10
|
+
if ("$ref" in schema) {
|
|
11
|
+
const index = schema.$ref.split("/").pop();
|
|
12
|
+
return spec.components?.schemas?.[index as string] as OpenAPIV3.SchemaObject;
|
|
13
|
+
}
|
|
14
|
+
return schema;
|
|
15
|
+
}
|
|
16
|
+
|
|
5
17
|
function generateQueryOptions(operation: OperationInfo, spec: OpenAPIV3.Document): string {
|
|
6
18
|
const { operationId, parameters, requestBody, method } = operation;
|
|
7
19
|
|
|
@@ -26,6 +38,16 @@ function generateQueryOptions(operation: OperationInfo, spec: OpenAPIV3.Document
|
|
|
26
38
|
requestBody.content?.["application/json"]?.schema ??
|
|
27
39
|
requestBody.content?.["application/octet-stream"]?.schema)
|
|
28
40
|
: undefined;
|
|
41
|
+
|
|
42
|
+
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
|
|
43
|
+
|
|
44
|
+
// Check if request body is a primitive type (string, number, boolean)
|
|
45
|
+
const isPrimitiveRequestBody =
|
|
46
|
+
requestBodySchema &&
|
|
47
|
+
!requestBodySchema.properties &&
|
|
48
|
+
!requestBodySchema.type?.includes("object") &&
|
|
49
|
+
!requestBodySchema.type?.includes("array");
|
|
50
|
+
|
|
29
51
|
// Get required parameter names from both parameters and request body
|
|
30
52
|
const requiredParams = [
|
|
31
53
|
...(parameters?.filter((p) => p.required).map((p) => `'${p.name}'`) || []),
|
|
@@ -44,15 +66,39 @@ function generateQueryOptions(operation: OperationInfo, spec: OpenAPIV3.Document
|
|
|
44
66
|
const namedQueryOptions = camelCase(`get${operationId}QueryOptions`);
|
|
45
67
|
const namedQuery = camelCase(`${operationId}`);
|
|
46
68
|
|
|
69
|
+
// Handle destructuring based on whether we have primitive request body
|
|
70
|
+
const destructuringLine = hasData
|
|
71
|
+
? isPrimitiveRequestBody
|
|
72
|
+
? "const { axiosConfig, data } = props || {};"
|
|
73
|
+
: "const { axiosConfig, ...params } = props || {};"
|
|
74
|
+
: "const { axiosConfig } = props || {};";
|
|
75
|
+
|
|
76
|
+
const paramsVariable = hasData ? (isPrimitiveRequestBody ? "data" : "params") : "";
|
|
77
|
+
|
|
78
|
+
const queryKeyParams = hasData ? paramsVariable : "";
|
|
79
|
+
|
|
80
|
+
const functionCall = hasData
|
|
81
|
+
? isPrimitiveRequestBody
|
|
82
|
+
? "{data, axiosConfig}"
|
|
83
|
+
: "{...params, axiosConfig}"
|
|
84
|
+
: "{axiosConfig}";
|
|
85
|
+
|
|
86
|
+
// Handle enabled logic based on request body type
|
|
87
|
+
const enabledLogic = hasData
|
|
88
|
+
? isPrimitiveRequestBody
|
|
89
|
+
? "!!data"
|
|
90
|
+
: `hasDefinedProps(${paramsVariable}, ${requiredParams.join(", ")})`
|
|
91
|
+
: "true";
|
|
92
|
+
|
|
47
93
|
return `
|
|
48
94
|
export const ${namedQueryOptions} = (
|
|
49
95
|
${hasData ? `props: Partial<Parameters<typeof apiClient.${namedQuery}>[0]>` : `props?: Partial<Parameters<typeof apiClient.${namedQuery}>[0]>`}
|
|
50
96
|
) => {
|
|
51
|
-
${
|
|
52
|
-
const enabled = ${
|
|
97
|
+
${destructuringLine}
|
|
98
|
+
const enabled = ${enabledLogic};
|
|
53
99
|
return queryOptions({
|
|
54
|
-
queryKey: ['${camelCase(operationId)}', ${
|
|
55
|
-
queryFn: enabled ? () => apiClient.${namedQuery}(${
|
|
100
|
+
queryKey: ['${camelCase(operationId)}', ${queryKeyParams}],
|
|
101
|
+
queryFn: enabled ? () => apiClient.${namedQuery}(${functionCall}) : skipToken,
|
|
56
102
|
});
|
|
57
103
|
};`;
|
|
58
104
|
}
|