/** * Streaming Plugin for OpenSpeed * Provides support for streaming responses using generators and ReadableStreams */ import type { Context } from '../context.js'; export interface StreamOptions { headers?: Record; contentType?: string; onError?: (error: Error) => void; } export interface SSEOptions extends StreamOptions { retry?: number; keepAlive?: number; } /** * Stream plugin - adds streaming helpers to context */ export declare function stream(): (ctx: Context, next: () => Promise) => Promise; /** * Create stream from generator function */ export declare function createStreamHelper(ctx: Context): (generator: AsyncGenerator | Generator, options?: StreamOptions) => import("../context.js").ResponseLike; /** * Server-Sent Events (SSE) stream helper */ export declare function createSSEHelper(ctx: Context): (generator: AsyncGenerator | Generator, options?: SSEOptions) => import("../context.js").ResponseLike; /** * JSON streaming helper (NDJSON - newline delimited JSON) */ export declare function createJSONStreamHelper(ctx: Context): (generator: AsyncGenerator | Generator, options?: StreamOptions) => import("../context.js").ResponseLike; /** * Helper to create a generator from an array */ export declare function fromArray(array: T[]): AsyncGenerator; /** * Helper to create a generator from a stream */ export declare function fromReadableStream(stream: any): AsyncGenerator; /** * Helper to pipe generators */ export declare function pipe(source: AsyncGenerator, transform: (chunk: T) => U | Promise): AsyncGenerator; /** * Helper to filter generator */ export declare function filter(source: AsyncGenerator, predicate: (chunk: T) => boolean | Promise): AsyncGenerator; /** * Helper to batch generator chunks */ export declare function batch(source: AsyncGenerator, size: number): AsyncGenerator; /** * Helper to throttle generator */ export declare function throttle(source: AsyncGenerator, delayMs: number): AsyncGenerator; /** * Helper to merge multiple generators */ export declare function merge(...sources: AsyncGenerator[]): AsyncGenerator; /** * Create a file stream */ export declare function streamFile(filePath: string, _options?: StreamOptions): () => AsyncGenerator; /** * Example usage: * * import { stream, streamFile, fromArray, pipe } from 'openspeed/plugins/stream'; * * app.use(stream()); * * // Generator function streaming * app.get('/stream', (ctx) => { * return ctx.stream(async function* () { * yield 'Hello '; * await new Promise(r => setTimeout(r, 1000)); * yield 'World!'; * }()); * }); * * // Server-Sent Events * app.get('/events', (ctx) => { * return ctx.streamSSE(async function* () { * let count = 0; * while (count < 10) { * yield { data: { count, timestamp: Date.now() } }; * await new Promise(r => setTimeout(r, 1000)); * count++; * } * }()); * }); * * // JSON streaming (NDJSON) * app.get('/data', (ctx) => { * return ctx.streamJSON(async function* () { * for (let i = 0; i < 100; i++) { * yield { id: i, value: Math.random() }; * } * }()); * }); * * // File streaming * app.get('/file', (ctx) => { * return ctx.stream(streamFile('./large-file.txt')()); * }); * * // Transform and filter * app.get('/filtered', (ctx) => { * const numbers = async function* () { * for (let i = 0; i < 100; i++) yield i; * }; * * const evens = filter(numbers(), n => n % 2 === 0); * const doubled = pipe(evens, n => n * 2); * * return ctx.streamJSON(doubled); * }); */ //# sourceMappingURL=stream.d.ts.map