@effectionx/websocket@2.0.1Built and signed on GitHub ActionsBuilt and signed on GitHub Actions
Built and signed on GitHub Actions
latest
Use the WebSocket API as an Effection resource.
This package works with Cloudflare Workers, Node.js, Deno, Bun, Browsers




JSR Score
100%
Published
3 months ago (2.0.1)
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(); } });
Built and signed on
GitHub Actions
Add Package
deno add jsr:@effectionx/websocket
Import symbol
import * as websocket from "@effectionx/websocket";
Import directly with a jsr specifier
import * as websocket from "jsr:@effectionx/websocket";
Add Package
pnpm i jsr:@effectionx/websocket
pnpm dlx jsr add @effectionx/websocket
Import symbol
import * as websocket from "@effectionx/websocket";
Add Package
yarn add jsr:@effectionx/websocket
yarn dlx jsr add @effectionx/websocket
Import symbol
import * as websocket from "@effectionx/websocket";
Add Package
vlt install jsr:@effectionx/websocket
Import symbol
import * as websocket from "@effectionx/websocket";
Add Package
npx jsr add @effectionx/websocket
Import symbol
import * as websocket from "@effectionx/websocket";
Add Package
bunx jsr add @effectionx/websocket
Import symbol
import * as websocket from "@effectionx/websocket";