Skip to content

Commit

Permalink
🏷️ Fix request types
Browse files Browse the repository at this point in the history
  • Loading branch information
cermakjiri committed May 3, 2021
1 parent c87d69a commit 7cf6eb8
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 27 deletions.
2 changes: 1 addition & 1 deletion packages/@ackee/antonio-core/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export { create as default } from './modules/core';
export type { DefaultRequestConfig } from './types';
export type { RequestConfig } from './types';
6 changes: 4 additions & 2 deletions packages/@ackee/antonio-core/src/modules/core/config/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import Headers from 'fetch-headers';
import loglevel from 'loglevel';

import { DefaultRequestConfig, GeneralConfig } from '../../../types';
import { RequestConfig, GeneralConfig } from '../../../types';

export const defaultRequestConfig: DefaultRequestConfig = {
export const defaultRequestConfig: Required<Pick<RequestConfig, 'responseType' | 'headers'>> = {
responseType: 'json',
headers: new Headers(),
};

export type DefaultRequestConfig = RequestConfig & typeof defaultRequestConfig;

export const defaultGeneralConfig: GeneralConfig = {
logger: loglevel,
};
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { RequestConfig, RequestBody, GeneralConfig } from '../../../types';
import { defaultRequestConfig, defaultGeneralConfig } from '../config';
import { defaultRequestConfig, defaultGeneralConfig, DefaultRequestConfig } from '../config';
import { mergeRequestConfigs } from '../utils';

import request from '../request';

export const generalConfigs = new WeakMap();
class HttpClient {
readonly defaults: RequestConfig;
readonly defaults: DefaultRequestConfig;
readonly config: GeneralConfig;

constructor(requestConfig?: RequestConfig, generalConfig?: Partial<GeneralConfig>) {
this.defaults = Object.freeze<RequestConfig>(mergeRequestConfigs(defaultRequestConfig, requestConfig));
this.defaults = Object.freeze<DefaultRequestConfig>(mergeRequestConfigs(defaultRequestConfig, requestConfig));

const config = Object.freeze<GeneralConfig>({
...defaultGeneralConfig,
Expand Down
5 changes: 3 additions & 2 deletions packages/@ackee/antonio-core/src/modules/core/request.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { RequestMethod, RequestConfig, RequestResult, GeneralConfig } from '../../types';
import { RequestMethod, RequestResult, GeneralConfig, RequestConfig } from 'types';
import { DefaultRequestConfig } from './config';
import { HTTPError } from './errors';
import { createRequestUrl, formatRequestBody, setRequestHeaders, parseResponse, mergeRequestConfigs } from './utils';

Expand All @@ -7,7 +8,7 @@ export default async function request(
requestUrl: string,
body: BodyInit | undefined,
requestConfig: RequestConfig | undefined,
defaultRequestConfig: RequestConfig,
defaultRequestConfig: DefaultRequestConfig,
generalConfig: GeneralConfig,
): Promise<RequestResult> {
const config = mergeRequestConfigs(defaultRequestConfig, requestConfig);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Headers from 'fetch-headers';
import { RequestConfig, RequestHeaders, RequestSearchParams } from '../../../types';
import { RequestConfig, RequestHeaders, RequestSearchParams } from 'types';
import { DefaultRequestConfig } from '../config';

const getSearchParamsEntries = (value?: RequestSearchParams) =>
value instanceof URLSearchParams ? value.entries() : Object.entries(value ?? {});
Expand Down Expand Up @@ -35,8 +36,8 @@ function mergeHeaders(headersA?: RequestHeaders, headersB?: RequestHeaders): Hea
return result;
}

export function mergeRequestConfigs(configA: RequestConfig = {}, configB: RequestConfig = {}): RequestConfig {
const result: RequestConfig = {
export function mergeRequestConfigs(configA: DefaultRequestConfig, configB: RequestConfig = {}): DefaultRequestConfig {
const result: DefaultRequestConfig = {
...configA,
...configB,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export function parseResponse(responseType: ResponseType | undefined, response:
switch (responseType) {
case 'json': {
const contentType = response.headers.get(Header.CONTENT_TYPE);
const hasJsonResponseType = parseHeaderValue(contentType).includes(ResponseTypes.json);
const hasJsonResponseType = parseHeaderValue(contentType).includes(ResponseTypes.JSON);

return hasJsonResponseType ? response.json() : null;
}
Expand Down
27 changes: 12 additions & 15 deletions packages/@ackee/antonio-core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,40 +17,37 @@ export type RequestUriParams = Params;
export type RequestSearchParams = URLSearchParams | Params;

export enum ResponseTypes {
json = 'application/json',
text = 'text/*',
formData = 'multipart/form-data',
blob = '*/*',
JSON = 'application/json',
TEXT = 'text/*',
FORM_DATA = 'multipart/form-data',
BLOB = '*/*',
}

export enum Header {
CONTENT_TYPE = 'Content-Type',
}

export interface RequestConfig extends Omit<RequestInit, 'body' | 'headers' | 'method'> {
export interface FullRequestConfig extends Omit<RequestInit, 'body' | 'headers' | 'method'> {
// `baseURL` will be prepended to `url` unless `url` is absolute.
// It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
// to methods of that instance.
baseURL?: string;
baseURL: string;

responseType?: ResponseType;
responseType: ResponseType;

uriParams?: RequestUriParams;
uriParams: RequestUriParams;

headers?: RequestHeaders;
headers: RequestHeaders;

searchParams?: RequestSearchParams;
searchParams: RequestSearchParams;
}

export type RequestConfig = Partial<FullRequestConfig>;

export interface GeneralConfig {
logger: Logger;
}

export interface DefaultRequestConfig extends RequestConfig {
headers: RequestHeaders;
responseType: ResponseType;
}

export interface RequestResult {
request: Request;
response: Response;
Expand Down

0 comments on commit 7cf6eb8

Please sign in to comment.