UNPKG

synapse-storage

Version:

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

37 lines (30 loc) 1.58 kB
import { VALUE_NOT_CHANGED } from "../utils/middleware-module.js"; import { shallowEqual } from "../utils/state-diff.util.js"; const shallowCompareMiddleware = (options = {})=>{ const { comparator = shallowEqual, segments = [] } = options; // Кэш последних значений const valueCache = new Map(); return { name: 'shallow-compare', setup: (api)=>{}, reducer: (api)=>(next)=>async (action)=>{ // Пропускаем действия кроме set if (action.type !== 'set' || segments.length && !segments.includes(action.metadata?.segment ?? 'default')) { return next(action); } const cacheKey = action.key; const prevValue = valueCache.get(cacheKey); const nextValue = action.value; // Если значения равны, возвращаем sentinel — не модифицируем значение if (prevValue !== undefined && comparator(prevValue, nextValue)) { return VALUE_NOT_CHANGED; } // Иначе обновляем кэш и продолжаем const result = await next(action); valueCache.set(cacheKey, result !== undefined ? result : nextValue); return result; } }; }; export { shallowCompareMiddleware }; //# sourceMappingURL=storage-shallow-compare.middleware.js.map