Skip to content

Commit 93c0088

Browse files
PE-2229 - add full reference
1 parent 8dee078 commit 93c0088

18 files changed

+2990
-386
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{{#if parameters}}
2+
{{#if @root.useOptions~}}
3+
{
4+
{{#each parameters}}
5+
{{{name}}},
6+
{{/each}}
7+
}{{#if @root.exportClient}}, config{{/if}}
8+
{{~else}}
9+
{{#each parameters}}
10+
{{{name}}},
11+
{{/each}}
12+
{{#if @root.exportClient}}config{{/if}}
13+
{{/if}}
14+
{{else}}{{#if @root.exportClient}}config{{/if}}{{/if}}

src/templates/services/exportService.hbs

Lines changed: 14 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,25 @@
33
{{#if imports}}
44
import type {
55
{{#each imports}}
6-
{{{this}}},
6+
{{{this}}},
77
{{/each}}
88
} from '../models';
99
{{/if}}
1010
{{#if @root.exportClient}}
11-
import type { ApiResult, BaseHttpRequest, ClientConfig } from '../core';
12-
{{else}}
13-
import type { ApiResult } from '../core';
14-
import {
15-
request as __request,
16-
{{#if @root.useVersion}}
17-
OpenAPI,
18-
{{/if}}
19-
} from '../core';
11+
import type { BaseHttpRequest, ClientConfig } from '../core';
2012
{{/if}}
13+
import { {{{name}}}Full } from './{{{name}}}Full';
2114

2215
export class {{{name}}} {
2316
{{#if @root.exportClient}}
2417
private readonly httpRequest: BaseHttpRequest;
25-
private readonly ClientConfig: ClientConfig;
18+
private readonly clientConfig: ClientConfig;
19+
readonly full: {{{name}}}Full;
2620

27-
constructor(httpRequest: BaseHttpRequest, ClientConfig: ClientConfig) {
21+
constructor(httpRequest: BaseHttpRequest, clientConfig: ClientConfig) {
2822
this.httpRequest = httpRequest;
29-
this.ClientConfig = ClientConfig;
23+
this.clientConfig = clientConfig;
24+
this.full = new {{{name}}}Full(httpRequest, clientConfig);
3025
}
3126
{{/if}}
3227

@@ -54,56 +49,12 @@ export class {{{name}}} {
5449
{{/each}}
5550
* @throws ApiError
5651
*/
57-
public{{#unless @root.exportClient}} static{{/unless}} async {{{name}}}({{>parameters}}): Promise<ApiResult<{{>result}}>> {
58-
return {{#if @root.exportClient}}this.httpRequest.request{{else}}__request{{/if}}({
59-
method: '{{{method}}}',
60-
path: `{{{path}}}`,
61-
{{#if parametersCookie}}
62-
cookies: {
63-
{{#each parametersCookie}}
64-
'{{{prop}}}': {{{name}}},
65-
{{/each}}
66-
},
67-
{{/if}}
68-
{{#if parametersHeader}}
69-
headers: {
70-
{{#each parametersHeader}}
71-
'{{{prop}}}': {{{name}}},
72-
{{/each}}
73-
},
74-
{{/if}}
75-
{{#if parametersQuery}}
76-
query: {
77-
{{#each parametersQuery}}
78-
'{{{prop}}}': {{{name}}},
79-
{{/each}}
80-
},
81-
{{/if}}
82-
{{#if parametersForm}}
83-
formData: {
84-
{{#each parametersForm}}
85-
'{{{prop}}}': {{{name}}},
86-
{{/each}}
87-
},
88-
{{/if}}
89-
{{#if parametersBody}}
90-
body: {{{parametersBody.name}}},
91-
{{#if parametersBody.mediaType}}
92-
mediaType: '{{{parametersBody.mediaType}}}',
93-
{{/if}}
94-
{{/if}}
95-
{{#if responseHeader}}
96-
responseHeader: '{{{responseHeader}}}',
97-
{{/if}}
98-
{{#if errors}}
99-
errors: {
100-
{{#each errors}}
101-
{{{code}}}: `{{{description}}}`,
102-
{{/each}}
103-
},
104-
{{/if}}
105-
}{{#if @root.exportClient}}, this.ClientConfig, config{{/if}});
52+
public{{#unless @root.exportClient}} static{{/unless}} async {{{name}}}({{>parameters}}): Promise<{{>result}}> {
53+
{{#if @root.exportClient}}
54+
return (await this.full.{{{name}}}({{>passParameters}})).body;
55+
{{else}}
56+
return (await {{{@root.name}}}Full.{{{name}}}({{>passParameters}})).body;
57+
{{/if}}
10658
}
107-
10859
{{/each}}
10960
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
{{>header}}
2+
3+
{{#if imports}}
4+
import type {
5+
{{#each imports}}
6+
{{{this}}},
7+
{{/each}}
8+
} from '../models';
9+
{{/if}}
10+
{{#if @root.exportClient}}
11+
import type { ApiResult, BaseHttpRequest, ClientConfig } from '../core';
12+
{{else}}
13+
import type { ApiResult } from '../core';
14+
import {
15+
request as __request,
16+
{{#if @root.useVersion}}
17+
OpenAPI,
18+
{{/if}}
19+
} from '../core';
20+
{{/if}}
21+
22+
export class {{{name}}}Full {
23+
{{#if @root.exportClient}}
24+
private readonly httpRequest: BaseHttpRequest;
25+
private readonly clientConfig: ClientConfig;
26+
27+
constructor(httpRequest: BaseHttpRequest, clientConfig: ClientConfig) {
28+
this.httpRequest = httpRequest;
29+
this.clientConfig = clientConfig;
30+
}
31+
{{/if}}
32+
33+
{{#each operations}}
34+
/**
35+
{{#if deprecated}}
36+
* @deprecated
37+
{{/if}}
38+
{{#if summary}}
39+
* {{{summary}}}
40+
{{/if}}
41+
{{#if description}}
42+
* {{{description}}}
43+
{{/if}}
44+
{{#unless @root.useOptions}}
45+
{{#if parameters}}
46+
{{#each parameters}}
47+
* @param {{{name}}} {{{description}}}
48+
{{/each}}
49+
{{/if}}
50+
{{/unless}}
51+
{{#if @root.exportClient}}* @param [config] the optional OpenAPI config to use{{/if}}
52+
{{#each results}}
53+
* @returns {{{type}}} {{{description}}}
54+
{{/each}}
55+
* @throws ApiError
56+
*/
57+
public{{#unless @root.exportClient}} static{{/unless}} async {{{name}}}({{>parameters}}): Promise<ApiResult<{{>result}}>> {
58+
return {{#if @root.exportClient}}this.httpRequest.request{{else}}__request{{/if}}({
59+
method: '{{{method}}}',
60+
path: `{{{path}}}`,
61+
{{#if parametersCookie}}
62+
cookies: {
63+
{{#each parametersCookie}}
64+
'{{{prop}}}': {{{name}}},
65+
{{/each}}
66+
},
67+
{{/if}}
68+
{{#if parametersHeader}}
69+
headers: {
70+
{{#each parametersHeader}}
71+
'{{{prop}}}': {{{name}}},
72+
{{/each}}
73+
},
74+
{{/if}}
75+
{{#if parametersQuery}}
76+
query: {
77+
{{#each parametersQuery}}
78+
'{{{prop}}}': {{{name}}},
79+
{{/each}}
80+
},
81+
{{/if}}
82+
{{#if parametersForm}}
83+
formData: {
84+
{{#each parametersForm}}
85+
'{{{prop}}}': {{{name}}},
86+
{{/each}}
87+
},
88+
{{/if}}
89+
{{#if parametersBody}}
90+
body: {{{parametersBody.name}}},
91+
{{#if parametersBody.mediaType}}
92+
mediaType: '{{{parametersBody.mediaType}}}',
93+
{{/if}}
94+
{{/if}}
95+
{{#if responseHeader}}
96+
responseHeader: '{{{responseHeader}}}',
97+
{{/if}}
98+
{{#if errors}}
99+
errors: {
100+
{{#each errors}}
101+
{{{code}}}: `{{{description}}}`,
102+
{{/each}}
103+
},
104+
{{/if}}
105+
}{{#if @root.exportClient}}, this.clientConfig, config{{/if}});
106+
}
107+
108+
{{/each}}
109+
}

src/templates/services/index.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22

33
{{#each services}}
44
export { {{{name}}} } from './{{{name}}}';
5+
export { {{{name}}}Full } from './{{{name}}}Full';
56
{{/each}}

src/utils/postProcessServiceOperations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export function postProcessServiceOperations(service: Service, exportClient: boo
2222
names.set(name, index + 1);
2323

2424
// Update the operation path with the dynamically injected version
25-
clone.path = clone.path.replace('${apiVersion}', exportClient ? '${this.ClientConfig.version}' : '${OpenAPI.version}');
25+
clone.path = clone.path.replace('${apiVersion}', exportClient ? '${this.clientConfig.version}' : '${OpenAPI.version}');
2626

2727
return clone;
2828
});

src/utils/registerHandlebarTemplates.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import partialIsNullable from '../templates/partials/isNullable.hbs';
5252
import partialIsReadOnly from '../templates/partials/isReadOnly.hbs';
5353
import partialIsRequired from '../templates/partials/isRequired.hbs';
5454
import partialParameters from '../templates/partials/parameters.hbs';
55+
import partialPassParameters from '../templates/partials/passParameters.hbs';
5556
import partialResult from '../templates/partials/result.hbs';
5657
import partialSchema from '../templates/partials/schema.hbs';
5758
import partialSchemaArray from '../templates/partials/schemaArray.hbs';
@@ -72,6 +73,7 @@ import partialTypeUnion from '../templates/partials/typeUnion.hbs';
7273
import templateExportSchema from '../templates/schemas/exportSchema.hbs';
7374
import templateExportSchemaIndex from '../templates/schemas/index.hbs';
7475
import templateExportService from '../templates/services/exportService.hbs';
76+
import templateExportServiceFull from '../templates/services/exportServiceFull.hbs';
7577
import templateExportServiceIndex from '../templates/services/index.hbs';
7678
import { registerHandlebarHelpers } from './registerHandlebarHelpers';
7779

@@ -84,6 +86,7 @@ export interface Templates {
8486
};
8587
services: {
8688
service: Handlebars.TemplateDelegate;
89+
serviceFull: Handlebars.TemplateDelegate;
8790
index: Handlebars.TemplateDelegate;
8891
};
8992
schemas: {
@@ -123,6 +126,7 @@ export function registerHandlebarTemplates(root: { httpClient: HttpClient; useOp
123126
},
124127
services: {
125128
service: Handlebars.template(templateExportService),
129+
serviceFull: Handlebars.template(templateExportServiceFull),
126130
index: Handlebars.template(templateExportServiceIndex),
127131
},
128132
schemas: {
@@ -155,6 +159,7 @@ export function registerHandlebarTemplates(root: { httpClient: HttpClient; useOp
155159
Handlebars.registerPartial('isReadOnly', Handlebars.template(partialIsReadOnly));
156160
Handlebars.registerPartial('isRequired', Handlebars.template(partialIsRequired));
157161
Handlebars.registerPartial('parameters', Handlebars.template(partialParameters));
162+
Handlebars.registerPartial('passParameters', Handlebars.template(partialPassParameters));
158163
Handlebars.registerPartial('result', Handlebars.template(partialResult));
159164
Handlebars.registerPartial('schema', Handlebars.template(partialSchema));
160165
Handlebars.registerPartial('schemaArray', Handlebars.template(partialSchemaArray));

src/utils/writeClientServices.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ describe('writeClientServices', () => {
2525
},
2626
services: {
2727
service: () => 'service',
28+
serviceFull: () => 'serviceFull',
2829
index: () => 'serviceIndex',
2930
},
3031
schemas: {
@@ -50,6 +51,7 @@ describe('writeClientServices', () => {
5051
await writeClientServices(services, templates, '/', HttpClient.FETCH, false, false, false);
5152

5253
expect(writeFile).toBeCalledWith('/MyService.ts', 'service');
54+
expect(writeFile).toBeCalledWith('/MyServiceFull.ts', 'serviceFull');
5355
expect(writeFile).toBeCalledWith('/index.ts', 'serviceIndex');
5456
});
5557
});

src/utils/writeClientServices.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ export async function writeClientServices(
4242
httpClientRequest: getHttpRequestName(httpClient),
4343
});
4444
await writeFile(file, format(templateResult));
45+
46+
const fileFull = resolve(outputPath, `${service.name}Full.ts`);
47+
const templateFullResult = templates.services.serviceFull({
48+
...service,
49+
httpClient,
50+
useUnionTypes,
51+
useVersion,
52+
useOptions,
53+
exportClient,
54+
httpClientRequest: getHttpRequestName(httpClient),
55+
});
56+
await writeFile(fileFull, format(templateFullResult));
4557
}
4658

4759
await writeFile(resolve(outputPath, 'index.ts'), templates.services.index({ services: sortServicesByName(services) }));

0 commit comments

Comments
 (0)