@vielzeug/eventit
v3.0.4
Published
--- description: Zero-dependency typed event bus with subscribe/emit, wait(), async streams, AbortSignal support, and test helpers. package: eventit category: events keywords: [event-bus, typed-events, pub-sub, reactive, decoupled, async-streams] related:
Readme
description: Zero-dependency typed event bus with subscribe/emit, wait(), async streams, AbortSignal support, and test helpers. package: eventit category: events keywords: [event-bus, typed-events, pub-sub, reactive, decoupled, async-streams] related: [stateit, routeit, workit] exports: [createBus, createTestBus]
@vielzeug/eventit
Zero-dependency typed event bus with subscribe/emit, wait(), async streams, AbortSignal support, and test helpers.
Package: @vielzeug/eventit · Category: Events
Key exports: createBus, createTestBus
When to use: Zero-dependency typed event bus with subscribe/emit, wait(), async streams, AbortSignal support, and test helpers.
Related: @vielzeug/stateit · @vielzeug/routeit · @vielzeug/workit
@vielzeug/eventit is part of Vielzeug and ships as a zero-dependency TypeScript package with ESM+CJS output.
Installation
pnpm add @vielzeug/eventit
npm install @vielzeug/eventit
yarn add @vielzeug/eventitQuick Start
import { BusDisposedError, createBus } from '@vielzeug/eventit';
type AppEvents = {
'user:login': { userId: string; email: string };
'user:logout': void;
};
const bus = createBus<AppEvents>();
bus.on('user:login', ({ userId }) => {
console.log('Logged in:', userId);
});
bus.emit('user:login', { email: '[email protected]', userId: '42' });
bus.emit('user:logout');
const nextLogin = await bus.wait('user:login');
const nextSessionEvent = await bus.waitAny(['user:login', 'user:logout'] as const);
if (nextSessionEvent.event === 'user:login') {
console.log(nextSessionEvent.payload.userId);
}
try {
await bus.wait('user:login', AbortSignal.timeout(1_000));
} catch (err) {
if (err instanceof BusDisposedError) {
console.log('Bus was disposed');
}
}Documentation
License
MIT © Helmuth Saatkamp — part of the Vielzeug monorepo.
