fetch-to-node
Version:
Node.js-compatible request and response objects for WinterTC runtimes
143 lines • 5.88 kB
TypeScript
import { Buffer } from "node:buffer";
import { Writable } from "node:stream";
import type { OutgoingHttpHeaders, OutgoingMessage, IncomingMessage } from "node:http";
import { kNeedDrain, kOutHeaders } from "./internal-http.js";
declare const kCorked: unique symbol;
declare const kChunkedBuffer: unique symbol;
declare const kChunkedLength: unique symbol;
declare const kUniqueHeaders: unique symbol;
declare const kBytesWritten: unique symbol;
declare const kErrored: unique symbol;
declare const kHighWaterMark: unique symbol;
declare const kRejectNonStandardBodyWrites: unique symbol;
type WriteCallback = (err?: Error) => void;
type OutputData = {
data: string | Buffer | Uint8Array | null;
encoding?: BufferEncoding | null;
callback?: WriteCallback | null;
};
type WrittenDataBufferEntry = OutputData & {
length: number;
written: boolean;
};
type WrittenDataBufferConstructorArgs = {
onWrite?: (index: number, entry: WrittenDataBufferEntry) => void;
};
/**
* An in-memory buffer that stores the chunks that have been streamed to an
* OutgoingMessage instance.
*/
export declare class WrittenDataBuffer {
[kCorked]: number;
[kHighWaterMark]: number;
entries: WrittenDataBufferEntry[];
onWrite?: (index: number, entry: WrittenDataBufferEntry) => void;
constructor(params?: WrittenDataBufferConstructorArgs);
write(data: string | Uint8Array, encoding?: BufferEncoding | null, callback?: WriteCallback | null): boolean;
cork(): void;
uncork(): void;
_flush(): void;
get writableLength(): number;
get writableHighWaterMark(): number;
get writableCorked(): number;
}
export type HeadersSentEvent = {
statusCode: number;
statusMessage: string;
headers: [header: string, value: string][];
};
export type DataWrittenEvent = {
index: number;
entry: WrittenDataBufferEntry;
};
export type OutgoingMessageOptions = {
highWaterMark?: number | undefined;
rejectNonStandardBodyWrites?: boolean | undefined;
};
/**
* This is an implementation of OutgoingMessage from Node.js intended to run in
* a WinterTC runtime. The 'Writable' interface of this class is wired to an in-memory
* buffer.
*
* This instance can be used in normal ways, but it does not give access to the
* underlying socket (because there isn't one. req.socket will always return null).
*
* Some code in this class is transplanted/adapted from node/lib/_http_outgoing.js
*/
export declare class FetchOutgoingMessage extends Writable implements OutgoingMessage {
readonly req: IncomingMessage;
outputData: OutputData[];
outputSize: number;
writtenHeaderBytes: number;
_last: boolean;
chunkedEncoding: boolean;
shouldKeepAlive: boolean;
maxRequestsOnConnectionReached: boolean;
_defaultKeepAlive: boolean;
useChunkedEncodingByDefault: boolean;
sendDate: boolean;
_removedConnection: boolean;
_removedContLen: boolean;
_removedTE: boolean;
strictContentLength: boolean;
[kBytesWritten]: number;
_contentLength: number | null;
_hasBody: boolean;
_trailer: string;
[kNeedDrain]: boolean;
finished: boolean;
_headerSent: boolean;
[kCorked]: number;
[kChunkedBuffer]: OutputData[];
[kChunkedLength]: number;
_closed: boolean;
_header: string | null;
[kOutHeaders]: Record<string, any> | null;
_keepAliveTimeout: number;
_maxRequestsPerSocket: number | undefined;
_onPendingData: (delta: number) => void;
[kUniqueHeaders]: Set<string> | null;
[kErrored]: Error | null | undefined;
[kHighWaterMark]: number;
[kRejectNonStandardBodyWrites]: boolean;
_writtenDataBuffer: WrittenDataBuffer;
constructor(req: IncomingMessage, options?: OutgoingMessageOptions);
_renderHeaders(): Record<string, string>;
cork(): void;
uncork(): void;
setTimeout(msecs: number, callback?: () => void): this;
destroy(error?: Error): this;
_send(data: string | Uint8Array, encoding?: BufferEncoding | WriteCallback | null, callback?: WriteCallback | null, byteLength?: number): boolean;
_writeRaw(data: string | Uint8Array, encoding?: BufferEncoding | WriteCallback | null, callback?: WriteCallback | null, size?: number): boolean;
_onDataWritten(index: number, entry: WrittenDataBufferEntry): void;
_storeHeader(firstLine: string, headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]> | null): void;
get _headers(): OutgoingHttpHeaders;
set _headers(val: OutgoingHttpHeaders);
get connection(): any;
set connection(_socket: any);
get socket(): any;
set socket(_socket: any);
get _headerNames(): any;
set _headerNames(val: any);
setHeader(name: string, value: number | string | ReadonlyArray<string>): this;
setHeaders(headers: Headers | Map<string, number | string | readonly string[]>): this;
appendHeader(name: string, value: number | string | ReadonlyArray<string>): this;
getHeader(name: string): number | string | string[] | undefined;
getHeaderNames(): string[];
getRawHeaderNames(): any[];
getHeaders(): OutgoingHttpHeaders;
hasHeader(name: string): boolean;
removeHeader(name: string): void;
_implicitHeader(): void;
get headersSent(): boolean;
write(chunk: string | Buffer | Uint8Array, encoding?: BufferEncoding | WriteCallback | null, callback?: WriteCallback): boolean;
addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void;
end(chunk?: string | Buffer | Uint8Array | WriteCallback | null, encoding?: BufferEncoding | WriteCallback | null, callback?: WriteCallback): this;
_finish(): void;
_flush(): void;
_flushOutput(dataBuffer: WrittenDataBuffer): boolean | undefined;
flushHeaders(): void;
pipe<T extends NodeJS.WritableStream>(destination: T): T;
}
export {};
//# sourceMappingURL=http-outgoing.d.ts.map