xPulse
πŸ‡¬πŸ‡§ EN
Pages
Contents

Guide

Installation

npm install @xpulse/event --registry=https://npm.xpulse.one

Quickstart

import event from '@xpulse/event';
// Listen
event.on('app:ready', (data) => {
console.log('App ready:', data.env);
});
// Emit
event.emit('app:ready', { env: 'production' });

Listening

// Listen permanently
event.on('page:ready', (data) => {
console.log(data.lang);
});
// Listen once – handler is automatically removed after first call
event.once('project:ready', (data) => {
console.log('Project loaded:', data.name);
});
// Stop listening
const handler = (data) => { ... };
event.on('page:ready', handler);
event.off('page:ready', handler);

Emitting

event.emit('page:ready', { lang: 'en', route: '/privacy/' });

Payload is optional – an event can be emitted without data:

event.emit('app:stopping');

Registration (optional)

Events can optionally be registered for documentation purposes – this is not required before calling emit().

event.register('page:ready', {
description: 'Page rendered, i18n can take over',
emittedBy: '@xpulse/project',
payload: '{ lang: string, route: string }',
});

Emitting an unregistered event works fine – it just won't appear in event.list().

Introspection

// Show all registered events
event.list();
// β†’ [
// { name: 'page:ready', description: '...', emittedBy: '...', listeners: 2 },
// { name: 'app:ready', description: '...', emittedBy: '...', listeners: 1 },
// ]
// Active listeners for an event
event.listeners('page:ready');
// β†’ [ [Function: handler1], [Function: handler2] ]
// Listener count
event.listenerCount('page:ready');
// β†’ 2
en/guide.md 2026-03-13