@data-client/core
Version:
Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch
60 lines • 8.21 kB
JavaScript
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=