UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

53 lines (48 loc) 2.31 kB
import { loggerConsole } from "../../../_utils/index.js"; /** Логируем только пишущие действия — чтения (`get`/`keys`) не шумят. */ const WRITE_ACTIONS = new Set([ 'set', 'update', 'delete', 'clear', 'reset', 'init' ]); /** * Dev-only middleware: логирует пишущие действия storage (тип, ключ, длительность и, * опционально, prev/next состояние). Намеренно минимален — без i18n/цветов (для полноценного * dev-лога диспетчера есть `loggerDispatcherMiddleware`). Подключайте только в dev: * * ```ts * middlewares: (getDefault) => (import.meta.env.DEV ? [getDefault().logger()] : []) * ``` */ const loggerMiddleware = (options = {})=>{ const { collapsed = false, showState = true } = options; return { name: 'logger', reducer: (api)=>(next)=>async (action)=>{ if (!WRITE_ACTIONS.has(action.type)) { return next(action); } const started = Date.now(); const prevState = showState ? await api.getState() : undefined; try { const result = await next(action); const time = Date.now() - started; const group = collapsed ? loggerConsole.groupCollapsed : loggerConsole.group; group(`[synapse storage] ${action.type}${action.key != null ? ` "${String(action.key)}"` : ''} (${time}ms)`); loggerConsole.log('action:', action); if (showState) { loggerConsole.log('prev:', prevState); loggerConsole.log('next:', await api.getState()); } loggerConsole.groupEnd(); return result; } catch (error) { loggerConsole.error(`[synapse storage] ${action.type} FAILED`, error); throw error; } } }; }; export { loggerMiddleware }; //# sourceMappingURL=storage-logger.middleware.js.map