acacode / acacode/swagger-typescript-api

'multipart/form-data' formatter isn't recursive

未關閉
#462 4 則留言 4 個 reaction 已指派 0 人 在 GitHub 檢視
bug
主要語言
TypeScript
星號
4.1k
分支
436
PR 合併指標
30 天內沒有已合併 PR

描述

When using a `multipart/form-data` content type, the generated API code provides a private function to format certain types : `contentFormatters`.

Currently on version `12.0.2` the function is :

```ts
private contentFormatters: Record any> = {
[ContentType.Json]: (input: any) =>
input !== null && (typeof input === "object" || typeof input === "string") ? JSON.stringify(input) : input,
[ContentType.FormData]: (input: any) =>
Object.keys(input || {}).reduce((formData, key) => {
const property = input[key];
formData.append(
key,
property instanceof Blob
? property
: typeof property === "object" && property !== null
? JSON.stringify(property)
: `${property}`,
);
return formData;
}, new FormData()),
[ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),
};
```

If we concentrate on the `ContentType.FormData` section of the formatter, we have

```ts
(input: any) =>
Object.keys(input || {}).reduce((formData, key) => {
const property = input[key];
formData.append(
key,
property instanceof Blob
? property
: typeof property === "object" && property !== null
? JSON.stringify(property)
: `${property}`,
);
return formData;
}, new FormData()),
```

This section is no recursive on objects.

For example, if my backend expects the following type for the payload

```ts
interface PayloadWithData {
items: {
name: string;
content: Blob;
appSpecificData: '1234567896',
}[];
}
```

The files aren't correctly set in the fetch request because they aren't serializable.

This should be updated to support File in subfields of the payload type.

EDIT 1 : Indentation
EDIT 2 : this looks like it's the continuation of the work done here : #293
EDIT 3 : Typo

貢獻指南

這個儲存庫沒有索引到貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。