Skip to content

Commit f7b8112

Browse files
committed
add operation-with-form-data template
1 parent d805f9c commit f7b8112

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

src/core/renderers/operation.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import Handlebars from "handlebars";
2+
import operationTemplate2 from "~/templates/operation-with-form-data.hbs";
23
import operationTemplate from "~/templates/operation.hbs";
34

45
Handlebars.registerHelper("hasRequestBody", (input: string[]) => {
56
return input.includes("requestBody");
67
});
78

89
Handlebars.registerPartial("operation", operationTemplate);
10+
Handlebars.registerPartial("operationWithFormData", operationTemplate2);

src/core/resolvers/operation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { hasFormData } from "~/core/form-data";
12
import type { OpenAPI, OperationParameter } from "~/core/openapi";
23
import resolveEndpoints from "~/core/resolvers/enpoint";
34
import { resolveResponses } from "~/core/resolvers/response";
@@ -9,6 +10,7 @@ export type OperationTemplate = {
910
path: string,
1011
parameters: string,
1112
searchParams: OperationParameter[],
13+
hasFormData: boolean,
1214
responses: string[],
1315
};
1416

@@ -29,6 +31,7 @@ export default function resolveOperations(paths: OpenAPI["paths"]) {
2931
path: quotePathName(path, operation.parameters ?? []),
3032
parameters: resolveOperationParams(operation, false).join(", "),
3133
searchParams: getSearchParams(operation.parameters ?? []),
34+
hasFormData: hasFormData(operation),
3235
responses: resolveResponses(operation.responses),
3336
}));
3437
}

src/templates/interface.hbs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,9 @@ function createURL(endPoint) {
66
}
77
{{#each operations}}
88

9+
{{#if hasFormData}}
10+
{{> operationWithFormData }}
11+
{{else}}
912
{{> operation }}
13+
{{/if}}
1014
{{/each}}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export async function {{name}}({{parameters}}) {
2+
const url = createURL({{{path}}});
3+
{{#each searchParams}}
4+
{{> searchParam }}
5+
{{/each}}
6+
const formData = new FormData();
7+
for (const [key, value] of Object.entries(formBody)) {
8+
formData.append(key, value);
9+
}
10+
const response = await fetch(url, {
11+
method: "{{method}}",
12+
body: formData,
13+
});
14+
switch (response.status) {
15+
{{#each responses}}
16+
{{{this}}}
17+
{{/each}}
18+
default: throw new Error(`Unexpected response (${response.status})`);
19+
}
20+
}

0 commit comments

Comments
 (0)