UNPKG

@assistant-ui/react

Version:

TypeScript/React library for AI Chat

98 lines 2.93 kB
let cachedHook; const getHook = () => { if (cachedHook) { return cachedHook; } const createHook = () => ({ apis: new Map(), nextId: 0, listeners: new Set(), }); if (typeof window === "undefined") { cachedHook = createHook(); return cachedHook; } const existingHook = window.__ASSISTANT_UI_DEVTOOLS_HOOK__; if (existingHook) { cachedHook = existingHook; return existingHook; } const newHook = createHook(); window.__ASSISTANT_UI_DEVTOOLS_HOOK__ = newHook; cachedHook = newHook; return newHook; }; export class DevToolsHooks { static subscribe(listener) { const hook = getHook(); hook.listeners.add(listener); return () => { hook.listeners.delete(listener); }; } static clearEventLogs(apiId) { const hook = getHook(); const entry = hook.apis.get(apiId); if (!entry) return; entry.logs = []; DevToolsHooks.notifyListeners(apiId); } static getApis() { return getHook().apis; } static notifyListeners(apiId) { const hook = getHook(); hook.listeners.forEach((listener) => listener(apiId)); } } export class DevToolsProviderApi { static MAX_EVENT_LOGS_PER_API = 200; static register(api) { const hook = getHook(); for (const entry of hook.apis.values()) { if (entry.api === api) { return () => { }; } } const apiId = hook.nextId++; const entry = { api, logs: [], }; const eventUnsubscribe = api.on?.("*", (e) => { const entry = hook.apis.get(apiId); if (!entry) return; entry.logs.push({ time: new Date(), event: e.event, data: e.payload, }); if (entry.logs.length > DevToolsProviderApi.MAX_EVENT_LOGS_PER_API) { entry.logs = entry.logs.slice(-DevToolsProviderApi.MAX_EVENT_LOGS_PER_API); } DevToolsProviderApi.notifyListeners(apiId); }); const stateUnsubscribe = api.subscribe?.(() => { DevToolsProviderApi.notifyListeners(apiId); }); hook.apis.set(apiId, entry); DevToolsProviderApi.notifyListeners(apiId); return () => { const hook = getHook(); const entry = hook.apis.get(apiId); if (!entry) return; eventUnsubscribe?.(); stateUnsubscribe?.(); hook.apis.delete(apiId); DevToolsProviderApi.notifyListeners(apiId); }; } static notifyListeners(apiId) { const hook = getHook(); hook.listeners.forEach((listener) => listener(apiId)); } } //# sourceMappingURL=DevToolsHooks.js.map