api-wizard
Version:
A powerful TypeScript wrapper for native Fetch API with token management, interceptors, and type-safe HTTP requests
38 lines (37 loc) • 1.63 kB
JavaScript
import { FetchClientImpl } from "./fetchClient";
import { InterceptedFetchClient } from "./interceptor";
import { fetchRequestConfig, createFetchDefaults } from "./config";
function instance(baseUrl, option) {
const fetchDefaults = createFetchDefaults({
baseUrl,
option,
});
// 인터셉터가 있으면 InterceptedFetchClient, 없으면 기본 FetchClientImpl 사용
const fetchInstance = option?.interceptor
? new InterceptedFetchClient({
baseURL: fetchDefaults.baseURL,
headers: fetchDefaults.headers,
requestConfig: {
credentials: fetchDefaults.credentials,
...fetchRequestConfig
},
interceptor: option.interceptor
})
: new FetchClientImpl({
baseURL: fetchDefaults.baseURL,
headers: fetchDefaults.headers,
requestConfig: {
credentials: fetchDefaults.credentials,
...fetchRequestConfig
}
});
return {
get: (url, config) => fetchInstance.get(url, { ...fetchRequestConfig, ...config }),
post: (url, data, config) => fetchInstance.post(url, data, { ...fetchRequestConfig, ...config }),
put: (url, data, config) => fetchInstance.put(url, data, { ...fetchRequestConfig, ...config }),
patch: (url, data, config) => fetchInstance.patch(url, data, { ...fetchRequestConfig, ...config }),
delete: (url, config) => fetchInstance.delete(url, { ...fetchRequestConfig, ...config }),
getInstance: () => fetchInstance
};
}
export default instance;