withSubscribe
withSubscribe<
T
,E
>(target
:T
&Partial
<{subscribe
:SubscribeFunc
<E
>; }>):T
& {subscribe
:SubscribeFunc
<E
>; }
Defined in: extras/with-subscribe.ts:30
Enhances a StateMachine with a subscribe method for event notifications. Powered by emitter, this function allows external code to subscribe to events emitted by the state machine.
Use cases:
- Adding pub/sub capability to state machines
- Allowing external listeners to react to state changes or events
- Useful for event-driven architectures and reactive programming
Type Parameters
Section titled “Type Parameters”Type Parameter | Description |
---|---|
T extends Pick <StateMachine <any >, "notify" > | The StateMachine type with a notify method |
E extends any | The event type handled by notify |
Parameters
Section titled “Parameters”Parameter | Type | Description |
---|---|---|
target | T & Partial <{ subscribe : SubscribeFunc <E >; }> | The state machine to enhance |
Returns
Section titled “Returns”T
& { subscribe
: SubscribeFunc
<E
>; }
The enhanced state machine with a subscribe method
Example
Section titled “Example”const machine = { notify: (ev: string) => undefined };const enhanced = withSubscribe(machine);enhanced.subscribe((ev: string) => console.log('Event:', ev));enhanced.notify('test'); // Logs: 'Event: test'
Source
Section titled “Source”This function is useful for scenarios where you want to allow external code to subscribe to events or changes emitted by a state machine. It wraps the notify method to emit events to subscribers, enabling reactive patterns and decoupled event handling.
export const withSubscribe = < T extends Pick<StateMachine<any>, "notify">, E extends Parameters<T["notify"]>[0],>( target: T & Partial<{ subscribe: SubscribeFunc<E> }>) => { if (!target.subscribe) { const notify = target.notify.bind(target); const [subscribe, emit] = emitter<Parameters<T["notify"]>[0]>(); target.notify = (ev) => { notify(ev); emit(ev); }; target.subscribe = subscribe; } return target as T & { subscribe: typeof target.subscribe };};
emitter for the underlying pub/sub implementation