From 216332fb20fd511a76d90340c009ea0361e1587d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:12:15 +0530 Subject: [PATCH] feat(session): add subscribe method, getAllBlocks --- src/lib/session.ts | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/lib/session.ts b/src/lib/session.ts index e5a9bc1..e675821 100644 --- a/src/lib/session.ts +++ b/src/lib/session.ts @@ -67,15 +67,32 @@ class SessionManager { } } - addListener(event: string, listener: (data: any) => void) { - this.emitter.addListener(event, listener); + getAllBlocks() { + return Array.from(this.blocks.values()); } - replay() { - for (const { event, data } of this.events) { - /* Using emitter directly to avoid infinite loop */ - this.emitter.emit(event, data); + subscribe(listener: (event: string, data: any) => void): () => void { + const currentEventsLength = this.events.length; + + const handler = (event: string) => (data: any) => listener(event, data); + const dataHandler = handler('data'); + const endHandler = handler('end'); + const errorHandler = handler('error'); + + this.emitter.on('data', dataHandler); + this.emitter.on('end', endHandler); + this.emitter.on('error', errorHandler); + + for (let i = 0; i < currentEventsLength; i++) { + const { event, data } = this.events[i]; + listener(event, data); } + + return () => { + this.emitter.off('data', dataHandler); + this.emitter.off('end', endHandler); + this.emitter.off('error', errorHandler); + }; } }