UNPKG

@voilajsx/appkit

Version:

Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development

122 lines 4.21 kB
/** * Memory event strategy with Node.js EventEmitter and cleanup management * @module @voilajsx/appkit/event * @file src/event/strategies/memory.ts * * @llm-rule WHEN: No REDIS_URL environment variable - perfect for development and single-server apps * @llm-rule AVOID: Production use across multiple servers - events don't work across processes * @llm-rule NOTE: Fast local events, automatic cleanup, memory limits, great for development */ import type { EventStrategy, EventHandler } from '../event.js'; import type { EventConfig } from '../defaults.js'; /** * Memory event strategy with intelligent cleanup and limits */ export declare class MemoryStrategy implements EventStrategy { private config; private namespace; private emitter; private cleanupInterval; private listenerCounts; /** * Creates memory strategy with direct environment access (like auth pattern) * @llm-rule WHEN: Event initialization without Redis URL - automatic fallback * @llm-rule AVOID: Manual memory configuration - environment detection handles this */ constructor(config: EventConfig, namespace: string); /** * Emits event via Node.js EventEmitter * @llm-rule WHEN: Sending events within single process/server * @llm-rule AVOID: Expecting cross-process delivery - memory events are local only * @llm-rule NOTE: Instant delivery, no network latency, perfect for development */ emit(event: string, data: any): Promise<boolean>; /** * Adds event listener with automatic cleanup tracking * @llm-rule WHEN: Listening to events within single process * @llm-rule AVOID: Adding too many listeners - respects maxListeners limit */ on(event: string, handler: EventHandler): void; /** * Adds one-time event listener with automatic cleanup * @llm-rule WHEN: Listening to events that should only fire once * @llm-rule AVOID: Manual cleanup - this handles removal automatically */ once(event: string, handler: EventHandler): void; /** * Removes event listener(s) with cleanup tracking * @llm-rule WHEN: Cleaning up event listeners to prevent memory leaks * @llm-rule AVOID: Forgetting to remove listeners - memory strategy tracks everything */ off(event: string, handler?: EventHandler): void; /** * Gets current event listeners for debugging * @llm-rule WHEN: Debugging event listeners or monitoring memory usage * @llm-rule AVOID: Using for business logic - this is for debugging only */ getListeners(event?: string): any; /** * Disconnects memory strategy gracefully * @llm-rule WHEN: App shutdown or event cleanup * @llm-rule AVOID: Memory leaks - always cleanup intervals and listeners */ disconnect(): Promise<void>; /** * Checks if adding listener would exceed limit */ private checkListenerLimit; /** * Increments listener count tracking */ private incrementListenerCount; /** * Decrements listener count tracking */ private decrementListenerCount; /** * Updates listener count from actual emitter state */ private updateListenerCount; /** * Sets up automatic cleanup interval */ private setupCleanup; /** * Stops cleanup interval */ private stopCleanup; /** * Performs memory cleanup and garbage collection */ private performCleanup; /** * Syncs tracking counts with actual emitter state */ private syncListenerCounts; /** * Cleans up events with no listeners */ private cleanupEmptyEvents; /** * Gets memory usage statistics */ private getMemoryStats; /** * Gets detailed memory statistics for debugging */ getDetailedStats(): { strategy: string; namespace: string; totalEvents: number; totalListeners: number; maxListeners: number; memoryUsage: string; events: Array<{ event: string; listeners: number; }>; cleanupEnabled: boolean; lastCleanup: string; }; } //# sourceMappingURL=memory.d.ts.map