shelving
Version:
Toolkit for using data in JavaScript.
36 lines (35 loc) • 1.74 kB
TypeScript
import type { AnyCaller } from "../../util/function.js";
import type { RequestHandler, RequestOptions } from "../../util/http.js";
import type { AnyEndpoint, Endpoint } from "../endpoint/Endpoint.js";
import type { APIProvider } from "./APIProvider.js";
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
export type MockAPIFetchCall = {
readonly request: Request;
readonly response: Response;
};
export type MockAPIRequestCall = {
readonly endpoint: AnyEndpoint;
readonly payload: unknown;
readonly options: RequestOptions | undefined;
readonly request: Request;
};
export type MockAPIResponseCall = {
readonly endpoint: AnyEndpoint;
readonly response: Response;
readonly result: unknown;
};
/**
* Provider that logs API calls without sending network requests.
* - Extends `ThroughAPIProvider` to delegate request building and response parsing to a source `APIProvider`.
* - The source provider's `fetch()` is never called — this provider intercepts all fetches and routes them through a `RequestHandler`.
*/
export declare class MockAPIProvider<P = unknown, R = unknown> extends ThroughAPIProvider<P, R> {
readonly requestCalls: MockAPIRequestCall[];
readonly fetchCalls: MockAPIFetchCall[];
readonly responseCalls: MockAPIResponseCall[];
readonly handler: RequestHandler;
constructor(handler?: RequestHandler, source?: APIProvider<P, R>);
createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
parseResponse<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
fetch(request: Request): Promise<Response>;
}