synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
53 lines (48 loc) • 2.31 kB
JavaScript
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