Event System
A tiny synchronous event system separate from DOM events.
import { Emitter } from "rvx";
const emitter = new Emitter<[address: string, port: number]>();
// Subscribe until the current lifecycle is disposed:
emitter.event((address, port) => {
console.log("Connected:", address, port);
});
// Synchronously call listeners in subscription order:
emitter.emit("127.0.0.1", 12345);
import { Emitter } from "./rvx.js";
/** @type {Emitter<[address: string, port: number]>} */
const emitter = new Emitter();
// Subscribe until the current lifecycle is disposed:
emitter.event((address, port) => {
console.log("Connected:", address, port);
});
// Synchronously call listeners in subscription order:
emitter.emit("127.0.0.1", 12345);
Isolation
Event listeners are not isolated from the current context in any way. E.g. they will be able to register teardown hooks or signal accesses etc.
Error Handling
The event system has no dedicated error handling. Any errors thrown from listeners will prevent further listeners from running.
Components
To allow components to listen to events, it's enough to pass the event
as a property:
import { Event, Emitter } from "rvx";
function SomeComponent(props: { onMessage: Event<[message: string]> }) {
props.onMessage(message => {
console.log(message);
});
}
const messages = new Emitter<[message: string]>();
<SomeComponent onMessage={messages.event} />
import { Emitter } from "./rvx.js";
/**
* @param {object} props
* @param {import("./rvx.event.js").Event<[message: string]>} props.onMessage
*/
function SomeComponent(props) {
props.onMessage(message => {
console.log(message);
});
}
const messages = new Emitter();
SomeComponent({ onMessage: messages.event })
To allow components to also emit events, pass the emitter instead.