Skip to main content

createObservable()

createObservable<T>(): object

Creates an observable (pub/sub emitter). Replaces the GoF Subject class - no interface, no attach/detach ceremony, just subscribe and get back an unsubscribe function.


Type Parameters​

T: T​

The type of values emitted to listeners


Returns​

Observable with subscribe, notify, once, safeNotify, size, clear

subscribe(): (listener) => Unsubscribe​

Add a listener. Returns an unsubscribe function.

listener: Listener<T>
Returns: Unsubscribe

notify(): (value) => void​

Emit a value to all listeners. Fail-fast: if a listener throws, the error propagates and subsequent listeners are not called. Use safeNotify for resilient notification.

value: T
Returns: void

once(): (listener) => Unsubscribe​

Subscribe for a single notification, then auto-unsubscribe. The listener is wrapped internally - always use the returned Unsubscribe function to cancel before it fires.

listener: Listener<T>
Returns: Unsubscribe

safeNotify(): (value) => Result<void, Error[]>​

Emit a value to all listeners with error safety. Unlike notify, this catches listener errors and continues notifying remaining listeners. Returns a zygos Result:

  • Ok(void) if all listeners succeeded
  • Err(Error[]) with collected errors from failing listeners

value: T
Returns: Result<void, Error[]>

Since​

2.4.0

size​

Get Signature​

Current number of listeners.

Returns: number​

clear(): () => void​

Remove all listeners.

Returns: void​


Since​

2.4.0


Example​

const onUserLogin = createObservable<{ id: string; name: string }>();

// Subscribe - returns an unsubscribe function
const unsub = onUserLogin.subscribe((user) => {
console.log(`${user.name} logged in`);
});

// One-time listener
onUserLogin.once((user) => {
sendWelcomeEmail(user);
});

onUserLogin.notify({ id: "1", name: "Alice" });
unsub();

Listener()<T>​

Type

Listener<T> = (value) => void

A listener callback that reacts to emitted values.


Type Parameters​

T: T​


Parameters​

value: T​


Returns​

void

Unsubscribe()​

Type

Unsubscribe = () => void

A function that removes a listener when called.


Returns: void​


Since​

2.5.0