@data-client/core
Version:
Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch
60 lines • 8.23 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, _entitiesMeta$key;
(_entities$key = state.entities[key]) == null || delete _entities$key[pk];
(_entitiesMeta$key = state.entitiesMeta[key]) == null || delete _entitiesMeta$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: {},
entitiesMeta: {},
optimistic: [],
lastReset: 0
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBpcmVSZWR1Y2VyIiwiZmV0Y2hSZWR1Y2VyIiwiaW52YWxpZGF0ZVJlZHVjZXIiLCJzZXRSZWR1Y2VyIiwic2V0UmVzcG9uc2VSZWR1Y2VyIiwiU0VUIiwiSU5WQUxJREFURSIsIlJFU0VUIiwiRkVUQ0giLCJHQyIsIk9QVElNSVNUSUMiLCJJTlZBTElEQVRFQUxMIiwiRVhQSVJFQUxMIiwiU0VUX1JFU1BPTlNFIiwiY3JlYXRlUmVkdWNlciIsImNvbnRyb2xsZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJpbml0aWFsU3RhdGUiLCJ0eXBlIiwiZW50aXRpZXMiLCJmb3JFYWNoIiwia2V5IiwicGsiLCJfZW50aXRpZXMka2V5IiwiX2VudGl0aWVzTWV0YSRrZXkiLCJlbnRpdGllc01ldGEiLCJlbmRwb2ludHMiLCJmZXRjaEtleSIsIm1ldGEiLCJfZXh0ZW5kcyIsImxhc3RSZXNldCIsImRhdGUiLCJpbmRleGVzIiwib3B0aW1pc3RpYyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9yZWR1Y2VyL2NyZWF0ZVJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwaXJlUmVkdWNlciB9IGZyb20gJy4vZXhwaXJlUmVkdWNlci5qcyc7XG5pbXBvcnQgeyBmZXRjaFJlZHVjZXIgfSBmcm9tICcuL2ZldGNoUmVkdWNlci5qcyc7XG5pbXBvcnQgeyBpbnZhbGlkYXRlUmVkdWNlciB9IGZyb20gJy4vaW52YWxpZGF0ZVJlZHVjZXIuanMnO1xuaW1wb3J0IHsgc2V0UmVkdWNlciB9IGZyb20gJy4vc2V0UmVkdWNlci5qcyc7XG5pbXBvcnQgeyBzZXRSZXNwb25zZVJlZHVjZXIgfSBmcm9tICcuL3NldFJlc3BvbnNlUmVkdWNlci5qcyc7XG5pbXBvcnQge1xuICBTRVQsXG4gIElOVkFMSURBVEUsXG4gIFJFU0VULFxuICBGRVRDSCxcbiAgR0MsXG4gIE9QVElNSVNUSUMsXG4gIElOVkFMSURBVEVBTEwsXG4gIEVYUElSRUFMTCxcbiAgU0VUX1JFU1BPTlNFLFxufSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblR5cGVzLCBTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihjb250cm9sbGVyOiBDb250cm9sbGVyKTogUmVkdWNlclR5cGUge1xuICByZXR1cm4gZnVuY3Rpb24gcmVkdWNlcihcbiAgICBzdGF0ZTogU3RhdGU8dW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgYWN0aW9uOiBBY3Rpb25UeXBlcyxcbiAgKTogU3RhdGU8dW5rbm93bj4ge1xuICAgIGlmICghc3RhdGUpIHN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgR0M6XG4gICAgICAgIC8vIGlubGluZSBkZWxldGVzIGFyZSBmaW5lIGFzIHRoZXNlIHNob3VsZCBoYXZlIDAgcmVmY291bnRzXG4gICAgICAgIGFjdGlvbi5lbnRpdGllcy5mb3JFYWNoKCh7IGtleSwgcGsgfSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5lbnRpdGllc1trZXldPy5bcGtdO1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5lbnRpdGllc01ldGFba2V5XT8uW3BrXTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbi5lbmRwb2ludHMuZm9yRWFjaChmZXRjaEtleSA9PiB7XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLmVuZHBvaW50c1tmZXRjaEtleV07XG4gICAgICAgICAgZGVsZXRlIChzdGF0ZSBhcyBhbnkpLm1ldGFbZmV0Y2hLZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgY2FzZSBGRVRDSDpcbiAgICAgICAgcmV0dXJuIGZldGNoUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgY2FzZSBPUFRJTUlTVElDOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlIFNFVF9SRVNQT05TRTpcbiAgICAgICAgcmV0dXJuIHNldFJlc3BvbnNlUmVkdWNlcihzdGF0ZSwgYWN0aW9uLCBjb250cm9sbGVyKTtcblxuICAgICAgY2FzZSBTRVQ6XG4gICAgICAgIHJldHVybiBzZXRSZWR1Y2VyKHN0YXRlLCBhY3Rpb24sIGNvbnRyb2xsZXIpO1xuXG4gICAgICBjYXNlIElOVkFMSURBVEVBTEw6XG4gICAgICBjYXNlIElOVkFMSURBVEU6XG4gICAgICAgIHJldHVybiBpbnZhbGlkYXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgY2FzZSBFWFBJUkVBTEw6XG4gICAgICAgIHJldHVybiBleHBpcmVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICBjYXNlIFJFU0VUOlxuICAgICAgICByZXR1cm4geyAuLi5pbml0aWFsU3RhdGUsIGxhc3RSZXNldDogYWN0aW9uLmRhdGUgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQSByZWR1Y2VyIG11c3QgYWx3YXlzIHJldHVybiBhIHZhbGlkIHN0YXRlLlxuICAgICAgICAvLyBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdGhyb3cgYW4gZXJyb3IgaWYgYW4gaW52YWxpZCBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfSBhcyBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsU3RhdGU6IFN0YXRlPHVua25vd24+ID0ge1xuICBlbnRpdGllczoge30sXG4gIGVuZHBvaW50czoge30sXG4gIGluZGV4ZXM6IHt9LFxuICBtZXRhOiB7fSxcbiAgZW50aXRpZXNNZXRhOiB7fSxcbiAgb3B0aW1pc3RpYzogW10sXG4gIGxhc3RSZXNldDogMCxcbn07XG5cbnR5cGUgUmVkdWNlclR5cGUgPSAoXG4gIHN0YXRlOiBTdGF0ZTx1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgYWN0aW9uOiBBY3Rpb25UeXBlcyxcbikgPT4gU3RhdGU8dW5rbm93bj47XG5cbnR5cGUgV3JpdGFibGU8VD4gPSB7IFtQIGluIGtleW9mIFRdOiBOb25OdWxsYWJsZTxXcml0YWJsZTxUW1BdPj4gfTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLGFBQWEsUUFBUSxvQkFBb0I7QUFDbEQsU0FBU0MsWUFBWSxRQUFRLG1CQUFtQjtBQUNoRCxTQUFTQyxpQkFBaUIsUUFBUSx3QkFBd0I7QUFDMUQsU0FBU0MsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxrQkFBa0IsUUFBUSx5QkFBeUI7QUFDNUQsU0FDRUMsR0FBRyxFQUNIQyxVQUFVLEVBQ1ZDLEtBQUssRUFDTEMsS0FBSyxFQUNMQyxFQUFFLEVBQ0ZDLFVBQVUsRUFDVkMsYUFBYSxFQUNiQyxTQUFTLEVBQ1RDLFlBQVksUUFDUCxzQkFBc0I7QUFJN0IsZUFBZSxTQUFTQyxhQUFhQSxDQUFDQyxVQUFzQixFQUFlO0VBQ3pFLE9BQU8sU0FBU0MsT0FBT0EsQ0FDckJDLEtBQWlDLEVBQ2pDQyxNQUFtQixFQUNIO0lBQ2hCLElBQUksQ0FBQ0QsS0FBSyxFQUFFQSxLQUFLLEdBQUdFLFlBQVk7SUFDaEMsUUFBUUQsTUFBTSxDQUFDRSxJQUFJO01BQ2pCLEtBQUtYLEVBQUU7UUFDTDtRQUNBUyxNQUFNLENBQUNHLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7VUFBRUMsR0FBRztVQUFFQztRQUFHLENBQUMsS0FBSztVQUFBLElBQUFDLGFBQUEsRUFBQUMsaUJBQUE7VUFDdkMsQ0FBQUQsYUFBQSxHQUFRUixLQUFLLENBQVNJLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLGFBQW5DLE9BQU9FLGFBQUEsQ0FBK0JELEVBQUUsQ0FBQztVQUN6QyxDQUFBRSxpQkFBQSxHQUFRVCxLQUFLLENBQVNVLFlBQVksQ0FBQ0osR0FBRyxDQUFDLGFBQXZDLE9BQU9HLGlCQUFBLENBQW1DRixFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBQ0ZOLE1BQU0sQ0FBQ1UsU0FBUyxDQUFDTixPQUFPLENBQUNPLFFBQVEsSUFBSTtVQUNuQyxPQUFRWixLQUFLLENBQVNXLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDO1VBQ3pDLE9BQVFaLEtBQUssQ0FBU2EsSUFBSSxDQUFDRCxRQUFRLENBQUM7UUFDdEMsQ0FBQyxDQUFDO1FBQ0YsT0FBT1osS0FBSztNQUNkLEtBQUtULEtBQUs7UUFDUixPQUFPUCxZQUFZLENBQUNnQixLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUVwQyxLQUFLUixVQUFVO01BQ2Y7TUFDQSxLQUFLRyxZQUFZO1FBQ2YsT0FBT1Qsa0JBQWtCLENBQUNhLEtBQUssRUFBRUMsTUFBTSxFQUFFSCxVQUFVLENBQUM7TUFFdEQsS0FBS1YsR0FBRztRQUNOLE9BQU9GLFVBQVUsQ0FBQ2MsS0FBSyxFQUFFQyxNQUFNLEVBQUVILFVBQVUsQ0FBQztNQUU5QyxLQUFLSixhQUFhO01BQ2xCLEtBQUtMLFVBQVU7UUFDYixPQUFPSixpQkFBaUIsQ0FBQ2UsS0FBSyxFQUFFQyxNQUFNLENBQUM7TUFFekMsS0FBS04sU0FBUztRQUNaLE9BQU9aLGFBQWEsQ0FBQ2lCLEtBQUssRUFBRUMsTUFBTSxDQUFDO01BRXJDLEtBQUtYLEtBQUs7UUFDUixPQUFBd0IsUUFBQSxLQUFZWixZQUFZO1VBQUVhLFNBQVMsRUFBRWQsTUFBTSxDQUFDZTtRQUFJO01BRWxEO1FBQ0U7UUFDQTtRQUNBLE9BQU9oQixLQUFLO0lBQ2hCO0VBQ0YsQ0FBQztBQUNIO0FBRUEsT0FBTyxNQUFNRSxZQUE0QixHQUFHO0VBQzFDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0VBQ1pPLFNBQVMsRUFBRSxDQUFDLENBQUM7RUFDYk0sT0FBTyxFQUFFLENBQUMsQ0FBQztFQUNYSixJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ1JILFlBQVksRUFBRSxDQUFDLENBQUM7RUFDaEJRLFVBQVUsRUFBRSxFQUFFO0VBQ2RILFNBQVMsRUFBRTtBQUNiLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=