UNPKG

@data-client/core

Version:

Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch

60 lines 8.13 kB
import { expireReducer } from './expireReducer.js'; import { fetchReducer } from './fetchReducer.js'; import { invalidateReducer } from './invalidateReducer.js'; import { setReducer } from './setReducer.js'; import { setResponseReducer } from './setResponseReducer.js'; import { SET, INVALIDATE, RESET, FETCH, GC, OPTIMISTIC, INVALIDATEALL, EXPIREALL, SET_RESPONSE } from '../../actionTypes.js'; export default function createReducer(controller) { return function reducer(state, action) { if (!state) state = initialState; switch (action.type) { case GC: // inline deletes are fine as these should have 0 refcounts action.entities.forEach(({ key, pk }) => { var _entities$key, _entityMeta$key; (_entities$key = state.entities[key]) == null || delete _entities$key[pk]; (_entityMeta$key = state.entityMeta[key]) == null || delete _entityMeta$key[pk]; }); action.endpoints.forEach(fetchKey => { delete state.endpoints[fetchKey]; delete state.meta[fetchKey]; }); return state; case FETCH: return fetchReducer(state, action); case OPTIMISTIC: // eslint-disable-next-line no-fallthrough case SET_RESPONSE: return setResponseReducer(state, action, controller); case SET: return setReducer(state, action, controller); case INVALIDATEALL: case INVALIDATE: return invalidateReducer(state, action); case EXPIREALL: return expireReducer(state, action); case RESET: return { ...initialState, lastReset: action.date }; default: // A reducer must always return a valid state. // Alternatively you can throw an error if an invalid action is dispatched. return state; } }; } export const initialState = { entities: {}, endpoints: {}, indexes: {}, meta: {}, entityMeta: {}, optimistic: [], lastReset: 0 }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBpcmVSZWR1Y2VyIiwiZmV0Y2hSZWR1Y2VyIiwiaW52YWxpZGF0ZVJlZHVjZXIiLCJzZXRSZWR1Y2VyIiwic2V0UmVzcG9uc2VSZWR1Y2VyIiwiU0VUIiwiSU5WQUxJREFURSIsIlJFU0VUIiwiRkVUQ0giLCJHQyIsIk9QVElNSVNUSUMiLCJJTlZBTElEQVRFQUxMIiwiRVhQSVJFQUxMIiwiU0VUX1JFU1BPTlNFIiwiY3JlYXRlUmVkdWNlciIsImNvbnRyb2xsZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJpbml0aWFsU3RhdGUiLCJ0eXBlIiwiZW50aXRpZXMiLCJmb3JFYWNoIiwia2V5IiwicGsiLCJfZW50aXRpZXMka2V5IiwiX2VudGl0eU1ldGEka2V5IiwiZW50aXR5TWV0YSIsImVuZHBvaW50cyIsImZldGNoS2V5IiwibWV0YSIsImxhc3RSZXNldCIsImRhdGUiLCJpbmRleGVzIiwib3B0aW1pc3RpYyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9yZWR1Y2VyL2NyZWF0ZVJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwaXJlUmVkdWNlciB9IGZyb20gJy4vZXhwaXJlUmVkdWNlci5qcyc7XG5pbXBvcnQgeyBmZXRjaFJlZHVjZXIgfSBmcm9tICcuL2ZldGNoUmVkdWNlci5qcyc7XG5pbXBvcnQgeyBpbnZhbGlkYXRlUmVkdWNlciB9IGZyb20gJy4vaW52YWxpZGF0ZVJlZHVjZXIuanMnO1xuaW1wb3J0IHsgc2V0UmVkdWNlciB9IGZyb20gJy4vc2V0UmVkdWNlci5qcyc7XG5pbXBvcnQgeyBzZXRSZXNwb25zZVJlZHVjZXIgfSBmcm9tICcuL3NldFJlc3BvbnNlUmVkdWNlci5qcyc7XG5pbXBvcnQge1xuICBTRVQsXG4gIElOVkFMSURBVEUsXG4gIFJFU0VULFxuICBGRVRDSCxcbiAgR0MsXG4gIE9QVElNSVNUSUMsXG4gIElOVkFMSURBVEVBTEwsXG4gIEVYUElSRUFMTCxcbiAgU0VUX1JFU1BPTlNFLFxufSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblR5cGVzLCBTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihjb250cm9sbGVyOiBDb250cm9sbGVyKTogUmVkdWNlclR5cGUge1xuICByZXR1cm4gZnVuY3Rpb24gcmVkdWNlcihcbiAgICBzdGF0ZTogU3RhdGU8dW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgYWN0aW9uOiBBY3Rpb25UeXBlcyxcbiAgKTogU3RhdGU8dW5rbm93bj4ge1xuICAgIGlmICghc3RhdGUpIHN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgR0M6XG4gICAgICAgIC8vIGlubGluZSBkZWxldGVzIGFyZSBmaW5lIGFzIHRoZXNlIHNob3VsZCBoYXZlIDAgcmVmY291bnRzXG4gICAgICAgIGFjdGlvbi5lbnRpdGllcy5mb3JFYWNoKCh7IGtleSwgcGsgfSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5lbnRpdGllc1trZXldPy5bcGtdO1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5lbnRpdHlNZXRhW2tleV0/Lltwa107XG4gICAgICAgIH0pO1xuICAgICAgICBhY3Rpb24uZW5kcG9pbnRzLmZvckVhY2goZmV0Y2hLZXkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5lbmRwb2ludHNbZmV0Y2hLZXldO1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5tZXRhW2ZldGNoS2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIGNhc2UgRkVUQ0g6XG4gICAgICAgIHJldHVybiBmZXRjaFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG5cbiAgICAgIGNhc2UgT1BUSU1JU1RJQzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSBTRVRfUkVTUE9OU0U6XG4gICAgICAgIHJldHVybiBzZXRSZXNwb25zZVJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgY29udHJvbGxlcik7XG5cbiAgICAgIGNhc2UgU0VUOlxuICAgICAgICByZXR1cm4gc2V0UmVkdWNlcihzdGF0ZSwgYWN0aW9uLCBjb250cm9sbGVyKTtcblxuICAgICAgY2FzZSBJTlZBTElEQVRFQUxMOlxuICAgICAgY2FzZSBJTlZBTElEQVRFOlxuICAgICAgICByZXR1cm4gaW52YWxpZGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG5cbiAgICAgIGNhc2UgRVhQSVJFQUxMOlxuICAgICAgICByZXR1cm4gZXhwaXJlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgY2FzZSBSRVNFVDpcbiAgICAgICAgcmV0dXJuIHsgLi4uaW5pdGlhbFN0YXRlLCBsYXN0UmVzZXQ6IGFjdGlvbi5kYXRlIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEEgcmVkdWNlciBtdXN0IGFsd2F5cyByZXR1cm4gYSB2YWxpZCBzdGF0ZS5cbiAgICAgICAgLy8gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHRocm93IGFuIGVycm9yIGlmIGFuIGludmFsaWQgYWN0aW9uIGlzIGRpc3BhdGNoZWQuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH0gYXMgYW55O1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZTx1bmtub3duPiA9IHtcbiAgZW50aXRpZXM6IHt9LFxuICBlbmRwb2ludHM6IHt9LFxuICBpbmRleGVzOiB7fSxcbiAgbWV0YToge30sXG4gIGVudGl0eU1ldGE6IHt9LFxuICBvcHRpbWlzdGljOiBbXSxcbiAgbGFzdFJlc2V0OiAwLFxufTtcblxudHlwZSBSZWR1Y2VyVHlwZSA9IChcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+IHwgdW5kZWZpbmVkLFxuICBhY3Rpb246IEFjdGlvblR5cGVzLFxuKSA9PiBTdGF0ZTx1bmtub3duPjtcblxudHlwZSBXcml0YWJsZTxUPiA9IHsgW1AgaW4ga2V5b2YgVF06IE5vbk51bGxhYmxlPFdyaXRhYmxlPFRbUF0+PiB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQVEsb0JBQW9CO0FBQ2xELFNBQVNDLFlBQVksUUFBUSxtQkFBbUI7QUFDaEQsU0FBU0MsaUJBQWlCLFFBQVEsd0JBQXdCO0FBQzFELFNBQVNDLFVBQVUsUUFBUSxpQkFBaUI7QUFDNUMsU0FBU0Msa0JBQWtCLFFBQVEseUJBQXlCO0FBQzVELFNBQ0VDLEdBQUcsRUFDSEMsVUFBVSxFQUNWQyxLQUFLLEVBQ0xDLEtBQUssRUFDTEMsRUFBRSxFQUNGQyxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxZQUFZLFFBQ1Asc0JBQXNCO0FBSTdCLGVBQWUsU0FBU0MsYUFBYUEsQ0FBQ0MsVUFBc0IsRUFBZTtFQUN6RSxPQUFPLFNBQVNDLE9BQU9BLENBQ3JCQyxLQUFpQyxFQUNqQ0MsTUFBbUIsRUFDSDtJQUNoQixJQUFJLENBQUNELEtBQUssRUFBRUEsS0FBSyxHQUFHRSxZQUFZO0lBQ2hDLFFBQVFELE1BQU0sQ0FBQ0UsSUFBSTtNQUNqQixLQUFLWCxFQUFFO1FBQ0w7UUFDQVMsTUFBTSxDQUFDRyxRQUFRLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1VBQUVDLEdBQUc7VUFBRUM7UUFBRyxDQUFDLEtBQUs7VUFBQSxJQUFBQyxhQUFBLEVBQUFDLGVBQUE7VUFDdkMsQ0FBQUQsYUFBQSxHQUFRUixLQUFLLENBQVNJLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLGFBQW5DLE9BQU9FLGFBQUEsQ0FBK0JELEVBQUUsQ0FBQztVQUN6QyxDQUFBRSxlQUFBLEdBQVFULEtBQUssQ0FBU1UsVUFBVSxDQUFDSixHQUFHLENBQUMsYUFBckMsT0FBT0csZUFBQSxDQUFpQ0YsRUFBRSxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUNGTixNQUFNLENBQUNVLFNBQVMsQ0FBQ04sT0FBTyxDQUFDTyxRQUFRLElBQUk7VUFDbkMsT0FBUVosS0FBSyxDQUFTVyxTQUFTLENBQUNDLFFBQVEsQ0FBQztVQUN6QyxPQUFRWixLQUFLLENBQVNhLElBQUksQ0FBQ0QsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUNGLE9BQU9aLEtBQUs7TUFDZCxLQUFLVCxLQUFLO1FBQ1IsT0FBT1AsWUFBWSxDQUFDZ0IsS0FBSyxFQUFFQyxNQUFNLENBQUM7TUFFcEMsS0FBS1IsVUFBVTtNQUNmO01BQ0EsS0FBS0csWUFBWTtRQUNmLE9BQU9ULGtCQUFrQixDQUFDYSxLQUFLLEVBQUVDLE1BQU0sRUFBRUgsVUFBVSxDQUFDO01BRXRELEtBQUtWLEdBQUc7UUFDTixPQUFPRixVQUFVLENBQUNjLEtBQUssRUFBRUMsTUFBTSxFQUFFSCxVQUFVLENBQUM7TUFFOUMsS0FBS0osYUFBYTtNQUNsQixLQUFLTCxVQUFVO1FBQ2IsT0FBT0osaUJBQWlCLENBQUNlLEtBQUssRUFBRUMsTUFBTSxDQUFDO01BRXpDLEtBQUtOLFNBQVM7UUFDWixPQUFPWixhQUFhLENBQUNpQixLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUVyQyxLQUFLWCxLQUFLO1FBQ1IsT0FBTztVQUFFLEdBQUdZLFlBQVk7VUFBRVksU0FBUyxFQUFFYixNQUFNLENBQUNjO1FBQUssQ0FBQztNQUVwRDtRQUNFO1FBQ0E7UUFDQSxPQUFPZixLQUFLO0lBQ2hCO0VBQ0YsQ0FBQztBQUNIO0FBRUEsT0FBTyxNQUFNRSxZQUE0QixHQUFHO0VBQzFDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0VBQ1pPLFNBQVMsRUFBRSxDQUFDLENBQUM7RUFDYkssT0FBTyxFQUFFLENBQUMsQ0FBQztFQUNYSCxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ1JILFVBQVUsRUFBRSxDQUFDLENBQUM7RUFDZE8sVUFBVSxFQUFFLEVBQUU7RUFDZEgsU0FBUyxFQUFFO0FBQ2IsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==