fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #211 from hey-api/fix/axios-formdata-node

authored by

Jordan Shatford and committed by
GitHub
8f3a2563 48d58b29

+39 -4
+5
.changeset/gentle-pets-clean.md
··· 1 + --- 2 + "@hey-api/openapi-ts": patch 3 + --- 4 + 5 + fix(axios): use builtin form data to ensure blob form data works in node environment
+4 -1
src/templates/core/axios/request.hbs
··· 32 32 {{>functions/getUrl}} 33 33 34 34 35 + {{>functions/getFormData}} 36 + 37 + 35 38 {{>functions/resolve}} 36 39 37 40 ··· 65 68 return new CancelablePromise(async (resolve, reject, onCancel) => { 66 69 try { 67 70 const url = getUrl(config, options); 68 - const formData = options.formData; 71 + const formData = getFormData(options); 69 72 const body = getRequestBody(options); 70 73 const headers = await getHeaders(config, options); 71 74
+1 -1
src/templates/core/axios/sendRequest.hbs
··· 3 3 options: ApiRequestOptions, 4 4 url: string, 5 5 body: unknown, 6 - formData: Record<string, unknown> | undefined, 6 + formData: FormData | undefined, 7 7 headers: Record<string, string>, 8 8 onCancel: OnCancel, 9 9 axiosClient: AxiosInstance
+29 -2
test/__snapshots__/v3_axios/core/request.ts.snap
··· 79 79 return options.query ? url + getQueryString(options.query) : url; 80 80 }; 81 81 82 + export const getFormData = (options: ApiRequestOptions): FormData | undefined => { 83 + if (options.formData) { 84 + const formData = new FormData(); 85 + 86 + const process = (key: string, value: unknown) => { 87 + if (isString(value) || isBlob(value)) { 88 + formData.append(key, value); 89 + } else { 90 + formData.append(key, JSON.stringify(value)); 91 + } 92 + }; 93 + 94 + Object.entries(options.formData) 95 + .filter(([, value]) => value !== undefined && value !== null) 96 + .forEach(([key, value]) => { 97 + if (Array.isArray(value)) { 98 + value.forEach(v => process(key, v)); 99 + } else { 100 + process(key, value); 101 + } 102 + }); 103 + 104 + return formData; 105 + } 106 + return undefined; 107 + }; 108 + 82 109 type Resolver<T> = (options: ApiRequestOptions) => Promise<T>; 83 110 84 111 export const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => { ··· 153 180 options: ApiRequestOptions, 154 181 url: string, 155 182 body: unknown, 156 - formData: Record<string, unknown> | undefined, 183 + formData: FormData | undefined, 157 184 headers: Record<string, string>, 158 185 onCancel: OnCancel, 159 186 axiosClient: AxiosInstance ··· 288 315 return new CancelablePromise(async (resolve, reject, onCancel) => { 289 316 try { 290 317 const url = getUrl(config, options); 291 - const formData = options.formData; 318 + const formData = getFormData(options); 292 319 const body = getRequestBody(options); 293 320 const headers = await getHeaders(config, options); 294 321