UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

24 lines (23 loc) 1.1 kB
import { ResponseError } from "../../error/ResponseError.js"; import { getMessage } from "../../util/error.js"; import { createJSONRequest, parseResponseJSON } from "../../util/http.js"; import { ClientAPIProvider } from "./ClientAPIProvider.js"; /** API provider that always sends request bodies as JSON and parses responses as JSON. */ export class JSONAPIProvider extends ClientAPIProvider { _createBodyRequest(method, url, payload, options, caller) { return createJSONRequest(method, url, payload, options, caller); } /** * Parse a JSON `Response` for an endpoint. * * - Non-2xx responses become `ResponseError`. * - JSON is parsed even if the server omitted or mis-set the response content type. */ async parseResponse(_endpoint, response, caller = this.parseResponse) { const { ok, status } = response; const content = await parseResponseJSON(response, caller); if (!ok) throw new ResponseError(getMessage(content) ?? `Error ${status}`, { code: status, cause: response, caller }); return content; } }