Skip to content

Commit 65d4da3

Browse files
committed
Add types for ApiError, fix error for babel
1 parent 408d619 commit 65d4da3

File tree

7 files changed

+63
-9
lines changed

7 files changed

+63
-9
lines changed

src/client/interfaces/Operation.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ export interface Operation extends OperationParameters {
1212
path: string;
1313
errors: OperationError[];
1414
results: OperationResponse[];
15+
errorResults: OperationResponse[];
1516
responseHeader: string | null;
1617
}

src/openApi/v2/parser/getOperation.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { getOperationName } from './getOperationName';
77
import { getOperationParameters } from './getOperationParameters';
88
import { getOperationResponseHeader } from './getOperationResponseHeader';
99
import { getOperationResponses } from './getOperationResponses';
10-
import { getOperationResults } from './getOperationResults';
10+
import { getOperationErrorResults, getOperationResults } from './getOperationResults';
1111
import { getServiceName } from './getServiceName';
1212
import { sortByRequired } from './sortByRequired';
1313

@@ -41,6 +41,7 @@ export const getOperation = (
4141
imports: [],
4242
errors: [],
4343
results: [],
44+
errorResults: [],
4445
responseHeader: null,
4546
};
4647

@@ -61,13 +62,19 @@ export const getOperation = (
6162
if (op.responses) {
6263
const operationResponses = getOperationResponses(openApi, op.responses);
6364
const operationResults = getOperationResults(operationResponses);
65+
const operationErrorResults = getOperationErrorResults(operationResponses);
6466
operation.errors = getOperationErrors(operationResponses);
6567
operation.responseHeader = getOperationResponseHeader(operationResults);
6668

6769
operationResults.forEach(operationResult => {
6870
operation.results.push(operationResult);
6971
operation.imports.push(...operationResult.imports);
7072
});
73+
74+
operationErrorResults.forEach(operationResult => {
75+
operation.errorResults.push(operationResult);
76+
operation.imports.push(...operationResult.imports);
77+
});
7178
}
7279

7380
operation.parameters = operation.parameters.sort(sortByRequired);

src/openApi/v2/parser/getOperationResults.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,41 @@ const areEqual = (a: Model, b: Model): boolean => {
99
return equal;
1010
};
1111

12+
export const getOperationErrorResults = (operationResponses: OperationResponse[]): OperationResponse[] => {
13+
const operationResults: OperationResponse[] = [];
14+
15+
operationResponses.forEach(operationResponse => {
16+
const { code } = operationResponse;
17+
if (code && (code === 204 || code < 200 || code >= 300)) {
18+
operationResults.push(operationResponse);
19+
}
20+
});
21+
22+
if (!operationResults.length) {
23+
operationResults.push({
24+
in: 'response',
25+
name: '',
26+
code: 0,
27+
description: '',
28+
export: 'generic',
29+
type: 'any',
30+
base: 'any',
31+
template: null,
32+
link: null,
33+
isDefinition: false,
34+
isReadOnly: false,
35+
isRequired: false,
36+
isNullable: false,
37+
imports: [],
38+
enum: [],
39+
enums: [],
40+
properties: [],
41+
});
42+
}
43+
44+
return operationResults;
45+
};
46+
1247
export const getOperationResults = (operationResponses: OperationResponse[]): OperationResponse[] => {
1348
const operationResults: OperationResponse[] = [];
1449

src/openApi/v3/parser/getOperation.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const getOperation = (
4444
imports: [],
4545
errors: [],
4646
results: [],
47+
errorResults: [],
4748
responseHeader: null,
4849
};
4950

src/templates/exportService.hbs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ import type { CancelablePromise } from '../core/CancelablePromise';
2525
import { BaseHttpRequest } from '../core/BaseHttpRequest';
2626
{{else}}
2727
import type { BaseHttpRequest } from '../core/BaseHttpRequest';
28-
import { Left, Right, Either } from '../core/ApiResult';
29-
import { ApiError } from '../core/ApiError';
28+
import type { Left, Right, Either } from '../core/ApiResult';
29+
import type { ApiError } from '../core/ApiError';
3030
{{/equals}}
3131
{{else}}
3232
import { OpenAPI } from '../core/OpenAPI';
3333
import { request as __request } from '../core/request';
34-
import { Left, Right, Either } from '../core/ApiResult';
35-
import { ApiError } from '../core/ApiError';
34+
import type { Left, Right, Either } from '../core/ApiResult';
35+
import type { ApiError } from '../core/ApiError';
3636
{{/if}}
3737

3838
{{#equals @root.httpClient 'angular'}}
@@ -180,7 +180,7 @@ export class {{{name}}}{{{@root.postfix}}} {
180180
try {
181181
const result: ({{>result}}) = await this.httpRequest.request({
182182
{{else}}
183-
public async {{{name}}}Either({{>parameters}}): Promise<Either<ApiError, {{>result}}>> {
183+
public async {{{name}}}Either({{>parameters}}): Promise<Either<{{>errorResult}}, {{>result}}>> {
184184
try {
185185
const result: ({{>result}}) = await this.httpRequest.request({
186186
{{/equals}}
@@ -190,7 +190,7 @@ export class {{{name}}}{{{@root.postfix}}} {
190190
try {
191191
const result: ({{>result}}) = await __request(OpenAPI, this.http, {
192192
{{else}}
193-
public static async {{{name}}}Either({{>parameters}}): Promise<Either<ApiError, {{>result}}>> {
193+
public static async {{{name}}}Either({{>parameters}}): Promise<Either<{{>errorResult}}, {{>result}}>> {
194194
try {
195195
const result: ({{>result}}) = await __request(OpenAPI, {
196196
{{/equals}}
@@ -262,9 +262,9 @@ export class {{{name}}}{{{@root.postfix}}} {
262262

263263
return right;
264264
} catch (e) {
265-
const left: Left<ApiError> = {
265+
const left: Left<{{>errorResult}}> = {
266266
_tag: 'Left',
267-
left: e as ApiError,
267+
left: e as ({{>errorResult}}),
268268
};
269269

270270
return left;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{{~#if errorResults~}}
2+
{{#each results}}ApiError<
3+
{{#equals code 0}}number{{else}}{{{code}}}{{/equals}},
4+
{{type}}
5+
>{{#unless @last}} | {{/unless}}{{/each}}
6+
{{~else~}}
7+
ApiError<number, any>
8+
{{~/if~}}

src/utils/registerHandlebarTemplates.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import templateExportSchema from '../templates/exportSchema.hbs';
5757
import templateExportService from '../templates/exportService.hbs';
5858
import templateIndex from '../templates/index.hbs';
5959
import partialBase from '../templates/partials/base.hbs';
60+
import partialErrorResult from '../templates/partials/errorResult.hbs';
6061
import partialExportComposition from '../templates/partials/exportComposition.hbs';
6162
import partialExportEnum from '../templates/partials/exportEnum.hbs';
6263
import partialExportInterface from '../templates/partials/exportInterface.hbs';
@@ -148,6 +149,7 @@ export const registerHandlebarTemplates = (root: {
148149
Handlebars.registerPartial('isRequired', Handlebars.template(partialIsRequired));
149150
Handlebars.registerPartial('parameters', Handlebars.template(partialParameters));
150151
Handlebars.registerPartial('result', Handlebars.template(partialResult));
152+
Handlebars.registerPartial('errorResult', Handlebars.template(partialErrorResult));
151153
Handlebars.registerPartial('schema', Handlebars.template(partialSchema));
152154
Handlebars.registerPartial('schemaArray', Handlebars.template(partialSchemaArray));
153155
Handlebars.registerPartial('schemaDictionary', Handlebars.template(partialSchemaDictionary));

0 commit comments

Comments
 (0)