Skip to content

Commit cfccff7

Browse files
authored
fix: generation, bump react-query (#59)
* feat: support for zod null type * fix: conditional property access * chore: update react-query version * fix: tests * chore: bump version
1 parent ec756df commit cfccff7

File tree

10 files changed

+32
-22
lines changed

10 files changed

+32
-22
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@povio/openapi-codegen-cli",
3-
"version": "2.0.6",
3+
"version": "2.0.7",
44
"keywords": [
55
"codegen",
66
"openapi",
@@ -70,7 +70,7 @@
7070
"@apidevtools/swagger-parser": "^10.1.0",
7171
"@casl/ability": "^6.7.3",
7272
"@casl/react": "^5.0.0",
73-
"@tanstack/react-query": "~5.85.9",
73+
"@tanstack/react-query": "~5.90.21",
7474
"@types/node": "^20.12.12",
7575
"@types/prompt-sync": "^4.2.3",
7676
"@types/react": "^19.1.0",
@@ -100,7 +100,7 @@
100100
"peerDependencies": {
101101
"@casl/ability": "^6.7.3",
102102
"@casl/react": "^5.0.0",
103-
"@tanstack/react-query": "^5.85.9",
103+
"@tanstack/react-query": "^5.90.21",
104104
"axios": "^1.13.1",
105105
"react": "^19.1.0",
106106
"zod": "^4.1.12"

src/generators/core/SchemaResolver.class.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ export class SchemaResolver {
366366

367367
for (const statusCode in operation.responses) {
368368
const responseObj = <OpenAPIV3.ResponseObject>this.resolveObject(operation.responses[statusCode]);
369-
const mediaTypes = Object.keys(responseObj.content ?? {});
369+
const mediaTypes = Object.keys(responseObj?.content ?? {});
370370
const matchingMediaType = mediaTypes.find(isMediaTypeAllowed);
371371
if (matchingMediaType) {
372372
const matchingMediaSchema = responseObj.content?.[matchingMediaType]?.schema;

src/generators/core/endpoints/getEndpointParameter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function getEndpointParameter({
4646
throw new Error(`Unsupported media type for param ${paramObj.name}: ${mediaTypes.join(", ")}`);
4747
}
4848

49-
const mediaTypeObject = paramObj.content[matchingMediaType];
49+
const mediaTypeObject = paramObj.content?.[matchingMediaType];
5050
if (!mediaTypeObject) {
5151
throw new Error(`No content with media type for param ${paramObj.name}: ${matchingMediaType}`);
5252
}

src/generators/core/endpoints/getEndpointsFromOpenAPIDoc.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export function getEndpointsFromOpenAPIDoc(resolver: SchemaResolver) {
121121
endpoint.responseStatusCodes.push(statusCode);
122122

123123
const responseObj = <OpenAPIV3.ResponseObject>resolver.resolveObject(operation.responses[statusCode]);
124-
const mediaTypes = Object.keys(responseObj.content ?? {});
124+
const mediaTypes = Object.keys(responseObj?.content ?? {});
125125
const matchingMediaType = mediaTypes.find(isMediaTypeAllowed);
126126

127127
let schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject | undefined;
@@ -168,12 +168,12 @@ export function getEndpointsFromOpenAPIDoc(resolver: SchemaResolver) {
168168
if (isMainResponseStatus(status) && !endpoint.response) {
169169
endpoint.response = responseZodSchema;
170170
endpoint.responseObject = responseObj;
171-
endpoint.responseDescription = responseObj.description;
171+
endpoint.responseDescription = responseObj?.description;
172172
} else if (statusCode !== "default" && isErrorStatus(status)) {
173173
endpoint.errors.push({
174174
zodSchema: responseZodSchema,
175175
status,
176-
description: responseObj.description,
176+
description: responseObj?.description,
177177
});
178178
}
179179
}

src/generators/core/zod/getZodSchema.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ export function getZodSchema({ schema, resolver, meta: inheritedMeta, tag }: Get
179179
return zodSchema.assign(ANY_SCHEMA);
180180
}
181181

182+
if ((schemaType as unknown) === "null") {
183+
return zodSchema.assign("z.null()");
184+
}
185+
182186
if (!schemaType) {
183187
return zodSchema.assign("z.unknown()");
184188
}

src/generators/utils/generate/generate.acl.utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const hasAbilityConditions = (endpoint: Endpoint) => !!getAbilityConditio
2727
export const getAbilityConditionsTypes = (endpoint: Endpoint) =>
2828
endpoint.acl?.[0].conditionsTypes?.sort((a, b) => a.name.localeCompare(b.name));
2929

30-
export const getAbilityDescription = (endpoint: Endpoint) => endpoint.acl?.[0].description;
30+
export const getAbilityDescription = (endpoint: Endpoint) => endpoint.acl?.[0]?.description;
3131

3232
export const getAbilitySubjectTypes = (endpoint: Endpoint) => {
3333
const abilitySubject = getAbilitySubject(endpoint);

src/generators/utils/generate/generate.configs.utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ function getInputsConfig(resolver: SchemaResolver, endpointParameter?: EndpointP
241241

242242
let schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined;
243243
if (endpointParameter.type === "Body") {
244-
schema = endpointParameter.bodyObject?.content[JSON_APPLICATION_FORMAT]?.schema;
244+
schema = endpointParameter.bodyObject?.content?.[JSON_APPLICATION_FORMAT]?.schema;
245245
} else {
246246
schema = endpointParameter.parameterObject?.schema;
247247
}

src/generators/utils/generate/generate.zod.utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export function getZodSchemaPropertyDescriptions(resolver: SchemaResolver, data:
104104

105105
if (schemaData.schema && segments[segments.length - 1] !== ARRAY_INDEX) {
106106
const resolvedSchema = resolver.resolveObject(schemaData.schema);
107-
const schemaDescriptions = [resolvedSchema.description, ...getSchemaDescriptions(resolvedSchema)].filter(Boolean);
107+
const schemaDescriptions = [resolvedSchema?.description, ...getSchemaDescriptions(resolvedSchema)].filter(Boolean);
108108
const propertyKey = segments.join(".");
109109
if (!(properties[propertyKey] && "type" in schemaData.schema && schemaData.schema.type === "object")) {
110110
delete properties[propertyKey];

vitest.config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
/// <reference types="vitest" />
22

33
import { defineConfig } from "vitest/config";
4+
import { resolve } from "path";
45

56
// https://vitejs.dev/config/
67
export default defineConfig({
78
test: {
89
include: ["src/**/*.test.ts"],
910
snapshotFormat: { indent: 4, escapeString: false },
1011
},
12+
resolve: {
13+
alias: {
14+
"@": resolve(process.cwd(), "./src"),
15+
},
16+
},
1117
});

yarn.lock

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,7 +1345,7 @@ __metadata:
13451345
"@apidevtools/swagger-parser": "npm:^10.1.0"
13461346
"@casl/ability": "npm:^6.7.3"
13471347
"@casl/react": "npm:^5.0.0"
1348-
"@tanstack/react-query": "npm:~5.85.9"
1348+
"@tanstack/react-query": "npm:~5.90.21"
13491349
"@types/node": "npm:^20.12.12"
13501350
"@types/prompt-sync": "npm:^4.2.3"
13511351
"@types/react": "npm:^19.1.0"
@@ -1376,7 +1376,7 @@ __metadata:
13761376
peerDependencies:
13771377
"@casl/ability": ^6.7.3
13781378
"@casl/react": ^5.0.0
1379-
"@tanstack/react-query": ^5.85.9
1379+
"@tanstack/react-query": ^5.90.21
13801380
axios: ^1.13.1
13811381
react: ^19.1.0
13821382
zod: ^4.1.12
@@ -1792,21 +1792,21 @@ __metadata:
17921792
languageName: node
17931793
linkType: hard
17941794

1795-
"@tanstack/query-core@npm:5.85.9":
1796-
version: 5.85.9
1797-
resolution: "@tanstack/query-core@npm:5.85.9"
1798-
checksum: 10c0/c7a02e816f49e2b0c8cfc7db1541742d85e6aca82c67f849813b352800dc225dbf89d506c3187c9ffb5643bb0b0309255b03b039fbffaae293415850baaae2ab
1795+
"@tanstack/query-core@npm:5.90.20":
1796+
version: 5.90.20
1797+
resolution: "@tanstack/query-core@npm:5.90.20"
1798+
checksum: 10c0/70637dfcecd5ed9d810629aa27f1632af8a4bcd083e75cf29408d058c32f8234704a3231ec280e2c4016ea0485b16124fdf70ab97793b5a7b670f43f7659e9fe
17991799
languageName: node
18001800
linkType: hard
18011801

1802-
"@tanstack/react-query@npm:~5.85.9":
1803-
version: 5.85.9
1804-
resolution: "@tanstack/react-query@npm:5.85.9"
1802+
"@tanstack/react-query@npm:~5.90.21":
1803+
version: 5.90.21
1804+
resolution: "@tanstack/react-query@npm:5.90.21"
18051805
dependencies:
1806-
"@tanstack/query-core": "npm:5.85.9"
1806+
"@tanstack/query-core": "npm:5.90.20"
18071807
peerDependencies:
18081808
react: ^18 || ^19
1809-
checksum: 10c0/d20f418567812bc2417784d2da319f59f3f7ab96deba47e18aae59716c8499c85b7eb5b10ff5463958fb3f07043facbf2a815d541bafb644e8a339a8d4f5a88f
1809+
checksum: 10c0/e8994c57f6ceb2c886a4d6486a8c6a3f89bc6b1220de3e732448d7fcbeb386e9358f03c73804de72004c6ac2668d0bf1b44cedbb273d3e4b33afcbaee7b7d24d
18101810
languageName: node
18111811
linkType: hard
18121812

0 commit comments

Comments
 (0)