Github issue / Community forum post (link here to close automatically): https://community.n8n.io/t/langchain-memory-chat/23733 --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Val <68596159+valya@users.noreply.github.com> Co-authored-by: Alex Grozav <alex@grozav.com> Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in> Co-authored-by: Deborah <deborah@starfallprojects.co.uk> Co-authored-by: Jesper Bylund <mail@jesperbylund.com> Co-authored-by: Jon <jonathan.bennetts@gmail.com> Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com> Co-authored-by: Giulio Andreini <andreini@netseven.it> Co-authored-by: Mason Geloso <Mason.geloso@gmail.com> Co-authored-by: Mason Geloso <hone@Masons-Mac-mini.local> Co-authored-by: Mutasem Aldmour <mutasem@n8n.io>
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
export type CallbackFn = Function;
|
|
export type UnregisterFn = () => void;
|
|
|
|
export interface EventBus {
|
|
on: (eventName: string, fn: CallbackFn) => UnregisterFn;
|
|
off: (eventName: string, fn: CallbackFn) => void;
|
|
emit: <T = Event>(eventName: string, event?: T) => void;
|
|
}
|
|
|
|
export function createEventBus(): EventBus {
|
|
const handlers = new Map<string, CallbackFn[]>();
|
|
|
|
function off(eventName: string, fn: CallbackFn) {
|
|
const eventFns = handlers.get(eventName);
|
|
|
|
if (eventFns) {
|
|
eventFns.splice(eventFns.indexOf(fn) >>> 0, 1);
|
|
}
|
|
}
|
|
|
|
function on(eventName: string, fn: CallbackFn): UnregisterFn {
|
|
let eventFns = handlers.get(eventName);
|
|
|
|
if (!eventFns) {
|
|
eventFns = [fn];
|
|
} else {
|
|
eventFns.push(fn);
|
|
}
|
|
|
|
handlers.set(eventName, eventFns);
|
|
|
|
return () => off(eventName, fn);
|
|
}
|
|
|
|
function emit<T = Event>(eventName: string, event?: T) {
|
|
const eventFns = handlers.get(eventName);
|
|
|
|
if (eventFns) {
|
|
eventFns.slice().forEach(async (handler) => {
|
|
await handler(event);
|
|
});
|
|
}
|
|
}
|
|
|
|
return {
|
|
on,
|
|
off,
|
|
emit,
|
|
};
|
|
}
|