51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 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;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Get response as a Node.js stream (throws in browser)
 | 
						|
   */
 | 
						|
  abstract streamNode(): NodeJS.ReadableStream | never;
 | 
						|
}
 |