Skip to content

Commit c18c296

Browse files
committed
feat(form-data): send form parameters as multi part form data
part of #78
1 parent 9cf1c8f commit c18c296

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

src/parser.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,18 +108,23 @@ function parseMethods({paths, security, parameters, responses = {}}: Swagger, sw
108108
: okResponse
109109
);
110110

111-
return {
111+
const transformedParams = transformParameters(
112+
[...(pathDef.parameters || []), ...(operation.parameters || [])],
113+
parameters || {}
114+
);
115+
116+
return {
112117
hasJsonResponse: true,
113118
isSecure: security !== undefined || operation.security !== undefined,
114119
methodName: toCamelCase(operation.operationId
115120
? (!swaggerTag ? operation.operationId : operation.operationId.replace(`${swaggerTag}_`, ''))
116121
: `${methodType}_${pathName.replace(/[{}]/g, '')}`
117122
),
118123
methodType: methodType.toUpperCase() as MethodType,
119-
parameters: transformParameters(
120-
[...(pathDef.parameters || []), ...(operation.parameters || [])],
121-
parameters || {}
122-
),
124+
parameters: transformedParams,
125+
formData: transformedParams
126+
.filter(({name, isFormParameter}) => name && isFormParameter)
127+
.map(({name, camelCaseName}) => ({name: name!, camelCaseName: camelCaseName || name!})),
123128
// turn path interpolation `{this}` into string template `${args.this}
124129
path: pathName.replace(
125130
/{(.*?)}/g,

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export interface Method {
6969
readonly response?: string; // method return type
7070
readonly responseTypeName?: string; // method return type without prefix
7171
readonly requestResponseType?: 'blob'; // supported types of Angular's Http ResponseContentType
72+
readonly formData?: {name: string, camelCaseName: string}[]; // list of parameter names which are form data params
7273
}
7374

7475
/**

templates/ngx-service.mustache

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,14 @@ export class {{&serviceName}} implements {{&interfaceName}} {
9292
}
9393
{{/isHeaderParameter}}
9494
{{/parameters}}
95-
return this.sendRequest<{{&response}}>('{{methodType}}', path, options{{#parameters}}{{#isBodyParameter}}, JSON.stringify(args.{{&camelCaseName}}){{/isBodyParameter}}{{#isFormParameter}}, JSON.stringify(args.{{&camelCaseName}}){{/isFormParameter}}{{/parameters}});
95+
{{#formData.length}}
96+
const formData = new FormData();
97+
{{#formData}}
98+
formData.append('{{&name}}', args.{{&camelCaseName}});
99+
{{/formData}}
100+
101+
{{/formData.length}}
102+
return this.sendRequest<{{&response}}>('{{methodType}}', path, options{{#parameters}}{{#isBodyParameter}}, JSON.stringify(args.{{&camelCaseName}}){{/isBodyParameter}}{{/parameters}}{{#formData.length}}, formData{{/formData.length}});
96103
}
97104

98105
{{/methods}}

tests/esquare/api/api-client.service.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,10 @@ export class APIClient implements APIClientInterface {
126126
...requestHttpOptions,
127127
};
128128

129-
return this.sendRequest<Object>('POST', path, options, JSON.stringify(args.restoreGuid));
129+
const formData = new FormData();
130+
formData.append('restoreGuid', args.restoreGuid);
131+
132+
return this.sendRequest<Object>('POST', path, options, formData);
130133
}
131134

132135
/**
@@ -347,7 +350,10 @@ export class APIClient implements APIClientInterface {
347350
...requestHttpOptions,
348351
};
349352

350-
return this.sendRequest<number>('POST', path, options, JSON.stringify(args.file));
353+
const formData = new FormData();
354+
formData.append('file', args.file);
355+
356+
return this.sendRequest<number>('POST', path, options, formData);
351357
}
352358

353359
/**
@@ -557,7 +563,11 @@ export class APIClient implements APIClientInterface {
557563
...requestHttpOptions,
558564
};
559565

560-
return this.sendRequest<void>('POST', path, options, JSON.stringify(args.description), JSON.stringify(args.file));
566+
const formData = new FormData();
567+
formData.append('description', args.description);
568+
formData.append('file', args.file);
569+
570+
return this.sendRequest<void>('POST', path, options, formData);
561571
}
562572

563573
/**

0 commit comments

Comments
 (0)