@boxyhq/svelte-ui
Version:
Svelte UI components from BoxyHQ
45 lines (44 loc) • 1.21 kB
JavaScript
async function parseResponseContent(response) {
const responseText = await response.text();
try {
return responseText.length ? JSON.parse(responseText) : '';
}
catch (err) {
return responseText;
}
}
export async function sendHTTPRequest(url, options) {
try {
const response = await fetch(url, options);
if (response.status === 204) {
return;
}
const pageToken = response.headers.get('jackson-pagetoken');
const responseContent = await parseResponseContent(response);
if (!response.ok) {
throw new ApiError(response.status, responseContent.error.message);
}
if (pageToken && typeof responseContent === 'object') {
return {
data: responseContent,
pageToken
};
}
return responseContent;
}
catch (error) {
const message = error.message || 'Something went wrong';
return {
error: {
message
}
};
}
}
class ApiError extends Error {
status;
constructor(status, message) {
super(message);
this.status = status;
}
}