@bscotch/gamemaker-releases
Version:
Utility for combining GameMaker release data into a single feed.
37 lines • 1.22 kB
JavaScript
import fetch from 'node-fetch';
import { XMLParser } from 'fast-xml-parser';
import { isError } from './utils.js';
export async function fetchXml(url, validator) {
const res = await fetchUrl(url);
try {
const data = await res.text();
const asJson = new XMLParser().parse(data);
return validator ? validator.parse(asJson) : asJson;
}
catch (err) {
throw new Error(`Error parsing XML from ${url}: ${isError(err) ? err.message : 'UNKNOWN'}`);
}
}
export async function fetchJson(url, validator) {
const res = await fetchUrl(url);
try {
const parsed = await res.json();
return validator ? validator.parse(parsed) : parsed;
}
catch (err) {
throw new Error(`Error parsing JSON from ${url}: ${isError(err) ? err.message : 'UNKNOWN'}`);
}
}
async function fetchUrl(url) {
try {
const res = await fetch(url);
if (res.status >= 300) {
throw new Error(`Error fetching "${url}": ${res.status} ${res.statusText}`);
}
return res;
}
catch (err) {
throw new Error(`Error fetching "${url}": ${isError(err) ? err.message : 'UNKNOWN'}`);
}
}
//# sourceMappingURL=fetch.js.map