Skip to content

Commit 4a12688

Browse files
Add unionUndefined Option to rtk-query-codegen-openapi (#2376)
* oazapfts -> @kahirokunn/oazapfts To use unionUndefined option: #2135 * Add unionUndefined Option to rtk-query-codegen-openapi * yarn test:update * Use @rtk-query/oazapfts-patched Co-authored-by: Matt Sutkowski <msutkowski@gmail.com>
1 parent a955c50 commit 4a12688

File tree

8 files changed

+178
-115
lines changed

8 files changed

+178
-115
lines changed

packages/rtk-query-codegen-openapi/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@
5656
},
5757
"dependencies": {
5858
"@apidevtools/swagger-parser": "^10.0.2",
59+
"@rtk-query/oazapfts-patched": "^3.6.0-2",
5960
"commander": "^6.2.0",
60-
"oazapfts": "^3.5.0",
6161
"prettier": "^2.2.1",
6262
"semver": "^7.3.5",
6363
"swagger2openapi": "^7.0.4",

packages/rtk-query-codegen-openapi/src/generate.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import ApiGenerator, {
66
getReferenceName,
77
isReference,
88
supportDeepObjects,
9-
} from 'oazapfts/lib/codegen/generate';
9+
} from '@rtk-query/oazapfts-patched/lib/codegen/generate';
1010
import {
1111
createQuestionToken,
1212
keywordType,
1313
createPropertyAssignment,
1414
isValidIdentifier,
15-
} from 'oazapfts/lib/codegen/tscodegen';
15+
} from '@rtk-query/oazapfts-patched/lib/codegen/tscodegen';
1616
import type { OpenAPIV3 } from 'openapi-types';
1717
import { generateReactHooks } from './generators/react-hooks';
1818
import type { EndpointMatcher, EndpointOverrides, GenerationOptions, OperationDefinition, TextMatcher } from './types';
@@ -71,11 +71,14 @@ export async function generateApi(
7171
isDataResponse = defaultIsDataResponse,
7272
filterEndpoints,
7373
endpointOverrides,
74+
unionUndefined,
7475
}: GenerationOptions
7576
) {
7677
const v3Doc = await getV3Doc(spec);
7778

78-
const apiGen = new ApiGenerator(v3Doc, {});
79+
const apiGen = new ApiGenerator(v3Doc, {
80+
unionUndefined,
81+
});
7982

8083
const operationDefinitions = getOperationDefinitions(v3Doc).filter(operationMatches(filterEndpoints));
8184

@@ -102,7 +105,7 @@ export async function generateApi(
102105
outputFile = path.resolve(process.cwd(), outputFile);
103106
if (apiFile.startsWith('.')) {
104107
apiFile = path.relative(path.dirname(outputFile), apiFile);
105-
apiFile = apiFile.replace(/\\/g, '/')
108+
apiFile = apiFile.replace(/\\/g, '/');
106109
if (!apiFile.startsWith('.')) apiFile = './' + apiFile;
107110
}
108111
}

packages/rtk-query-codegen-openapi/src/generators/react-hooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import ts from 'typescript';
2-
import { getOperationName } from 'oazapfts/lib/codegen/generate';
2+
import { getOperationName } from '@rtk-query/oazapfts-patched/lib/codegen/generate';
33
import { capitalize, isQuery } from '../utils';
44
import type { OperationDefinition, EndpointOverrides } from '../types';
55
import { getOverrides } from '../generate';

packages/rtk-query-codegen-openapi/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function parseConfig(fullConfig: ConfigFile) {
4646
* That should prevent enums from running out of sync if both libraries use different TS versions.
4747
*/
4848
function enforceOazapftsTsVersion<T>(cb: () => T): T {
49-
const ozTsPath = require.resolve('typescript', { paths: [require.resolve('oazapfts')] });
49+
const ozTsPath = require.resolve('typescript', { paths: [require.resolve('@rtk-query/oazapfts-patched')] });
5050
const tsPath = require.resolve('typescript');
5151
const originalEntry = require.cache[ozTsPath];
5252
try {

packages/rtk-query-codegen-openapi/src/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ export interface CommonOptions {
5151
* defaults to false
5252
*/
5353
hooks?: boolean;
54+
55+
/**
56+
* defaults to false
57+
*/
58+
unionUndefined?: boolean;
5459
}
5560

5661
export type TextMatcher = string | RegExp | (string | RegExp)[];

packages/rtk-query-codegen-openapi/test/__snapshots__/generateEndpoints.test.ts.snap

Lines changed: 89 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -222,43 +222,43 @@ export type DeleteUserApiArg = {
222222
username: string;
223223
};
224224
export type Category = {
225-
id?: number;
226-
name?: string;
225+
id?: number | undefined;
226+
name?: string | undefined;
227227
};
228228
export type Tag = {
229-
id?: number;
230-
name?: string;
229+
id?: number | undefined;
230+
name?: string | undefined;
231231
};
232232
export type Pet = {
233-
id?: number;
233+
id?: number | undefined;
234234
name: string;
235-
category?: Category;
235+
category?: Category | undefined;
236236
photoUrls: string[];
237-
tags?: Tag[];
238-
status?: 'available' | 'pending' | 'sold';
237+
tags?: Tag[] | undefined;
238+
status?: ('available' | 'pending' | 'sold') | undefined;
239239
};
240240
export type ApiResponse = {
241-
code?: number;
242-
type?: string;
243-
message?: string;
241+
code?: number | undefined;
242+
type?: string | undefined;
243+
message?: string | undefined;
244244
};
245245
export type Order = {
246-
id?: number;
247-
petId?: number;
248-
quantity?: number;
249-
shipDate?: string;
250-
status?: 'placed' | 'approved' | 'delivered';
251-
complete?: boolean;
246+
id?: number | undefined;
247+
petId?: number | undefined;
248+
quantity?: number | undefined;
249+
shipDate?: string | undefined;
250+
status?: ('placed' | 'approved' | 'delivered') | undefined;
251+
complete?: boolean | undefined;
252252
};
253253
export type User = {
254-
id?: number;
255-
username?: string;
256-
firstName?: string;
257-
lastName?: string;
258-
email?: string;
259-
password?: string;
260-
phone?: string;
261-
userStatus?: number;
254+
id?: number | undefined;
255+
username?: string | undefined;
256+
firstName?: string | undefined;
257+
lastName?: string | undefined;
258+
email?: string | undefined;
259+
password?: string | undefined;
260+
phone?: string | undefined;
261+
userStatus?: number | undefined;
262262
};
263263

264264
`;
@@ -315,12 +315,12 @@ export type LoginUserApiArg = {
315315
password?: string;
316316
};
317317
export type Order = {
318-
id?: number;
319-
petId?: number;
320-
quantity?: number;
321-
shipDate?: string;
322-
status?: 'placed' | 'approved' | 'delivered';
323-
complete?: boolean;
318+
id?: number | undefined;
319+
petId?: number | undefined;
320+
quantity?: number | undefined;
321+
shipDate?: string | undefined;
322+
status?: ('placed' | 'approved' | 'delivered') | undefined;
323+
complete?: boolean | undefined;
324324
};
325325

326326
`;
@@ -405,20 +405,20 @@ export type GetPetByIdApiArg = {
405405
petId: number;
406406
};
407407
export type Category = {
408-
id?: number;
409-
name?: string;
408+
id?: number | undefined;
409+
name?: string | undefined;
410410
};
411411
export type Tag = {
412-
id?: number;
413-
name?: string;
412+
id?: number | undefined;
413+
name?: string | undefined;
414414
};
415415
export type Pet = {
416-
id?: number;
416+
id?: number | undefined;
417417
name: string;
418-
category?: Category;
418+
category?: Category | undefined;
419419
photoUrls: string[];
420-
tags?: Tag[];
421-
status?: 'available' | 'pending' | 'sold';
420+
tags?: Tag[] | undefined;
421+
status?: ('available' | 'pending' | 'sold') | undefined;
422422
};
423423
export const { useAddPetMutation, useGetPetByIdQuery } = injectedRtkApi;
424424

@@ -660,43 +660,43 @@ export type DeleteUserApiArg = {
660660
username: string;
661661
};
662662
export type Category = {
663-
id?: number;
664-
name?: string;
663+
id?: number | undefined;
664+
name?: string | undefined;
665665
};
666666
export type Tag = {
667-
id?: number;
668-
name?: string;
667+
id?: number | undefined;
668+
name?: string | undefined;
669669
};
670670
export type Pet = {
671-
id?: number;
671+
id?: number | undefined;
672672
name: string;
673-
category?: Category;
673+
category?: Category | undefined;
674674
photoUrls: string[];
675-
tags?: Tag[];
676-
status?: 'available' | 'pending' | 'sold';
675+
tags?: Tag[] | undefined;
676+
status?: ('available' | 'pending' | 'sold') | undefined;
677677
};
678678
export type ApiResponse = {
679-
code?: number;
680-
type?: string;
681-
message?: string;
679+
code?: number | undefined;
680+
type?: string | undefined;
681+
message?: string | undefined;
682682
};
683683
export type Order = {
684-
id?: number;
685-
petId?: number;
686-
quantity?: number;
687-
shipDate?: string;
688-
status?: 'placed' | 'approved' | 'delivered';
689-
complete?: boolean;
684+
id?: number | undefined;
685+
petId?: number | undefined;
686+
quantity?: number | undefined;
687+
shipDate?: string | undefined;
688+
status?: ('placed' | 'approved' | 'delivered') | undefined;
689+
complete?: boolean | undefined;
690690
};
691691
export type User = {
692-
id?: number;
693-
username?: string;
694-
firstName?: string;
695-
lastName?: string;
696-
email?: string;
697-
password?: string;
698-
phone?: string;
699-
userStatus?: number;
692+
id?: number | undefined;
693+
username?: string | undefined;
694+
firstName?: string | undefined;
695+
lastName?: string | undefined;
696+
email?: string | undefined;
697+
password?: string | undefined;
698+
phone?: string | undefined;
699+
userStatus?: number | undefined;
700700
};
701701
export const {
702702
useUpdatePetMutation,
@@ -983,43 +983,43 @@ export type DeleteUserApiArg = {
983983
username: string;
984984
};
985985
export type Category = {
986-
id?: number;
987-
name?: string;
986+
id?: number | undefined;
987+
name?: string | undefined;
988988
};
989989
export type Tag = {
990-
id?: number;
991-
name?: string;
990+
id?: number | undefined;
991+
name?: string | undefined;
992992
};
993993
export type Pet = {
994-
id?: number;
994+
id?: number | undefined;
995995
name: string;
996-
category?: Category;
996+
category?: Category | undefined;
997997
photoUrls: string[];
998-
tags?: Tag[];
999-
status?: 'available' | 'pending' | 'sold';
998+
tags?: Tag[] | undefined;
999+
status?: ('available' | 'pending' | 'sold') | undefined;
10001000
};
10011001
export type ApiResponse = {
1002-
code?: number;
1003-
type?: string;
1004-
message?: string;
1002+
code?: number | undefined;
1003+
type?: string | undefined;
1004+
message?: string | undefined;
10051005
};
10061006
export type Order = {
1007-
id?: number;
1008-
petId?: number;
1009-
quantity?: number;
1010-
shipDate?: string;
1011-
status?: 'placed' | 'approved' | 'delivered';
1012-
complete?: boolean;
1007+
id?: number | undefined;
1008+
petId?: number | undefined;
1009+
quantity?: number | undefined;
1010+
shipDate?: string | undefined;
1011+
status?: ('placed' | 'approved' | 'delivered') | undefined;
1012+
complete?: boolean | undefined;
10131013
};
10141014
export type User = {
1015-
id?: number;
1016-
username?: string;
1017-
firstName?: string;
1018-
lastName?: string;
1019-
email?: string;
1020-
password?: string;
1021-
phone?: string;
1022-
userStatus?: number;
1015+
id?: number | undefined;
1016+
username?: string | undefined;
1017+
firstName?: string | undefined;
1018+
lastName?: string | undefined;
1019+
email?: string | undefined;
1020+
password?: string | undefined;
1021+
phone?: string | undefined;
1022+
userStatus?: number | undefined;
10231023
};
10241024
export const {
10251025
useUpdatePetMutation,

0 commit comments

Comments
 (0)