@kubb/plugin-client
Version:
API client generator plugin for Kubb, creating type-safe HTTP clients (Axios, Fetch) from OpenAPI specifications for making API requests.
58 lines (56 loc) • 1.86 kB
JavaScript
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const require_chunk = require('../chunk-CNbaEX1y.cjs');
//#region src/clients/fetch.ts
let _config = {};
const getConfig = () => _config;
const setConfig = (config) => {
_config = config;
return getConfig();
};
const mergeConfig = (...configs) => {
return configs.reduce((merged, config) => {
return {
...merged,
...config,
headers: {
...Array.isArray(merged.headers) ? Object.fromEntries(merged.headers) : merged.headers,
...Array.isArray(config.headers) ? Object.fromEntries(config.headers) : config.headers
}
};
}, {});
};
const client = async (paramsConfig) => {
const normalizedParams = new URLSearchParams();
const config = mergeConfig(getConfig(), paramsConfig);
Object.entries(config.params || {}).forEach(([key, value]) => {
if (value !== void 0) normalizedParams.append(key, value === null ? "null" : value.toString());
});
let targetUrl = [config.baseURL, config.url].filter(Boolean).join("");
if (config.params) targetUrl += `?${normalizedParams}`;
const response = await fetch(targetUrl, {
credentials: config.credentials || "same-origin",
method: config.method?.toUpperCase(),
body: config.data instanceof FormData ? config.data : JSON.stringify(config.data),
signal: config.signal,
headers: config.headers
});
return {
data: [
204,
205,
304
].includes(response.status) || !response.body ? {} : await response.json(),
status: response.status,
statusText: response.statusText,
headers: response.headers
};
};
client.getConfig = getConfig;
client.setConfig = setConfig;
//#endregion
exports.client = client;
exports.default = client;
exports.getConfig = getConfig;
exports.mergeConfig = mergeConfig;
exports.setConfig = setConfig;
//# sourceMappingURL=fetch.cjs.map