@effectionx/websocket
TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

WebSocket

A streamlined WebSocket client for Effection programs that transforms the event-based WebSocket API into a clean, resource-oriented stream.

Why Use this API?

Traditional WebSocket API require managing multiple event handlers (open, close, error, message) which can become complex and error-prone.

This package simplifies WebSocket usage by:

  • Providing a clean stream-based interface
  • Handling connection state management automatically
  • Implementing proper error handling
  • Ensuring resource cleanup

Basic Usage

import { each, main } from "effection";
import { useWebSocket } from "@effectionx/websocket";

await main(function* () {
  // Connection is guaranteed to be open when this returns
  let socket = yield* useWebSocket("ws://websocket.example.org");

  // Send messages to the server
  socket.send("Hello World");

  // Receive messages using a simple iterator
  for (let message of yield* each(socket)) {
    console.log("Message from server", message);
    yield* each.next();
  }
});

Features

  • Ready-to-use Connections: useWebSocket() returns only after the connection is established
  • Automatic Error Handling: Socket errors are properly propagated to your error boundary
  • Stream-based API: Messages are delivered through a simple stream interface
  • Clean Resource Management: Connections are properly cleaned up when the operation completes

Advanced Usage

Custom WebSocket Implementations

For environments without native WebSocket support (like Node.js < 21), you can provide your own WebSocket implementation:

import { createWebSocket } from "my-websocket-client";
import { each, main } from "effection";
import { useWebSocket } from "@effectionx/websocket";

await main(function* () {
  let socket = yield* useWebSocket(() =>
    createWebSocket("ws://websocket.example.org")
  );

  for (let message of yield* each(socket)) {
    console.log("Message from server", message);
    yield* each.next();
  }
});

Readme

Keywords

none

Package Sidebar

Install

npm i @effectionx/websocket

Weekly Downloads

0

Version

2.0.1

License

MIT

Unpacked Size

18.7 kB

Total Files

16

Last publish

Collaborators

  • frontsidejack