Skip to content

Commit 9bf43e2

Browse files
authored
Merge pull request #34 from nicolas-chaulet/feat/response-headers-2
refactor(types): allow passing config
2 parents d5e382c + 07e0240 commit 9bf43e2

17 files changed

+898
-236
lines changed

src/templates/core/ApiResult.hbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{{>header}}
22

3-
export type ApiResult = {
4-
readonly url: string;
3+
export type ApiResult<TData = any> = {
4+
readonly body: TData;
55
readonly ok: boolean;
66
readonly status: number;
77
readonly statusText: string;
8-
readonly body: any;
8+
readonly url: string;
99
};

src/templates/core/types.hbs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{{>header}}
2+
3+
import type { ApiResult } from './ApiResult';
4+
5+
export type TResult = 'body' | 'raw';
6+
7+
export type TApiResponse<T extends TResult, TData> =
8+
Exclude<T, 'raw'> extends never
9+
? ApiResult<TData>
10+
: ApiResult<TData>['body'];
11+
12+
export type TConfig<T extends TResult> = {
13+
_result?: T;
14+
};

src/templates/exportService.hbs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ import type { BaseHttpRequest } from '../core/BaseHttpRequest';
2929
{{else}}
3030
import { OpenAPI } from '../core/OpenAPI';
3131
import { request as __request } from '../core/request';
32+
{{#if @root.useOptions}}
33+
import type { TApiResponse, TConfig, TResult } from '../core/types';
34+
{{/if}}
3235
{{/if}}
3336

3437
{{#if @root.useOptions}}
@@ -84,21 +87,21 @@ export class {{{name}}}{{{@root.postfix}}} {
8487
*/
8588
{{#if @root.exportClient}}
8689
{{#equals @root.httpClient 'angular'}}
87-
public {{{name}}}({{>parameters}}): Observable<{{>result}}> {
90+
public {{{name}}}{{>operationTypes}}({{>operationParameters}}): Observable<{{>operationResult}}> {
8891
{{>destructureData}}
8992
return this.httpRequest.request({
9093
{{else}}
91-
public {{{name}}}({{>parameters}}): CancelablePromise<{{>result}}> {
94+
public {{{name}}}{{>operationTypes}}({{>operationParameters}}): CancelablePromise<{{>operationResult}}> {
9295
{{>destructureData}}
9396
return this.httpRequest.request({
9497
{{/equals}}
9598
{{else}}
9699
{{#equals @root.httpClient 'angular'}}
97-
public {{{name}}}({{>parameters}}): Observable<{{>result}}> {
100+
public {{{name}}}{{>operationTypes}}({{>operationParameters}}): Observable<{{>operationResult}}> {
98101
{{>destructureData}}
99102
return __request(OpenAPI, this.http, {
100103
{{else}}
101-
public static {{{name}}}({{>parameters}}): CancelablePromise<{{>result}}> {
104+
public static {{{name}}}{{>operationTypes}}({{>operationParameters}}): CancelablePromise<{{>operationResult}}> {
102105
{{>destructureData}}
103106
return __request(OpenAPI, {
104107
{{/equals}}

src/templates/partials/parameters.hbs renamed to src/templates/partials/operationParameters.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
{{#if parameters}}
21
{{#if @root.useOptions~}}
3-
data: {{{nameOperationDataType name}}}{{#ifOperationDataOptional parameters}} = {}{{/ifOperationDataOptional}}
2+
data: {{#if parameters}}{{{nameOperationDataType name}}} & {{/if}}TConfig<T>{{#ifOperationDataOptional parameters}} = {}{{/ifOperationDataOptional}}
43
{{~else}}
4+
{{#if parameters}}
55

66
{{#each parameters}}
77
{{{name}}}{{>isRequired}}: {{>type}}{{#if default}} = {{{default}}}{{/if}},
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
{{~#if @root.useOptions~}}
2+
TApiResponse<T, {{/if~}}
13
{{~#if results~}}
24
{{#each results}}{{>type}}{{#unless @last}} | {{/unless}}{{/each}}
35
{{~else~}}
46
void
57
{{~/if~}}
8+
{{~#if @root.useOptions~}}
9+
>
10+
{{~/if~}}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{{#if @root.useOptions~}}
2+
<T extends TResult>
3+
{{~/if}}

src/utils/registerHandlebarTemplates.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import nodeRequest from '../templates/core/node/request.hbs';
4545
import nodeSendRequest from '../templates/core/node/sendRequest.hbs';
4646
import templateCoreSettings from '../templates/core/OpenAPI.hbs';
4747
import templateCoreRequest from '../templates/core/request.hbs';
48+
import templateCoreTypes from '../templates/core/types.hbs';
4849
import xhrGetHeaders from '../templates/core/xhr/getHeaders.hbs';
4950
import xhrGetRequestBody from '../templates/core/xhr/getRequestBody.hbs';
5051
import xhrGetResponseBody from '../templates/core/xhr/getResponseBody.hbs';
@@ -65,8 +66,9 @@ import partialHeader from '../templates/partials/header.hbs';
6566
import partialIsNullable from '../templates/partials/isNullable.hbs';
6667
import partialIsReadOnly from '../templates/partials/isReadOnly.hbs';
6768
import partialIsRequired from '../templates/partials/isRequired.hbs';
68-
import partialParameters from '../templates/partials/parameters.hbs';
69-
import partialResult from '../templates/partials/result.hbs';
69+
import partialOperationParameters from '../templates/partials/operationParameters.hbs';
70+
import partialOperationResult from '../templates/partials/operationResult.hbs';
71+
import partialOperationTypes from '../templates/partials/operationTypes.hbs';
7072
import partialSchema from '../templates/partials/schema.hbs';
7173
import partialSchemaArray from '../templates/partials/schemaArray.hbs';
7274
import partialSchemaComposition from '../templates/partials/schemaComposition.hbs';
@@ -96,6 +98,7 @@ export interface Templates {
9698
httpRequest: Handlebars.TemplateDelegate;
9799
request: Handlebars.TemplateDelegate;
98100
settings: Handlebars.TemplateDelegate;
101+
types: Handlebars.TemplateDelegate;
99102
};
100103
exports: {
101104
model: Handlebars.TemplateDelegate;
@@ -126,6 +129,7 @@ export const registerHandlebarTemplates = (
126129
httpRequest: Handlebars.template(templateCoreHttpRequest),
127130
request: Handlebars.template(templateCoreRequest),
128131
settings: Handlebars.template(templateCoreSettings),
132+
types: Handlebars.template(templateCoreTypes),
129133
},
130134
exports: {
131135
model: Handlebars.template(templateExportModel),
@@ -146,8 +150,9 @@ export const registerHandlebarTemplates = (
146150
Handlebars.registerPartial('isNullable', Handlebars.template(partialIsNullable));
147151
Handlebars.registerPartial('isReadOnly', Handlebars.template(partialIsReadOnly));
148152
Handlebars.registerPartial('isRequired', Handlebars.template(partialIsRequired));
149-
Handlebars.registerPartial('parameters', Handlebars.template(partialParameters));
150-
Handlebars.registerPartial('result', Handlebars.template(partialResult));
153+
Handlebars.registerPartial('operationParameters', Handlebars.template(partialOperationParameters));
154+
Handlebars.registerPartial('operationResult', Handlebars.template(partialOperationResult));
155+
Handlebars.registerPartial('operationTypes', Handlebars.template(partialOperationTypes));
151156
Handlebars.registerPartial('schema', Handlebars.template(partialSchema));
152157
Handlebars.registerPartial('schemaArray', Handlebars.template(partialSchemaArray));
153158
Handlebars.registerPartial('schemaComposition', Handlebars.template(partialSchemaComposition));

src/utils/writeClient.spec.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,24 @@ describe('writeClient', () => {
1717
};
1818

1919
const templates: Templates = {
20-
index: () => 'index',
2120
client: () => 'client',
22-
exports: {
23-
model: () => 'model',
24-
schema: () => 'schema',
25-
service: () => 'service',
26-
},
2721
core: {
28-
settings: () => 'settings',
2922
apiError: () => 'apiError',
3023
apiRequestOptions: () => 'apiRequestOptions',
3124
apiResult: () => 'apiResult',
32-
cancelablePromise: () => 'cancelablePromise',
33-
request: () => 'request',
3425
baseHttpRequest: () => 'baseHttpRequest',
26+
cancelablePromise: () => 'cancelablePromise',
3527
httpRequest: () => 'httpRequest',
28+
request: () => 'request',
29+
settings: () => 'settings',
30+
types: () => 'types',
3631
},
32+
exports: {
33+
model: () => 'model',
34+
schema: () => 'schema',
35+
service: () => 'service',
36+
},
37+
index: () => 'index',
3738
};
3839

3940
await writeClient(client, templates, {

src/utils/writeClientClass.spec.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,24 @@ describe('writeClientClass', () => {
1717
};
1818

1919
const templates: Templates = {
20-
index: () => 'index',
2120
client: () => 'client',
22-
exports: {
23-
model: () => 'model',
24-
schema: () => 'schema',
25-
service: () => 'service',
26-
},
2721
core: {
28-
settings: () => 'settings',
2922
apiError: () => 'apiError',
3023
apiRequestOptions: () => 'apiRequestOptions',
3124
apiResult: () => 'apiResult',
32-
cancelablePromise: () => 'cancelablePromise',
33-
request: () => 'request',
3425
baseHttpRequest: () => 'baseHttpRequest',
26+
cancelablePromise: () => 'cancelablePromise',
3527
httpRequest: () => 'httpRequest',
28+
request: () => 'request',
29+
settings: () => 'settings',
30+
types: () => 'types',
3631
},
32+
exports: {
33+
model: () => 'model',
34+
schema: () => 'schema',
35+
service: () => 'service',
36+
},
37+
index: () => 'index',
3738
};
3839

3940
await writeClientClass(client, templates, './dist', HttpClient.FETCH, 'AppClient', Indent.SPACE_4, '');

src/utils/writeClientCore.spec.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,24 @@ describe('writeClientCore', () => {
2020
};
2121

2222
const templates: Templates = {
23-
index: () => 'index',
2423
client: () => 'client',
25-
exports: {
26-
model: () => 'model',
27-
schema: () => 'schema',
28-
service: () => 'service',
29-
},
3024
core: {
31-
settings: () => 'settings',
3225
apiError: () => 'apiError',
3326
apiRequestOptions: () => 'apiRequestOptions',
3427
apiResult: () => 'apiResult',
35-
cancelablePromise: () => 'cancelablePromise',
36-
request: () => 'request',
3728
baseHttpRequest: () => 'baseHttpRequest',
29+
cancelablePromise: () => 'cancelablePromise',
3830
httpRequest: () => 'httpRequest',
31+
request: () => 'request',
32+
settings: () => 'settings',
33+
types: () => 'types',
3934
},
35+
exports: {
36+
model: () => 'model',
37+
schema: () => 'schema',
38+
service: () => 'service',
39+
},
40+
index: () => 'index',
4041
};
4142

4243
await writeClientCore(client, templates, '/', HttpClient.FETCH, Indent.SPACE_4);
@@ -47,5 +48,6 @@ describe('writeClientCore', () => {
4748
expect(writeFile).toBeCalledWith(resolve('/', '/ApiResult.ts'), `apiResult${EOL}`);
4849
expect(writeFile).toBeCalledWith(resolve('/', '/CancelablePromise.ts'), `cancelablePromise${EOL}`);
4950
expect(writeFile).toBeCalledWith(resolve('/', '/request.ts'), `request${EOL}`);
51+
expect(writeFile).toBeCalledWith(resolve('/', '/types.ts'), `types${EOL}`);
5052
});
5153
});

0 commit comments

Comments
 (0)