Skip to content

Commit 428bc48

Browse files
committed
add splitParamters and support for abortSignal
1 parent 8e0ec11 commit 428bc48

File tree

15 files changed

+87
-9
lines changed

15 files changed

+87
-9
lines changed

bin/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const params = program
1515
.option('-c, --client <value>', 'HTTP client to generate [fetch, xhr, node, axios, angular]', 'fetch')
1616
.option('--name <value>', 'Custom client class name')
1717
.option('--useOptions', 'Use options instead of arguments')
18+
.option('--splitParameters', 'User arguments for path parameters and options for query parameters')
1819
.option('--useUnionTypes', 'Use union types instead of enums')
1920
.option('--exportCore <value>', 'Write core files to disk', true)
2021
.option('--exportServices <value>', 'Write services to disk', true)
@@ -36,6 +37,7 @@ if (OpenAPI) {
3637
httpClient: params.client,
3738
clientName: params.name,
3839
useOptions: params.useOptions,
40+
splitParameters: params.splitParameters,
3941
useUnionTypes: params.useUnionTypes,
4042
exportCore: JSON.parse(params.exportCore) === true,
4143
exportServices: JSON.parse(params.exportServices) === true,

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"eslint": "eslint .",
4747
"eslint:fix": "eslint . --fix",
4848
"prepare": "npm run clean && npm run release",
49-
"generate-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client axios"
49+
"generate-spa-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client fetch --splitParameters",
50+
"generate-ide-codacy": "npm run build && rimraf ./generated && node ./bin/index.js --input ./samples/spec/codacy-api.yaml --output ./generated --useUnionTypes --indent 2 --client axios"
5051
},
5152
"dependencies": {
5253
"@apidevtools/json-schema-ref-parser": "^10.1.0",

src/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export type Options = {
1818
httpClient?: HttpClient;
1919
clientName?: string;
2020
useOptions?: boolean;
21+
splitParameters?: boolean;
2122
useUnionTypes?: boolean;
2223
exportCore?: boolean;
2324
exportServices?: boolean;
@@ -39,6 +40,7 @@ export type Options = {
3940
* @param httpClient The selected httpClient (fetch, xhr, node or axios)
4041
* @param clientName Custom client class name
4142
* @param useOptions Use options or arguments functions
43+
* @param splitParameters User arguments for path parameters and options for query parameters
4244
* @param useUnionTypes Use union types instead of enums
4345
* @param exportCore Generate core client classes
4446
* @param exportServices Generate services
@@ -56,6 +58,7 @@ export const generate = async ({
5658
httpClient = HttpClient.FETCH,
5759
clientName,
5860
useOptions = false,
61+
splitParameters = false,
5962
useUnionTypes = false,
6063
exportCore = true,
6164
exportServices = true,
@@ -86,6 +89,7 @@ export const generate = async ({
8689
output,
8790
httpClient,
8891
useOptions,
92+
splitParameters,
8993
useUnionTypes,
9094
exportCore,
9195
exportServices,
@@ -110,6 +114,7 @@ export const generate = async ({
110114
output,
111115
httpClient,
112116
useOptions,
117+
splitParameters,
113118
useUnionTypes,
114119
exportCore,
115120
exportServices,

src/templates/core/ApiRequestOptions.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ export type ApiRequestOptions = {
1212
readonly mediaType?: string;
1313
readonly responseHeader?: string;
1414
readonly errors?: Record<number, string>;
15+
readonly abortSignal?: AbortSignal;
1516
};

src/templates/core/fetch/sendRequest.hbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ export const sendRequest = async (
99
): Promise<Response> => {
1010
const controller = new AbortController();
1111

12+
const combinedSignal = AbortSignal.any(controller.signal, options.abortSignal);
13+
1214
const request: RequestInit = {
1315
headers,
1416
body: body ?? formData,
1517
method: options.method,
16-
signal: controller.signal,
18+
signal: combinedSignal,
1719
};
1820

1921
if (config.WITH_CREDENTIALS) {

src/templates/core/node/sendRequest.hbs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ export const sendRequest = async (
88
): Promise<Response> => {
99
const controller = new AbortController();
1010

11+
const combinedSignal = AbortSignal.any(controller.signal, options.abortSignal);
12+
1113
const request: RequestInit = {
1214
headers,
1315
method: options.method,
1416
body: body ?? formData,
15-
signal: controller.signal as AbortSignal,
17+
signal: combinedSignal as AbortSignal,
1618
};
1719

1820
onCancel(() => controller.abort());

src/templates/exportService.hbs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,13 @@ export class {{{name}}}{{{@root.postfix}}} {
6161
{{#unless @root.useOptions}}
6262
{{#if parameters}}
6363
{{#each parameters}}
64-
* @param {{{name}}} {{#if description}}{{{escapeComment description}}}{{/if}}
64+
{{#if @root.splitParameters~}}
65+
{{#equals in 'path'}}
66+
* @param {{{name}}} {{#if description}}{{{escapeComment description}}}{{/if}}
67+
{{/equals}}
68+
{{~else~}}
69+
* @param {{{name}}} {{#if description}}{{{escapeComment description}}}{{/if}}
70+
{{~/if~}}
6571
{{/each}}
6672
{{/if}}
6773
{{/unless}}
@@ -117,6 +123,7 @@ export class {{{name}}}{{{@root.postfix}}} {
117123
{{/each}}
118124
},
119125
{{/if}}
126+
abortSignal,
120127
{{#if parametersForm}}
121128
formData: {
122129
{{#each parametersForm}}

src/templates/partials/parameters.hbs

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,59 @@
99
{{#ifdef description deprecated}}
1010
/**
1111
{{#if description}}
12-
* {{{escapeComment description}}}
12+
* {{{escapeComment description}}}
1313
{{/if}}
1414
{{#if deprecated}}
15-
* @deprecated
15+
* @deprecated
1616
{{/if}}
17-
*/
17+
*/
1818
{{/ifdef}}
1919
{{{name}}}{{>isRequired}}: {{>type}},
2020
{{/each}}
2121
}
2222
{{~else}}
23-
23+
{{#if @root.splitParameters~}}
2424
{{#each parameters}}
25+
{{#equals in 'path'}}
2526
{{{name}}}{{>isRequired}}: {{>type}}{{#if default}} = {{{default}}}{{/if}},
27+
{{/equals}}
2628
{{/each}}
29+
{
30+
{{#each parameters}}
31+
{{#notEquals in 'path'}}
32+
{{{name}}}{{#if default}} = {{{default}}}{{/if}},
33+
{{/notEquals}}
34+
{{/each}}
35+
abortSignal,
36+
}: {
37+
{{#each parameters}}
38+
{{#notEquals in 'path'}}
39+
{{#ifdef description deprecated}}
40+
/**
41+
{{#if description}}
42+
* {{{escapeComment description}}}
43+
{{/if}}
44+
{{#if deprecated}}
45+
* @deprecated
46+
{{/if}}
47+
*/
48+
{{/ifdef}}
49+
{{{name}}}{{>isRequired}}: {{>type}},
50+
{{/notEquals}}
51+
{{/each}}
52+
abortSignal?: AbortSignal
53+
}
54+
{{~else}}
55+
{{#each parameters}}
56+
{{{name}}}{{>isRequired}}: {{>type}}{{#if default}} = {{{default}}}{{/if}},
57+
{{/each}}
58+
abortSignal?: AbortSignal
59+
{{/if}}
60+
{{/if}}
61+
{{~else}}
62+
{{#if @root.useOptions}}{ abortSignal }: { abortSignal?: AbortSignal }{{~else}}
63+
{{#if @root.splitParameters}}{ abortSignal }: { abortSignal?: AbortSignal }{{~else}}
64+
abortSignal?: AbortSignal
65+
{{/if}}
2766
{{/if}}
2867
{{/if}}

src/utils/writeClient.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ describe('writeClient', () => {
4343
HttpClient.FETCH,
4444
false,
4545
false,
46+
false,
4647
true,
4748
true,
4849
true,

src/utils/writeClient.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export const writeClient = async (
3939
output: string,
4040
httpClient: HttpClient,
4141
useOptions: boolean,
42+
splitParameters: boolean,
4243
useUnionTypes: boolean,
4344
exportCore: boolean,
4445
exportServices: boolean,
@@ -76,6 +77,7 @@ export const writeClient = async (
7677
httpClient,
7778
useUnionTypes,
7879
useOptions,
80+
splitParameters,
7981
indent,
8082
postfixServices,
8183
clientName

0 commit comments

Comments
 (0)