45 lines
1.0 KiB
TypeScript
45 lines
1.0 KiB
TypeScript
import * as types from './types.js';
|
|
|
|
/**
|
|
* Abstract Core Response class that provides a fetch-like API
|
|
*/
|
|
export abstract class CoreResponse<T = any> implements types.ICoreResponse<T> {
|
|
protected consumed = false;
|
|
|
|
// Public properties
|
|
public abstract readonly ok: boolean;
|
|
public abstract readonly status: number;
|
|
public abstract readonly statusText: string;
|
|
public abstract readonly headers: types.Headers;
|
|
public abstract readonly url: string;
|
|
|
|
/**
|
|
* Ensures the body can only be consumed once
|
|
*/
|
|
protected ensureNotConsumed(): void {
|
|
if (this.consumed) {
|
|
throw new Error('Body has already been consumed');
|
|
}
|
|
this.consumed = true;
|
|
}
|
|
|
|
/**
|
|
* Parse response as JSON
|
|
*/
|
|
abstract json(): Promise<T>;
|
|
|
|
/**
|
|
* Get response as text
|
|
*/
|
|
abstract text(): Promise<string>;
|
|
|
|
/**
|
|
* Get response as ArrayBuffer
|
|
*/
|
|
abstract arrayBuffer(): Promise<ArrayBuffer>;
|
|
|
|
/**
|
|
* Get response as a web-style ReadableStream
|
|
*/
|
|
abstract stream(): ReadableStream<Uint8Array> | null;
|
|
} |