UNPKG

@data-client/core

Version:

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

60 lines 8.21 kB
import _extends from "@babel/runtime/helpers/esm/extends"; 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 _extends({}, 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBpcmVSZWR1Y2VyIiwiZmV0Y2hSZWR1Y2VyIiwiaW52YWxpZGF0ZVJlZHVjZXIiLCJzZXRSZWR1Y2VyIiwic2V0UmVzcG9uc2VSZWR1Y2VyIiwiU0VUIiwiSU5WQUxJREFURSIsIlJFU0VUIiwiRkVUQ0giLCJHQyIsIk9QVElNSVNUSUMiLCJJTlZBTElEQVRFQUxMIiwiRVhQSVJFQUxMIiwiU0VUX1JFU1BPTlNFIiwiY3JlYXRlUmVkdWNlciIsImNvbnRyb2xsZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJpbml0aWFsU3RhdGUiLCJ0eXBlIiwiZW50aXRpZXMiLCJmb3JFYWNoIiwia2V5IiwicGsiLCJfZW50aXRpZXMka2V5IiwiX2VudGl0eU1ldGEka2V5IiwiZW50aXR5TWV0YSIsImVuZHBvaW50cyIsImZldGNoS2V5IiwibWV0YSIsIl9leHRlbmRzIiwibGFzdFJlc2V0IiwiZGF0ZSIsImluZGV4ZXMiLCJvcHRpbWlzdGljIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHBpcmVSZWR1Y2VyIH0gZnJvbSAnLi9leHBpcmVSZWR1Y2VyLmpzJztcbmltcG9ydCB7IGZldGNoUmVkdWNlciB9IGZyb20gJy4vZmV0Y2hSZWR1Y2VyLmpzJztcbmltcG9ydCB7IGludmFsaWRhdGVSZWR1Y2VyIH0gZnJvbSAnLi9pbnZhbGlkYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgeyBzZXRSZWR1Y2VyIH0gZnJvbSAnLi9zZXRSZWR1Y2VyLmpzJztcbmltcG9ydCB7IHNldFJlc3BvbnNlUmVkdWNlciB9IGZyb20gJy4vc2V0UmVzcG9uc2VSZWR1Y2VyLmpzJztcbmltcG9ydCB7XG4gIFNFVCxcbiAgSU5WQUxJREFURSxcbiAgUkVTRVQsXG4gIEZFVENILFxuICBHQyxcbiAgT1BUSU1JU1RJQyxcbiAgSU5WQUxJREFURUFMTCxcbiAgRVhQSVJFQUxMLFxuICBTRVRfUkVTUE9OU0UsXG59IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIENvbnRyb2xsZXIgZnJvbSAnLi4vLi4vY29udHJvbGxlci9Db250cm9sbGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uVHlwZXMsIFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpOiBSZWR1Y2VyVHlwZSB7XG4gIHJldHVybiBmdW5jdGlvbiByZWR1Y2VyKFxuICAgIHN0YXRlOiBTdGF0ZTx1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICBhY3Rpb246IEFjdGlvblR5cGVzLFxuICApOiBTdGF0ZTx1bmtub3duPiB7XG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBHQzpcbiAgICAgICAgLy8gaW5saW5lIGRlbGV0ZXMgYXJlIGZpbmUgYXMgdGhlc2Ugc2hvdWxkIGhhdmUgMCByZWZjb3VudHNcbiAgICAgICAgYWN0aW9uLmVudGl0aWVzLmZvckVhY2goKHsga2V5LCBwayB9KSA9PiB7XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLmVudGl0aWVzW2tleV0/Lltwa107XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLmVudGl0eU1ldGFba2V5XT8uW3BrXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbi5lbmRwb2ludHMuZm9yRWFjaChmZXRjaEtleSA9PiB7XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLmVuZHBvaW50c1tmZXRjaEtleV07XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLm1ldGFbZmV0Y2hLZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgY2FzZSBGRVRDSDpcbiAgICAgICAgcmV0dXJuIGZldGNoUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgY2FzZSBPUFRJTUlTVElDOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlIFNFVF9SRVNQT05TRTpcbiAgICAgICAgcmV0dXJuIHNldFJlc3BvbnNlUmVkdWNlcihzdGF0ZSwgYWN0aW9uLCBjb250cm9sbGVyKTtcblxuICAgICAgY2FzZSBTRVQ6XG4gICAgICAgIHJldHVybiBzZXRSZWR1Y2VyKHN0YXRlLCBhY3Rpb24sIGNvbnRyb2xsZXIpO1xuXG4gICAgICBjYXNlIElOVkFMSURBVEVBTEw6XG4gICAgICBjYXNlIElOVkFMSURBVEU6XG4gICAgICAgIHJldHVybiBpbnZhbGlkYXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgY2FzZSBFWFBJUkVBTEw6XG4gICAgICAgIHJldHVybiBleHBpcmVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICBjYXNlIFJFU0VUOlxuICAgICAgICByZXR1cm4geyAuLi5pbml0aWFsU3RhdGUsIGxhc3RSZXNldDogYWN0aW9uLmRhdGUgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQSByZWR1Y2VyIG11c3QgYWx3YXlzIHJldHVybiBhIHZhbGlkIHN0YXRlLlxuICAgICAgICAvLyBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdGhyb3cgYW4gZXJyb3IgaWYgYW4gaW52YWxpZCBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfSBhcyBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsU3RhdGU6IFN0YXRlPHVua25vd24+ID0ge1xuICBlbnRpdGllczoge30sXG4gIGVuZHBvaW50czoge30sXG4gIGluZGV4ZXM6IHt9LFxuICBtZXRhOiB7fSxcbiAgZW50aXR5TWV0YToge30sXG4gIG9wdGltaXN0aWM6IFtdLFxuICBsYXN0UmVzZXQ6IDAsXG59O1xuXG50eXBlIFJlZHVjZXJUeXBlID0gKFxuICBzdGF0ZTogU3RhdGU8dW5rbm93bj4gfCB1bmRlZmluZWQsXG4gIGFjdGlvbjogQWN0aW9uVHlwZXMsXG4pID0+IFN0YXRlPHVua25vd24+O1xuXG50eXBlIFdyaXRhYmxlPFQ+ID0geyBbUCBpbiBrZXlvZiBUXTogTm9uTnVsbGFibGU8V3JpdGFibGU8VFtQXT4+IH07XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxhQUFhLFFBQVEsb0JBQW9CO0FBQ2xELFNBQVNDLFlBQVksUUFBUSxtQkFBbUI7QUFDaEQsU0FBU0MsaUJBQWlCLFFBQVEsd0JBQXdCO0FBQzFELFNBQVNDLFVBQVUsUUFBUSxpQkFBaUI7QUFDNUMsU0FBU0Msa0JBQWtCLFFBQVEseUJBQXlCO0FBQzVELFNBQ0VDLEdBQUcsRUFDSEMsVUFBVSxFQUNWQyxLQUFLLEVBQ0xDLEtBQUssRUFDTEMsRUFBRSxFQUNGQyxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsU0FBUyxFQUNUQyxZQUFZLFFBQ1Asc0JBQXNCO0FBSTdCLGVBQWUsU0FBU0MsYUFBYUEsQ0FBQ0MsVUFBc0IsRUFBZTtFQUN6RSxPQUFPLFNBQVNDLE9BQU9BLENBQ3JCQyxLQUFpQyxFQUNqQ0MsTUFBbUIsRUFDSDtJQUNoQixJQUFJLENBQUNELEtBQUssRUFBRUEsS0FBSyxHQUFHRSxZQUFZO0lBQ2hDLFFBQVFELE1BQU0sQ0FBQ0UsSUFBSTtNQUNqQixLQUFLWCxFQUFFO1FBQ0w7UUFDQVMsTUFBTSxDQUFDRyxRQUFRLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1VBQUVDLEdBQUc7VUFBRUM7UUFBRyxDQUFDLEtBQUs7VUFBQSxJQUFBQyxhQUFBLEVBQUFDLGVBQUE7VUFDdkMsQ0FBQUQsYUFBQSxHQUFRUixLQUFLLENBQVNJLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLGFBQW5DLE9BQU9FLGFBQUEsQ0FBK0JELEVBQUUsQ0FBQztVQUN6QyxDQUFBRSxlQUFBLEdBQVFULEtBQUssQ0FBU1UsVUFBVSxDQUFDSixHQUFHLENBQUMsYUFBckMsT0FBT0csZUFBQSxDQUFpQ0YsRUFBRSxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUNGTixNQUFNLENBQUNVLFNBQVMsQ0FBQ04sT0FBTyxDQUFDTyxRQUFRLElBQUk7VUFDbkMsT0FBUVosS0FBSyxDQUFTVyxTQUFTLENBQUNDLFFBQVEsQ0FBQztVQUN6QyxPQUFRWixLQUFLLENBQVNhLElBQUksQ0FBQ0QsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUNGLE9BQU9aLEtBQUs7TUFDZCxLQUFLVCxLQUFLO1FBQ1IsT0FBT1AsWUFBWSxDQUFDZ0IsS0FBSyxFQUFFQyxNQUFNLENBQUM7TUFFcEMsS0FBS1IsVUFBVTtNQUNmO01BQ0EsS0FBS0csWUFBWTtRQUNmLE9BQU9ULGtCQUFrQixDQUFDYSxLQUFLLEVBQUVDLE1BQU0sRUFBRUgsVUFBVSxDQUFDO01BRXRELEtBQUtWLEdBQUc7UUFDTixPQUFPRixVQUFVLENBQUNjLEtBQUssRUFBRUMsTUFBTSxFQUFFSCxVQUFVLENBQUM7TUFFOUMsS0FBS0osYUFBYTtNQUNsQixLQUFLTCxVQUFVO1FBQ2IsT0FBT0osaUJBQWlCLENBQUNlLEtBQUssRUFBRUMsTUFBTSxDQUFDO01BRXpDLEtBQUtOLFNBQVM7UUFDWixPQUFPWixhQUFhLENBQUNpQixLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUVyQyxLQUFLWCxLQUFLO1FBQ1IsT0FBQXdCLFFBQUEsS0FBWVosWUFBWTtVQUFFYSxTQUFTLEVBQUVkLE1BQU0sQ0FBQ2U7UUFBSTtNQUVsRDtRQUNFO1FBQ0E7UUFDQSxPQUFPaEIsS0FBSztJQUNoQjtFQUNGLENBQUM7QUFDSDtBQUVBLE9BQU8sTUFBTUUsWUFBNEIsR0FBRztFQUMxQ0UsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNaTyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0VBQ2JNLE9BQU8sRUFBRSxDQUFDLENBQUM7RUFDWEosSUFBSSxFQUFFLENBQUMsQ0FBQztFQUNSSCxVQUFVLEVBQUUsQ0FBQyxDQUFDO0VBQ2RRLFVBQVUsRUFBRSxFQUFFO0VBQ2RILFNBQVMsRUFBRTtBQUNiLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=