Skip to main content

simulateReadableStream

simulateReadableStream is a utility function that creates a ReadableStream which emits provided values sequentially with configurable delays. This is particularly useful for testing streaming functionality or simulating time-delayed data streams.

import { simulateReadableStream } from 'ai';

const stream = simulateReadableStream({
  chunks: ['Hello', ' ', 'World'],
  initialDelayInMs: 100,
  chunkDelayInMs: 50,
});

Import

import { simulateReadableStream } from "ai"

API Signature

Parameters

  • chunks (T[]): Array of values to be emitted by the stream
  • initialDelayInMs? (number | null): Initial delay in milliseconds before emitting the first value. Defaults to 0. Set to null to skip the initial delay entirely.
  • chunkDelayInMs? (number | null): Delay in milliseconds between emitting each value. Defaults to 0. Set to null to skip delays between chunks.

Returns

Returns a ReadableStream<T> that:

  • Emits each value from the provided chunks array sequentially
  • Waits for initialDelayInMs before emitting the first value (if not null)
  • Waits for chunkDelayInMs between emitting subsequent values (if not null)
  • Closes automatically after all chunks have been emitted

Type Parameters

  • T: The type of values contained in the chunks array and emitted by the stream

Examples

Basic Usage

const stream = simulateReadableStream({
  chunks: ['Hello', ' ', 'World'],
});

With Delays

const stream = simulateReadableStream({
  chunks: ['Hello', ' ', 'World'],
  initialDelayInMs: 1000, // Wait 1 second before first chunk
  chunkDelayInMs: 500, // Wait 0.5 seconds between chunks
});

Without Delays

const stream = simulateReadableStream({
  chunks: ['Hello', ' ', 'World'],
  initialDelayInMs: null, // No initial delay
  chunkDelayInMs: null, // No delay between chunks
});