UNPKG

@data-client/core

Version:

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

60 lines 8.16 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, _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 { ...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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBpcmVSZWR1Y2VyIiwiZmV0Y2hSZWR1Y2VyIiwiaW52YWxpZGF0ZVJlZHVjZXIiLCJzZXRSZWR1Y2VyIiwic2V0UmVzcG9uc2VSZWR1Y2VyIiwiU0VUIiwiSU5WQUxJREFURSIsIlJFU0VUIiwiRkVUQ0giLCJHQyIsIk9QVElNSVNUSUMiLCJJTlZBTElEQVRFQUxMIiwiRVhQSVJFQUxMIiwiU0VUX1JFU1BPTlNFIiwiY3JlYXRlUmVkdWNlciIsImNvbnRyb2xsZXIiLCJyZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJpbml0aWFsU3RhdGUiLCJ0eXBlIiwiZW50aXRpZXMiLCJmb3JFYWNoIiwia2V5IiwicGsiLCJfZW50aXRpZXMka2V5IiwiX2VudGl0aWVzTWV0YSRrZXkiLCJlbnRpdGllc01ldGEiLCJlbmRwb2ludHMiLCJmZXRjaEtleSIsIm1ldGEiLCJsYXN0UmVzZXQiLCJkYXRlIiwiaW5kZXhlcyIsIm9wdGltaXN0aWMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvcmVkdWNlci9jcmVhdGVSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGlyZVJlZHVjZXIgfSBmcm9tICcuL2V4cGlyZVJlZHVjZXIuanMnO1xuaW1wb3J0IHsgZmV0Y2hSZWR1Y2VyIH0gZnJvbSAnLi9mZXRjaFJlZHVjZXIuanMnO1xuaW1wb3J0IHsgaW52YWxpZGF0ZVJlZHVjZXIgfSBmcm9tICcuL2ludmFsaWRhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCB7IHNldFJlZHVjZXIgfSBmcm9tICcuL3NldFJlZHVjZXIuanMnO1xuaW1wb3J0IHsgc2V0UmVzcG9uc2VSZWR1Y2VyIH0gZnJvbSAnLi9zZXRSZXNwb25zZVJlZHVjZXIuanMnO1xuaW1wb3J0IHtcbiAgU0VULFxuICBJTlZBTElEQVRFLFxuICBSRVNFVCxcbiAgRkVUQ0gsXG4gIEdDLFxuICBPUFRJTUlTVElDLFxuICBJTlZBTElEQVRFQUxMLFxuICBFWFBJUkVBTEwsXG4gIFNFVF9SRVNQT05TRSxcbn0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tICcuLi8uLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25UeXBlcywgU3RhdGUgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXIoY29udHJvbGxlcjogQ29udHJvbGxlcik6IFJlZHVjZXJUeXBlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZXIoXG4gICAgc3RhdGU6IFN0YXRlPHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgIGFjdGlvbjogQWN0aW9uVHlwZXMsXG4gICk6IFN0YXRlPHVua25vd24+IHtcbiAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIEdDOlxuICAgICAgICAvLyBpbmxpbmUgZGVsZXRlcyBhcmUgZmluZSBhcyB0aGVzZSBzaG91bGQgaGF2ZSAwIHJlZmNvdW50c1xuICAgICAgICBhY3Rpb24uZW50aXRpZXMuZm9yRWFjaCgoeyBrZXksIHBrIH0pID0+IHtcbiAgICAgICAgICBkZWxldGUgKHN0YXRlIGFzIGFueSkuZW50aXRpZXNba2V5XT8uW3BrXTtcbiAgICAgICAgICBkZWxldGUgKHN0YXRlIGFzIGFueSkuZW50aXRpZXNNZXRhW2tleV0/Lltwa107XG4gICAgICAgIH0pO1xuICAgICAgICBhY3Rpb24uZW5kcG9pbnRzLmZvckVhY2goZmV0Y2hLZXkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5lbmRwb2ludHNbZmV0Y2hLZXldO1xuICAgICAgICAgIGRlbGV0ZSAoc3RhdGUgYXMgYW55KS5tZXRhW2ZldGNoS2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIGNhc2UgRkVUQ0g6XG4gICAgICAgIHJldHVybiBmZXRjaFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG5cbiAgICAgIGNhc2UgT1BUSU1JU1RJQzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSBTRVRfUkVTUE9OU0U6XG4gICAgICAgIHJldHVybiBzZXRSZXNwb25zZVJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgY29udHJvbGxlcik7XG5cbiAgICAgIGNhc2UgU0VUOlxuICAgICAgICByZXR1cm4gc2V0UmVkdWNlcihzdGF0ZSwgYWN0aW9uLCBjb250cm9sbGVyKTtcblxuICAgICAgY2FzZSBJTlZBTElEQVRFQUxMOlxuICAgICAgY2FzZSBJTlZBTElEQVRFOlxuICAgICAgICByZXR1cm4gaW52YWxpZGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG5cbiAgICAgIGNhc2UgRVhQSVJFQUxMOlxuICAgICAgICByZXR1cm4gZXhwaXJlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcblxuICAgICAgY2FzZSBSRVNFVDpcbiAgICAgICAgcmV0dXJuIHsgLi4uaW5pdGlhbFN0YXRlLCBsYXN0UmVzZXQ6IGFjdGlvbi5kYXRlIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEEgcmVkdWNlciBtdXN0IGFsd2F5cyByZXR1cm4gYSB2YWxpZCBzdGF0ZS5cbiAgICAgICAgLy8gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHRocm93IGFuIGVycm9yIGlmIGFuIGludmFsaWQgYWN0aW9uIGlzIGRpc3BhdGNoZWQuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH0gYXMgYW55O1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZTx1bmtub3duPiA9IHtcbiAgZW50aXRpZXM6IHt9LFxuICBlbmRwb2ludHM6IHt9LFxuICBpbmRleGVzOiB7fSxcbiAgbWV0YToge30sXG4gIGVudGl0aWVzTWV0YToge30sXG4gIG9wdGltaXN0aWM6IFtdLFxuICBsYXN0UmVzZXQ6IDAsXG59O1xuXG50eXBlIFJlZHVjZXJUeXBlID0gKFxuICBzdGF0ZTogU3RhdGU8dW5rbm93bj4gfCB1bmRlZmluZWQsXG4gIGFjdGlvbjogQWN0aW9uVHlwZXMsXG4pID0+IFN0YXRlPHVua25vd24+O1xuXG50eXBlIFdyaXRhYmxlPFQ+ID0geyBbUCBpbiBrZXlvZiBUXTogTm9uTnVsbGFibGU8V3JpdGFibGU8VFtQXT4+IH07XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBUSxvQkFBb0I7QUFDbEQsU0FBU0MsWUFBWSxRQUFRLG1CQUFtQjtBQUNoRCxTQUFTQyxpQkFBaUIsUUFBUSx3QkFBd0I7QUFDMUQsU0FBU0MsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxrQkFBa0IsUUFBUSx5QkFBeUI7QUFDNUQsU0FDRUMsR0FBRyxFQUNIQyxVQUFVLEVBQ1ZDLEtBQUssRUFDTEMsS0FBSyxFQUNMQyxFQUFFLEVBQ0ZDLFVBQVUsRUFDVkMsYUFBYSxFQUNiQyxTQUFTLEVBQ1RDLFlBQVksUUFDUCxzQkFBc0I7QUFJN0IsZUFBZSxTQUFTQyxhQUFhQSxDQUFDQyxVQUFzQixFQUFlO0VBQ3pFLE9BQU8sU0FBU0MsT0FBT0EsQ0FDckJDLEtBQWlDLEVBQ2pDQyxNQUFtQixFQUNIO0lBQ2hCLElBQUksQ0FBQ0QsS0FBSyxFQUFFQSxLQUFLLEdBQUdFLFlBQVk7SUFDaEMsUUFBUUQsTUFBTSxDQUFDRSxJQUFJO01BQ2pCLEtBQUtYLEVBQUU7UUFDTDtRQUNBUyxNQUFNLENBQUNHLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7VUFBRUMsR0FBRztVQUFFQztRQUFHLENBQUMsS0FBSztVQUFBLElBQUFDLGFBQUEsRUFBQUMsaUJBQUE7VUFDdkMsQ0FBQUQsYUFBQSxHQUFRUixLQUFLLENBQVNJLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLGFBQW5DLE9BQU9FLGFBQUEsQ0FBK0JELEVBQUUsQ0FBQztVQUN6QyxDQUFBRSxpQkFBQSxHQUFRVCxLQUFLLENBQVNVLFlBQVksQ0FBQ0osR0FBRyxDQUFDLGFBQXZDLE9BQU9HLGlCQUFBLENBQW1DRixFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBQ0ZOLE1BQU0sQ0FBQ1UsU0FBUyxDQUFDTixPQUFPLENBQUNPLFFBQVEsSUFBSTtVQUNuQyxPQUFRWixLQUFLLENBQVNXLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDO1VBQ3pDLE9BQVFaLEtBQUssQ0FBU2EsSUFBSSxDQUFDRCxRQUFRLENBQUM7UUFDdEMsQ0FBQyxDQUFDO1FBQ0YsT0FBT1osS0FBSztNQUNkLEtBQUtULEtBQUs7UUFDUixPQUFPUCxZQUFZLENBQUNnQixLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUVwQyxLQUFLUixVQUFVO01BQ2Y7TUFDQSxLQUFLRyxZQUFZO1FBQ2YsT0FBT1Qsa0JBQWtCLENBQUNhLEtBQUssRUFBRUMsTUFBTSxFQUFFSCxVQUFVLENBQUM7TUFFdEQsS0FBS1YsR0FBRztRQUNOLE9BQU9GLFVBQVUsQ0FBQ2MsS0FBSyxFQUFFQyxNQUFNLEVBQUVILFVBQVUsQ0FBQztNQUU5QyxLQUFLSixhQUFhO01BQ2xCLEtBQUtMLFVBQVU7UUFDYixPQUFPSixpQkFBaUIsQ0FBQ2UsS0FBSyxFQUFFQyxNQUFNLENBQUM7TUFFekMsS0FBS04sU0FBUztRQUNaLE9BQU9aLGFBQWEsQ0FBQ2lCLEtBQUssRUFBRUMsTUFBTSxDQUFDO01BRXJDLEtBQUtYLEtBQUs7UUFDUixPQUFPO1VBQUUsR0FBR1ksWUFBWTtVQUFFWSxTQUFTLEVBQUViLE1BQU0sQ0FBQ2M7UUFBSyxDQUFDO01BRXBEO1FBQ0U7UUFDQTtRQUNBLE9BQU9mLEtBQUs7SUFDaEI7RUFDRixDQUFDO0FBQ0g7QUFFQSxPQUFPLE1BQU1FLFlBQTRCLEdBQUc7RUFDMUNFLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFDWk8sU0FBUyxFQUFFLENBQUMsQ0FBQztFQUNiSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ1hILElBQUksRUFBRSxDQUFDLENBQUM7RUFDUkgsWUFBWSxFQUFFLENBQUMsQ0FBQztFQUNoQk8sVUFBVSxFQUFFLEVBQUU7RUFDZEgsU0FBUyxFQUFFO0FBQ2IsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==