UNPKG

asciitorium

Version:
37 lines (36 loc) 1.11 kB
class RenderScheduler { constructor() { this.renderCallback = null; this.renderPending = false; } static getInstance() { if (!RenderScheduler.instance) { RenderScheduler.instance = new RenderScheduler(); } return RenderScheduler.instance; } setRenderCallback(cb) { this.renderCallback = cb; } requestRender() { // If a render is already queued, don't queue another if (this.renderPending) return; this.renderPending = true; // Queue render as a microtask to batch multiple render requests // This ensures all synchronous state updates complete before rendering queueMicrotask(() => this.executeRender()); } executeRender() { this.renderPending = false; this.renderCallback?.(); } } // Export convenience functions that use the singleton const scheduler = RenderScheduler.getInstance(); export function setRenderCallback(cb) { scheduler.setRenderCallback(cb); } export function requestRender() { scheduler.requestRender(); }