shelving
Version:
Toolkit for using data in JavaScript.
33 lines (32 loc) • 1.13 kB
JavaScript
import { awaitDispose } from "../../util/dispose.js";
import { APIProvider } from "./APIProvider.js";
/**
* Provider wrapper that delegates API operations to a source provider.
* - Extend this when you want to intercept only selected API operations, such as injecting auth headers or logging.
*/
export class ThroughAPIProvider extends APIProvider {
get url() {
return this.source.url;
}
source;
constructor(source) {
super();
this.source = source;
}
renderURL(endpoint, payload, caller = this.renderURL) {
return this.source.renderURL(endpoint, payload, caller);
}
createRequest(endpoint, payload, options, caller = this.createRequest) {
return this.source.createRequest(endpoint, payload, options, caller);
}
parseResponse(endpoint, response, caller = this.parseResponse) {
return this.source.parseResponse(endpoint, response, caller);
}
fetch(request) {
return this.source.fetch(request);
}
// Implement `AsyncDisposable`
async [Symbol.asyncDispose]() {
await awaitDispose(this.source);
}
}