| const MAX_TRANSLATION_EVENTS = 200; | |
| const DEFAULT_TRANSLATION_EVENT_LIMIT = 50; | |
| function ensureEventsBuffer() { | |
| if (!globalThis.__translatorEvents) { | |
| globalThis.__translatorEvents = []; | |
| } | |
| return globalThis.__translatorEvents; | |
| } | |
| export function logTranslationEvent(event) { | |
| if (!event || typeof event !== "object") return; | |
| const events = ensureEventsBuffer(); | |
| events.unshift({ | |
| id: `evt_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`, | |
| timestamp: new Date().toISOString(), | |
| ...event, | |
| }); | |
| if (events.length > MAX_TRANSLATION_EVENTS) { | |
| events.length = MAX_TRANSLATION_EVENTS; | |
| } | |
| } | |
| export function getTranslationEvents(limit = DEFAULT_TRANSLATION_EVENT_LIMIT) { | |
| const numericLimit = Number(limit); | |
| const boundedLimit = | |
| Number.isFinite(numericLimit) && numericLimit > 0 | |
| ? Math.min(Math.floor(numericLimit), MAX_TRANSLATION_EVENTS) | |
| : DEFAULT_TRANSLATION_EVENT_LIMIT; | |
| const events = ensureEventsBuffer(); | |
| return { | |
| events: events.slice(0, boundedLimit), | |
| total: events.length, | |
| }; | |
| } | |
| export { MAX_TRANSLATION_EVENTS }; | |