UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

21 lines (20 loc) 1.16 kB
import { ResponseError } from "../../error/ResponseError.js"; import { ThroughAPIProvider } from "./ThroughAPIProvider.js"; /** Validate an asynchronous source provider (source can have any type because validation guarantees the type). */ export class ValidationAPIProvider extends ThroughAPIProvider { createRequest(endpoint, payload, options, caller = this.createRequest) { // Validate payload — let thrown strings bubble up as user-readable messages for e.g. form handlers. return super.createRequest(endpoint, endpoint.payload.validate(payload), options, caller); } async parseResponse(endpoint, response, caller = this.parseResponse) { try { // Validate result — wrap in ResponseError as this is a server/transport problem, not user error. return endpoint.result.validate(await super.parseResponse(endpoint, response, caller)); } catch (thrown) { if (typeof thrown === "string") throw new ResponseError(`Invalid result for ${endpoint}:\n${thrown}`, { provider: this, endpoint, code: 422, caller }); throw thrown; } } }