acacode / acacode/swagger-typescript-api
[SUGGESTION] New config option similar to `unwrapResponseData` that preserves error types
- Lingua principale
- TypeScript
- Stelle
- 4.1k
- Fork
- 436
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
# Suggestion:
Would it be desirable to have another option `unwrapResponseDataWithErrors` or perhaps to turn `unwrapResponseData` into a union `'disabled' | 'responseOnly' | 'responseAndError'`?
At the moment, it seems that `unwrapResponseData` is not including the error and default response types.
Here:
https://github.com/acacode/swagger-typescript-api/blob/0e251bb042bdec35fd6efa714868486ff882c7e4/templates/base/http-clients/fetch-http-client.ejs#L170-L175
This could be something like this instead:
```ejs
<% if (config.unwrapResponseData) { %>
}: FullRequestParams): Promise => {
<% } else if (config.unwrapResponseDataWithErrors) { %>
}: FullRequestParams): Promise => {
<% } else { %>
}: FullRequestParams): Promise> => {
<% } %>
```
Maybe I am misunderstanding the intent behind `unwrapResponseData` and this is not a good idea for reasons. But if this is something that could be useful, I am happy to contribute with a PR.
# Context
I have the following (shortened) OpenAPI spec:
[openapi-spec.json](https://github.com/user-attachments/files/20264378/openapi-spec.json)
The takeaway from this specification is that I expect the return type to be something like this:
```ts
export type ApiResponse =
| {
success: 'true';
data: object;
}
| {
success: 'false';
error:
| 'bad-request'
| 'github-api-error'
| 'parse-or-unknown'
| 'missing-envs'
| 'blob-storage-error'
| 'file-too-large';
description: string;
};
```
I generate a client from the specification above using `swagger-typescript-api` version `13.1.3`:
```ts
import { generateApi } from 'swagger-typescript-api';
import specification from '...';
(async () => {
await generateApi({ spec: specification, output: process.cwd(), unwrapResponseData: true });
})();
```
## The problem
The client works, but `unwrapResponseData` only includes the response type for status `200`, so the return type that I'm actually getting is this:
```ts
export type ApiResponse = {
success: 'true';
data: object;
};
```

## The solution
If I want the return type to include the error; in the generated client, all I need to do is modify this line:
https://github.com/acacode/swagger-typescript-api/blob/0e251bb042bdec35fd6efa714868486ff882c7e4/templates/base/http-clients/fetch-http-client.ejs#L172
To be
```ts
public request = async ({
body,
secure,
path,
type,
query,
format,
baseUrl,
cancelToken,
...params
}: FullRequestParams): Promise => { // Added | E here
```
Instead of
```ts
public request = async ({
body,
secure,
path,
type,
query,
format,
baseUrl,
cancelToken,
...params
}: FullRequestParams): Promise => {
```
And then my types are assigned as expected:

Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.