react-query-lightbase-codegen 2.3.1 → 2.4.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.
|
@@ -60,35 +60,9 @@ function generateAxiosMethod(operation, spec) {
|
|
|
60
60
|
requestBody.content?.["application/octet-stream"]?.schema)
|
|
61
61
|
: undefined;
|
|
62
62
|
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
|
|
63
|
-
// Build data type parts
|
|
64
|
-
const dataProps = [];
|
|
65
|
-
// Add path and query parameters
|
|
66
|
-
urlParams.forEach((p) => {
|
|
67
|
-
const safeName = (0, utils_1.sanitizePropertyName)(p.name);
|
|
68
|
-
dataProps.push(`${safeName}: ${(0, utils_1.getTypeFromSchema)(p.schema)}`);
|
|
69
|
-
});
|
|
70
|
-
queryParams.forEach((p) => {
|
|
71
|
-
const safeName = (0, utils_1.sanitizePropertyName)(p.name);
|
|
72
|
-
dataProps.push(`${safeName}${p.required ? "" : "?"}: ${(0, utils_1.getTypeFromSchema)(p.schema)}`);
|
|
73
|
-
});
|
|
74
63
|
// Add request body type if it exists
|
|
75
64
|
const hasData = (parameters && parameters.length > 0) || operation.requestBody;
|
|
76
|
-
let dataType = "undefined";
|
|
77
65
|
const namedType = (0, utils_1.pascalCase)(operationId);
|
|
78
|
-
if (hasData) {
|
|
79
|
-
if (requestBody && dataProps.length > 0) {
|
|
80
|
-
dataType = `T.${namedType}Request & { ${dataProps.join("; ")} }`;
|
|
81
|
-
}
|
|
82
|
-
else if (requestBody) {
|
|
83
|
-
dataType = `T.${namedType}Request`;
|
|
84
|
-
}
|
|
85
|
-
else if (dataProps.length > 0) {
|
|
86
|
-
dataType = `{ ${dataProps.join("; ")} }`;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
dataType = "Record<string, never>";
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
66
|
// Get response type from 2xx response
|
|
93
67
|
const responseType = responseDetails?.[0] && "content" in responseDetails[1]
|
|
94
68
|
? `T.${`${namedType}Response${responseDetails[0]}`}`
|
|
@@ -73,11 +73,23 @@ function generateTypeDefinitions(spec) {
|
|
|
73
73
|
// Add path and query parameters
|
|
74
74
|
urlParams.forEach((p) => {
|
|
75
75
|
const safeName = (0, utils_1.sanitizePropertyName)(p.name);
|
|
76
|
-
|
|
76
|
+
const isDeprecated = "deprecated" in p && p.deprecated;
|
|
77
|
+
const hasDescription = "description" in p && p.description;
|
|
78
|
+
const desc = hasDescription || isDeprecated
|
|
79
|
+
? `/**${hasDescription ? `\n* ${p.description}` : ""}${isDeprecated ? "\n* @deprecated" : ""}
|
|
80
|
+
*/\n`
|
|
81
|
+
: "";
|
|
82
|
+
dataProps.push(`${desc}${safeName}: ${(0, utils_1.getTypeFromSchema)(p.schema)}`);
|
|
77
83
|
});
|
|
78
84
|
queryParams.forEach((p) => {
|
|
79
85
|
const safeName = (0, utils_1.sanitizePropertyName)(p.name);
|
|
80
|
-
|
|
86
|
+
const isDeprecated = "deprecated" in p && p.deprecated;
|
|
87
|
+
const hasDescription = "description" in p && p.description;
|
|
88
|
+
const desc = hasDescription || isDeprecated
|
|
89
|
+
? `\n/**${hasDescription ? `\n* ${p.description}` : ""}${isDeprecated ? "\n* @deprecated" : ""}
|
|
90
|
+
*/\n`
|
|
91
|
+
: "";
|
|
92
|
+
dataProps.push(`${desc}${safeName}${p.required ? "" : "?"}: ${(0, utils_1.getTypeFromSchema)(p.schema)}`);
|
|
81
93
|
});
|
|
82
94
|
// Add request body type if it exists
|
|
83
95
|
const hasData = (parameters && parameters.length > 0) || requestBody;
|
package/dist/utils.js
CHANGED
|
@@ -83,6 +83,11 @@ function getTypeFromSchema(schema) {
|
|
|
83
83
|
const nullable = "nullable" in schema && schema.nullable ? " | null" : "";
|
|
84
84
|
// Handle enums as union types
|
|
85
85
|
if ("enum" in schema && schema.enum) {
|
|
86
|
+
if (Object.values(schema.enum)?.length > 0) {
|
|
87
|
+
return (Object.values(schema.enum)
|
|
88
|
+
.map((e) => (typeof e === "string" ? `'${e}'` : e))
|
|
89
|
+
.join(" | ") + nullable);
|
|
90
|
+
}
|
|
86
91
|
return schema.enum.map((e) => (typeof e === "string" ? `'${e}'` : e)).join(" | ") + nullable;
|
|
87
92
|
}
|
|
88
93
|
// Handle types based on the "type" property
|
|
@@ -112,7 +117,13 @@ function getTypeFromSchema(schema) {
|
|
|
112
117
|
const isRequired = schema.required?.includes(key);
|
|
113
118
|
const propertyType = getTypeFromSchema(prop);
|
|
114
119
|
const safeName = sanitizePropertyName(key);
|
|
115
|
-
|
|
120
|
+
const isDeprecated = "deprecated" in prop && prop.deprecated;
|
|
121
|
+
const hasDescription = "description" in prop && prop.description;
|
|
122
|
+
const desc = hasDescription || isDeprecated
|
|
123
|
+
? `/**${hasDescription ? `\n* ${prop.description}` : ""}${isDeprecated ? "\n* @deprecated" : ""}
|
|
124
|
+
*/\n`
|
|
125
|
+
: "";
|
|
126
|
+
return `${desc}${safeName}${isRequired ? "" : "?"}: ${propertyType};`;
|
|
116
127
|
})
|
|
117
128
|
.join("\n");
|
|
118
129
|
return `{${properties}\n}${nullable}`;
|
package/package.json
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import type { OpenAPIV3 } from "openapi-types";
|
|
2
|
-
import {
|
|
3
|
-
camelCase,
|
|
4
|
-
getTypeFromSchema,
|
|
5
|
-
pascalCase,
|
|
6
|
-
sanitizePropertyName,
|
|
7
|
-
sanitizeTypeName,
|
|
8
|
-
specTitle,
|
|
9
|
-
} from "../utils";
|
|
2
|
+
import { camelCase, pascalCase, sanitizeTypeName, specTitle } from "../utils";
|
|
10
3
|
|
|
11
4
|
export interface OperationInfo {
|
|
12
5
|
method: string;
|
|
@@ -93,35 +86,10 @@ function generateAxiosMethod(operation: OperationInfo, spec: OpenAPIV3.Document)
|
|
|
93
86
|
|
|
94
87
|
const requestBodySchema = content ? resolveSchema(content, spec) : undefined;
|
|
95
88
|
|
|
96
|
-
// Build data type parts
|
|
97
|
-
const dataProps: string[] = [];
|
|
98
|
-
|
|
99
|
-
// Add path and query parameters
|
|
100
|
-
urlParams.forEach((p) => {
|
|
101
|
-
const safeName = sanitizePropertyName(p.name);
|
|
102
|
-
dataProps.push(`${safeName}: ${getTypeFromSchema(p.schema)}`);
|
|
103
|
-
});
|
|
104
|
-
queryParams.forEach((p) => {
|
|
105
|
-
const safeName = sanitizePropertyName(p.name);
|
|
106
|
-
dataProps.push(`${safeName}${p.required ? "" : "?"}: ${getTypeFromSchema(p.schema)}`);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
89
|
// Add request body type if it exists
|
|
110
90
|
const hasData = (parameters && parameters.length > 0) || operation.requestBody;
|
|
111
91
|
|
|
112
|
-
let dataType = "undefined";
|
|
113
92
|
const namedType = pascalCase(operationId);
|
|
114
|
-
if (hasData) {
|
|
115
|
-
if (requestBody && dataProps.length > 0) {
|
|
116
|
-
dataType = `T.${namedType}Request & { ${dataProps.join("; ")} }`;
|
|
117
|
-
} else if (requestBody) {
|
|
118
|
-
dataType = `T.${namedType}Request`;
|
|
119
|
-
} else if (dataProps.length > 0) {
|
|
120
|
-
dataType = `{ ${dataProps.join("; ")} }`;
|
|
121
|
-
} else {
|
|
122
|
-
dataType = "Record<string, never>";
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
93
|
|
|
126
94
|
// Get response type from 2xx response
|
|
127
95
|
|
|
@@ -91,13 +91,27 @@ export function generateTypeDefinitions(spec: OpenAPIV3.Document): string {
|
|
|
91
91
|
// Add path and query parameters
|
|
92
92
|
urlParams.forEach((p) => {
|
|
93
93
|
const safeName = sanitizePropertyName(p.name);
|
|
94
|
-
|
|
94
|
+
const isDeprecated = "deprecated" in p && p.deprecated;
|
|
95
|
+
const hasDescription = "description" in p && p.description;
|
|
96
|
+
const desc =
|
|
97
|
+
hasDescription || isDeprecated
|
|
98
|
+
? `/**${hasDescription ? `\n* ${p.description}` : ""}${isDeprecated ? "\n* @deprecated" : ""}
|
|
99
|
+
*/\n`
|
|
100
|
+
: "";
|
|
101
|
+
dataProps.push(`${desc}${safeName}: ${getTypeFromSchema(p.schema)}`);
|
|
95
102
|
});
|
|
103
|
+
|
|
96
104
|
queryParams.forEach((p) => {
|
|
97
105
|
const safeName = sanitizePropertyName(p.name);
|
|
98
|
-
|
|
106
|
+
const isDeprecated = "deprecated" in p && p.deprecated;
|
|
107
|
+
const hasDescription = "description" in p && p.description;
|
|
108
|
+
const desc =
|
|
109
|
+
hasDescription || isDeprecated
|
|
110
|
+
? `\n/**${hasDescription ? `\n* ${p.description}` : ""}${isDeprecated ? "\n* @deprecated" : ""}
|
|
111
|
+
*/\n`
|
|
112
|
+
: "";
|
|
113
|
+
dataProps.push(`${desc}${safeName}${p.required ? "" : "?"}: ${getTypeFromSchema(p.schema)}`);
|
|
99
114
|
});
|
|
100
|
-
|
|
101
115
|
// Add request body type if it exists
|
|
102
116
|
const hasData = (parameters && parameters.length > 0) || requestBody;
|
|
103
117
|
|
package/src/utils.ts
CHANGED
|
@@ -85,6 +85,13 @@ export function getTypeFromSchema(
|
|
|
85
85
|
|
|
86
86
|
// Handle enums as union types
|
|
87
87
|
if ("enum" in schema && schema.enum) {
|
|
88
|
+
if (Object.values(schema.enum)?.length > 0) {
|
|
89
|
+
return (
|
|
90
|
+
Object.values(schema.enum)
|
|
91
|
+
.map((e) => (typeof e === "string" ? `'${e}'` : e))
|
|
92
|
+
.join(" | ") + nullable
|
|
93
|
+
);
|
|
94
|
+
}
|
|
88
95
|
return schema.enum.map((e) => (typeof e === "string" ? `'${e}'` : e)).join(" | ") + nullable;
|
|
89
96
|
}
|
|
90
97
|
|
|
@@ -119,7 +126,14 @@ export function getTypeFromSchema(
|
|
|
119
126
|
const isRequired = schema.required?.includes(key);
|
|
120
127
|
const propertyType = getTypeFromSchema(prop);
|
|
121
128
|
const safeName = sanitizePropertyName(key);
|
|
122
|
-
|
|
129
|
+
const isDeprecated = "deprecated" in prop && prop.deprecated;
|
|
130
|
+
const hasDescription = "description" in prop && prop.description;
|
|
131
|
+
const desc =
|
|
132
|
+
hasDescription || isDeprecated
|
|
133
|
+
? `/**${hasDescription ? `\n* ${prop.description}` : ""}${isDeprecated ? "\n* @deprecated" : ""}
|
|
134
|
+
*/\n`
|
|
135
|
+
: "";
|
|
136
|
+
return `${desc}${safeName}${isRequired ? "" : "?"}: ${propertyType};`;
|
|
123
137
|
})
|
|
124
138
|
.join("\n");
|
|
125
139
|
return `{${properties}\n}${nullable}`;
|