API · Create

fromEvent()

Adapt repeated browser or Node events into a hot Exstream source with explicit overflow policy.

Signature

fromEvent<Args extends unknown[], T>(
  target: EventTargetLike | EventEmitterLike,
  event: string | symbol,
  options?: FromEventOptions<Args, T> | null,
): Exstream<T, RecordContext<T>> & { received: number }

interface FromEventOptions<Args extends unknown[], T> extends StreamOptions {
  map?: (...args: Args) => T
  end?: string | symbol | false
  error?: string | symbol | false
  highWaterMark?: number
}

Example

const messages = exstream.fromEvent(socket, 'message', {
  map: (event) => event.data,
  end: 'close',
  error: 'error',
  highWaterMark: 256,
  overflow: 'drop-oldest',
})

Parameters

target must expose addEventListener/removeEventListener or on/off. event is the data event. By default, one event argument becomes the value and multiple arguments become an array; map replaces that rule. end defaults to 'end', error to 'error', and either can be false to disable its listener.

highWaterMark is the source buffer limit: default 1 for targets with pause/resume, otherwise 1024. Non-pausable targets must use a finite limit. Although FromEventOptions extends StreamOptions, the adapter uses highWaterMark rather than bufferLimit; setting only bufferLimit has no effect. overflow defaults to 'error'; drop policies are appropriate only when event loss is intentional. signal comes from StreamOptions.

Hot-source behavior

received counts data events before mapping, including events later dropped or failed. Pausable targets are paused when writeData() reports pressure and resumed on drain. Non-pausable targets keep producing into the configured buffer. A mapping exception or configured error event is a fatal source failure. End, destroy, or abort removes every listener.

exstream(), observe(), stream state