shelving
Version:
Toolkit for using data in JavaScript.
41 lines (40 loc) • 1.76 kB
JavaScript
import { ANSI_FAILURE, ANSI_LEFT, ANSI_RIGHT, ANSI_SUCCESS, ANSI_WAITING } from "../../util/ansi.js";
import { debugFullRequest, debugFullResponse, debugRequest } from "../../util/debug.js";
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
/** Provider that logs everything to the console in some detail to help diagnose issues in development. */
export class DebugAPIProvider extends ThroughAPIProvider {
createRequest(endpoint, payload, options, caller = this.createRequest) {
try {
const request = super.createRequest(endpoint, payload, options, caller);
console.debug(`${ANSI_WAITING} ${endpoint.toString()}`, payload);
return request;
}
catch (reason) {
console.error(`${ANSI_FAILURE} ${endpoint.toString()}`, payload, reason);
throw reason;
}
}
async fetch(request) {
try {
console.debug(`${ANSI_RIGHT} ${await debugFullRequest(request)}`);
const response = await super.fetch(request);
console.debug(`${ANSI_LEFT} ${debugRequest(request)}\n\n${await debugFullResponse(response)}`);
return response;
}
catch (reason) {
console.error(`${ANSI_FAILURE} ${debugRequest(request)}`, reason);
throw reason;
}
}
async parseResponse(endpoint, response, caller = this.parseResponse) {
try {
const result = await super.parseResponse(endpoint, response, caller);
console.debug(`${ANSI_SUCCESS} ${endpoint.toString()}`, result);
return result;
}
catch (reason) {
console.error(`${ANSI_FAILURE} ${endpoint.toString()}`, reason);
throw reason;
}
}
}