Skip to content

Commit

Permalink
Merge pull request #185 from hey-api/feat/unify-node-and-fetch-templates
Browse files Browse the repository at this point in the history
feat(client): unify fetch and node clients
  • Loading branch information
jordanshatford authored Mar 30, 2024
2 parents cefbda4 + 80a5886 commit 7b66dfa
Show file tree
Hide file tree
Showing 12 changed files with 16 additions and 231 deletions.
5 changes: 5 additions & 0 deletions .changeset/mean-coats-fetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hey-api/openapi-ts": patch
---

Attempt to use body type as content type when sending Blob in node client
5 changes: 5 additions & 0 deletions src/templates/core/fetch/request.hbs
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
{{#equals @root.$config.client 'node'}}
import fetch, { FormData, Headers } from 'node-fetch';
import type { RequestInit, Response } from 'node-fetch';

{{/equals}}
import { ApiError } from './ApiError';
import type { ApiRequestOptions } from './ApiRequestOptions';
import type { ApiResult } from './ApiResult';
Expand Down
2 changes: 2 additions & 0 deletions src/templates/core/fetch/sendRequest.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ export const sendRequest = async (
signal: controller.signal,
};

{{#equals @root.$config.client 'fetch'}}
if (config.WITH_CREDENTIALS) {
request.credentials = config.CREDENTIALS;
}
{{/equals}}

for (const fn of config.interceptors.request._fns) {
request = await fn(request)
Expand Down
42 changes: 0 additions & 42 deletions src/templates/core/node/getHeaders.hbs

This file was deleted.

12 changes: 0 additions & 12 deletions src/templates/core/node/getRequestBody.hbs

This file was deleted.

23 changes: 0 additions & 23 deletions src/templates/core/node/getResponseBody.hbs

This file was deleted.

9 changes: 0 additions & 9 deletions src/templates/core/node/getResponseHeader.hbs

This file was deleted.

101 changes: 0 additions & 101 deletions src/templates/core/node/request.hbs

This file was deleted.

26 changes: 0 additions & 26 deletions src/templates/core/node/sendRequest.hbs

This file was deleted.

2 changes: 1 addition & 1 deletion src/templates/core/request.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{~#equals @root.$config.client 'angular'}}{{>angular/request}}{{/equals~}}
{{~#equals @root.$config.client 'axios'}}{{>axios/request}}{{/equals~}}
{{~#equals @root.$config.client 'fetch'}}{{>fetch/request}}{{/equals~}}
{{~#equals @root.$config.client 'node'}}{{>node/request}}{{/equals~}}
{{~#equals @root.$config.client 'node'}}{{>fetch/request}}{{/equals~}}
{{~#equals @root.$config.client 'xhr'}}{{>xhr/request}}{{/equals~}}
14 changes: 0 additions & 14 deletions src/utils/handlebars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,6 @@ import functionIsStringWithValue from '../templates/core/functions/isStringWithV
import functionIsSuccess from '../templates/core/functions/isSuccess.hbs';
import functionResolve from '../templates/core/functions/resolve.hbs';
import templateCoreHttpRequest from '../templates/core/HttpRequest.hbs';
import nodeGetHeaders from '../templates/core/node/getHeaders.hbs';
import nodeGetRequestBody from '../templates/core/node/getRequestBody.hbs';
import nodeGetResponseBody from '../templates/core/node/getResponseBody.hbs';
import nodeGetResponseHeader from '../templates/core/node/getResponseHeader.hbs';
import nodeRequest from '../templates/core/node/request.hbs';
import nodeSendRequest from '../templates/core/node/sendRequest.hbs';
import templateCoreSettings from '../templates/core/OpenAPI.hbs';
import templateCoreRequest from '../templates/core/request.hbs';
import templateCoreTypes from '../templates/core/types.hbs';
Expand Down Expand Up @@ -361,14 +355,6 @@ export const registerHandlebarTemplates = (config: Config, client: Client): Temp
Handlebars.registerPartial('xhr/request', Handlebars.template(xhrRequest));
Handlebars.registerPartial('xhr/sendRequest', Handlebars.template(xhrSendRequest));

// Specific files for the node client implementation
Handlebars.registerPartial('node/getHeaders', Handlebars.template(nodeGetHeaders));
Handlebars.registerPartial('node/getRequestBody', Handlebars.template(nodeGetRequestBody));
Handlebars.registerPartial('node/getResponseBody', Handlebars.template(nodeGetResponseBody));
Handlebars.registerPartial('node/getResponseHeader', Handlebars.template(nodeGetResponseHeader));
Handlebars.registerPartial('node/request', Handlebars.template(nodeRequest));
Handlebars.registerPartial('node/sendRequest', Handlebars.template(nodeSendRequest));

// Specific files for the axios client implementation
Handlebars.registerPartial('axios/getHeaders', Handlebars.template(axiosGetHeaders));
Handlebars.registerPartial('axios/getRequestBody', Handlebars.template(axiosGetRequestBody));
Expand Down
6 changes: 3 additions & 3 deletions test/__snapshots__/v3_node/core/request.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio
if (options.mediaType) {
headers['Content-Type'] = options.mediaType;
} else if (isBlob(options.body)) {
headers['Content-Type'] = 'application/octet-stream';
headers['Content-Type'] = options.body.type || 'application/octet-stream';
} else if (isString(options.body)) {
headers['Content-Type'] = 'text/plain';
} else if (!isFormData(options.body)) {
Expand All @@ -172,7 +172,7 @@ export const getRequestBody = (options: ApiRequestOptions): unknown => {
if (options.mediaType?.includes('/json')) {
return JSON.stringify(options.body);
} else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
return options.body as unknown;
return options.body;
} else {
return JSON.stringify(options.body);
}
Expand All @@ -193,8 +193,8 @@ export const sendRequest = async (
let request: RequestInit = {
headers,
method: options.method,
body: body ?? formData,
method: options.method,
signal: controller.signal,
};
Expand Down

0 comments on commit 7b66dfa

Please sign in to comment.