@hokuto/jam-node
Version:
JAM Node TS, guardians and utils
113 lines (112 loc) • 3.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.svgFetch = exports.pngFetch = exports.blobFetch = exports.uploadFetch = exports.jsonFetch = exports.apiProps = exports.apiFetch = void 0;
const node_fetch_1 = __importDefault(require("node-fetch"));
const types_js_1 = require("../types.js");
const jam_core_1 = require("@hokuto/jam-core");
function apiFetch(input, init = {}) {
return new Promise((resolve, reject) => {
return (0, node_fetch_1.default)(input, init)
.then((res) => {
return res.ok ? resolve(res) : Promise.reject(res);
}, (rej) => {
return Promise.reject(rej);
})
.catch((rej) => {
if (rej instanceof Error)
return reject(rej);
return rej.text().then((text) => {
const cause = {
status: rej.status,
text,
};
return reject(new Error(`could not request data from ${input}`, { cause }));
});
});
});
}
exports.apiFetch = apiFetch;
function apiProps(url, options = {}) {
const { method = types_js_1.ApiMethod.Get, params, headers = {} } = options;
let { body } = options;
let qs;
switch (method) {
case types_js_1.ApiMethod.Get:
qs =
params &&
new URLSearchParams(Object.keys(params).reduce((prev, curr) => {
return { ...prev, [curr]: String(params[curr]) };
}, {}));
break;
default:
if (params)
body = JSON.stringify(params);
}
url = `${url}${qs ? "?" + qs.toString() : ""}`;
return { url, headers, method, body };
}
exports.apiProps = apiProps;
function jsonFetch(baseurl, options = {}) {
const { headers, url, method, body } = apiProps(baseurl, options);
return apiFetch(url, {
method,
body,
headers: {
"Content-Type": "application/json",
Accept: "application/json",
...headers,
},
})
.then((res) => {
if (res.ok)
return res.json();
return res.text().then((err) => Promise.reject(new Error(err)));
})
.then((data) => {
return Promise.resolve(data);
}, (err) => {
return Promise.reject(err);
});
}
exports.jsonFetch = jsonFetch;
function uploadFetch(baseurl, options = {}, contentType = jam_core_1.FetchContentType.Json) {
const { headers, url, method, body } = apiProps(baseurl, options);
return apiFetch(url, {
method,
body,
headers,
})
.then((res) => {
if (res.ok)
return contentType === jam_core_1.FetchContentType.Json ? res.json() : res.text();
return res.text().then((err) => Promise.reject(new Error(err)));
})
.then((data) => {
return Promise.resolve(data);
}, (err) => Promise.reject(err));
}
exports.uploadFetch = uploadFetch;
function blobFetch(baseurl, options = {}, contentType = jam_core_1.BlobContentType.Json) {
const { headers, url, method, body } = apiProps(baseurl, options);
return apiFetch(url, {
method,
body,
headers: {
"Content-Type": contentType,
Accept: jam_core_1.BlobContentType.Json,
...headers,
},
}).then((res) => res.blob());
}
exports.blobFetch = blobFetch;
function pngFetch(baseurl, options = {}) {
return blobFetch(baseurl, options, jam_core_1.BlobContentType.Image);
}
exports.pngFetch = pngFetch;
function svgFetch(baseurl, options = {}) {
return blobFetch(baseurl, options, jam_core_1.BlobContentType.Svg);
}
exports.svgFetch = svgFetch;