UNPKG

bandcamp-fetch

Version:
122 lines 5.14 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Fetcher_cookie, _Fetcher_cache; import { URL } from 'url'; import { CacheDataType } from './Cache.js'; export var FetchMethod; (function (FetchMethod) { FetchMethod["GET"] = "GET"; FetchMethod["POST"] = "POST"; FetchMethod["HEAD"] = "HEAD"; })(FetchMethod || (FetchMethod = {})); class Fetcher { constructor(params) { _Fetcher_cookie.set(this, void 0); _Fetcher_cache.set(this, void 0); __classPrivateFieldSet(this, _Fetcher_cache, params.cache, "f"); this.setCookie(params.cookie); } setCookie(value) { __classPrivateFieldSet(this, _Fetcher_cookie, value, "f"); const valueChanged = ((__classPrivateFieldGet(this, _Fetcher_cookie, "f") || null) !== (value || null)); if (valueChanged) { __classPrivateFieldGet(this, _Fetcher_cache, "f").clear(); } } get cookie() { return __classPrivateFieldGet(this, _Fetcher_cookie, "f"); } fetch(url, jsonResponse, method, payload) { if (jsonResponse === undefined) { jsonResponse = false; } return __classPrivateFieldGet(this, _Fetcher_cache, "f").getOrSet(CacheDataType.Page, getCacheKey(url, jsonResponse, payload), async () => { if (method === undefined) { method = FetchMethod.GET; } if (method === FetchMethod.HEAD) { const response = await fetch(url, { method: 'HEAD' }); return { ok: response.ok, status: response.status }; } let response; if (method === FetchMethod.GET) { const urlObj = new URL(url); if (payload) { for (const [key, value] of Object.entries(payload)) { urlObj.searchParams.set(key, value); } } try { const request = new Request(urlObj.toString()); if (__classPrivateFieldGet(this, _Fetcher_cookie, "f")) { request.headers.set('Cookie', __classPrivateFieldGet(this, _Fetcher_cookie, "f")); } response = await fetch(request); } catch (error) { throw new FetchError(error); } } else { const init = { method: 'POST', body: payload ? JSON.stringify(payload) : undefined }; const request = new Request(url); request.headers.set('Content-Type', 'application/json'); if (__classPrivateFieldGet(this, _Fetcher_cookie, "f")) { request.headers.set('Cookie', __classPrivateFieldGet(this, _Fetcher_cookie, "f")); } try { response = await fetch(request, init); } catch (error) { throw new FetchError(error); } } if (response.status === 429) { throw new FetchError({ message: '429 Too Many Requests', code: 429 }); } if (jsonResponse) { return response.json(); } return response.text(); }); } } _Fetcher_cookie = new WeakMap(), _Fetcher_cache = new WeakMap(); export default Fetcher; function getCacheKey(url, jsonResponse, payload) { return url + (jsonResponse ? ':json' : ':html') + (payload ? `:${JSON.stringify(payload)}` : ''); } export class FetchError extends Error { constructor(payload) { super(); if (payload?.message) { this.message = payload.message; } if (payload?.code) { this.code = payload.code; } if (payload?.stack) { this.stack = payload.stack; } } } //# sourceMappingURL=Fetcher.js.map