25 lines
609 B
TypeScript
25 lines
609 B
TypeScript
export function syncFetch(
|
|
url: string,
|
|
init?: RequestInit & { body?: XMLHttpRequestBodyInit | Document },
|
|
) {
|
|
// Running under node.js
|
|
if (typeof window === 'undefined') {
|
|
return require('sync-fetch')(url, init);
|
|
}
|
|
|
|
const request = new XMLHttpRequest();
|
|
if (init?.headers) {
|
|
for (const [key, value] of Object.entries(init.headers)) {
|
|
request.setRequestHeader(key, value);
|
|
}
|
|
}
|
|
|
|
request.open(init?.method ?? 'GET', url, false);
|
|
request.send(init?.body ?? null);
|
|
|
|
return {
|
|
...request,
|
|
json: () => JSON.parse(request.responseText),
|
|
};
|
|
}
|