UNPKG

@hokuto/jam-node

Version:

JAM Node TS, guardians and utils

113 lines (112 loc) 3.91 kB
"use strict"; 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;