@data-client/core 0.12.3 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +89 -15
- package/dist/index.umd.min.js +1 -1
- package/legacy/actionTypes.js +2 -1
- package/legacy/actions.js +1 -1
- package/legacy/controller/Controller.js +21 -7
- package/legacy/controller/createSet.js +7 -11
- package/legacy/controller/createSetResponse.js +32 -0
- package/legacy/index.js +2 -1
- package/legacy/manager/DevtoolsManager.js +5 -5
- package/legacy/manager/LogoutManager.js +3 -3
- package/legacy/manager/NetworkManager.js +5 -5
- package/legacy/manager/PollingSubscription.js +1 -1
- package/legacy/manager/SubscriptionManager.js +1 -1
- package/legacy/next/index.js +1 -1
- package/legacy/state/reducer/createReducer.js +6 -3
- package/legacy/state/reducer/fetchReducer.js +1 -1
- package/legacy/state/reducer/setReducer.js +7 -85
- package/legacy/state/reducer/setResponseReducer.js +107 -0
- package/legacy/types.js +1 -1
- package/lib/actionTypes.d.ts +1 -0
- package/lib/actionTypes.d.ts.map +1 -1
- package/lib/actionTypes.js +2 -1
- package/lib/actions.d.ts +23 -11
- package/lib/actions.d.ts.map +1 -1
- package/lib/actions.js +1 -1
- package/lib/controller/Controller.d.ts +7 -2
- package/lib/controller/Controller.d.ts.map +1 -1
- package/lib/controller/Controller.js +21 -7
- package/lib/controller/createSet.d.ts +5 -17
- package/lib/controller/createSet.d.ts.map +1 -1
- package/lib/controller/createSet.js +7 -11
- package/lib/controller/createSetResponse.d.ts +20 -0
- package/lib/controller/createSetResponse.d.ts.map +1 -0
- package/lib/controller/createSetResponse.js +32 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/manager/DevtoolsManager.d.ts.map +1 -1
- package/lib/manager/DevtoolsManager.js +5 -3
- package/lib/manager/LogoutManager.js +3 -3
- package/lib/manager/NetworkManager.d.ts +2 -2
- package/lib/manager/NetworkManager.d.ts.map +1 -1
- package/lib/manager/NetworkManager.js +5 -5
- package/lib/manager/PollingSubscription.js +1 -1
- package/lib/manager/SubscriptionManager.js +1 -1
- package/lib/next/index.js +1 -1
- package/lib/state/reducer/createReducer.d.ts.map +1 -1
- package/lib/state/reducer/createReducer.js +6 -3
- package/lib/state/reducer/expireReducer.d.ts +1 -1
- package/lib/state/reducer/fetchReducer.js +1 -1
- package/lib/state/reducer/invalidateReducer.d.ts +1 -1
- package/lib/state/reducer/setReducer.d.ts +2 -3
- package/lib/state/reducer/setReducer.d.ts.map +1 -1
- package/lib/state/reducer/setReducer.js +7 -90
- package/lib/state/reducer/setResponseReducer.d.ts +4 -0
- package/lib/state/reducer/setResponseReducer.d.ts.map +1 -0
- package/lib/state/reducer/setResponseReducer.js +112 -0
- package/lib/types.d.ts +2 -4
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -1
- package/package.json +1 -1
- package/src/actionTypes.ts +1 -0
- package/src/actions.ts +29 -10
- package/src/controller/Controller.ts +25 -8
- package/src/controller/createSet.ts +11 -51
- package/src/controller/createSetResponse.ts +79 -0
- package/src/index.ts +1 -0
- package/src/manager/DevtoolsManager.ts +4 -2
- package/src/manager/LogoutManager.ts +2 -2
- package/src/manager/NetworkManager.ts +6 -6
- package/src/manager/__tests__/logoutManager.ts +5 -5
- package/src/manager/__tests__/networkManager.ts +6 -6
- package/src/manager/__tests__/subscriptionManager.ts +2 -2
- package/src/state/__tests__/reducer.ts +64 -25
- package/src/state/reducer/createReducer.ts +6 -1
- package/src/state/reducer/fetchReducer.ts +2 -2
- package/src/state/reducer/setReducer.ts +9 -121
- package/src/state/reducer/setResponseReducer.ts +151 -0
- package/src/types.ts +6 -5
- package/ts3.4/actionTypes.d.ts +1 -0
- package/ts3.4/actions.d.ts +23 -11
- package/ts3.4/controller/Controller.d.ts +10 -2
- package/ts3.4/controller/createSet.d.ts +5 -19
- package/ts3.4/controller/createSetResponse.d.ts +24 -0
- package/ts3.4/index.d.ts +1 -0
- package/ts3.4/manager/NetworkManager.d.ts +2 -2
- package/ts3.4/state/reducer/expireReducer.d.ts +1 -1
- package/ts3.4/state/reducer/invalidateReducer.d.ts +1 -1
- package/ts3.4/state/reducer/setReducer.d.ts +2 -3
- package/ts3.4/state/reducer/setResponseReducer.d.ts +4 -0
- package/ts3.4/types.d.ts +2 -4
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { normalize } from '@data-client/normalizr';
|
|
2
|
+
import { OPTIMISTIC_TYPE } from '../../actionTypes.js';
|
|
3
|
+
import AbortOptimistic from '../../controller/AbortOptimistic.js';
|
|
4
|
+
export function setResponseReducer(state, action, controller) {
|
|
5
|
+
if (action.error) {
|
|
6
|
+
return reduceError(state, action, action.payload);
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
var _state$meta$action$me;
|
|
10
|
+
let payload;
|
|
11
|
+
// for true set's payload is contained in action
|
|
12
|
+
if (action.type === OPTIMISTIC_TYPE) {
|
|
13
|
+
// this should never happen
|
|
14
|
+
/* istanbul ignore if */
|
|
15
|
+
if (!action.endpoint.getOptimisticResponse) return state;
|
|
16
|
+
try {
|
|
17
|
+
// compute optimistic response based on current state
|
|
18
|
+
payload = action.endpoint.getOptimisticResponse.call(action.endpoint, controller.snapshot(state, action.meta.fetchedAt), ...action.meta.args);
|
|
19
|
+
} catch (e) {
|
|
20
|
+
// AbortOptimistic means 'do nothing', otherwise we count the exception as endpoint failure
|
|
21
|
+
if (e.constructor === AbortOptimistic) {
|
|
22
|
+
return state;
|
|
23
|
+
}
|
|
24
|
+
throw e;
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
payload = action.payload;
|
|
28
|
+
}
|
|
29
|
+
const {
|
|
30
|
+
result,
|
|
31
|
+
entities,
|
|
32
|
+
indexes,
|
|
33
|
+
entityMeta
|
|
34
|
+
} = normalize(payload, action.endpoint.schema, action.meta.args, state.entities, state.indexes, state.entityMeta, action.meta);
|
|
35
|
+
const endpoints = {
|
|
36
|
+
...state.endpoints,
|
|
37
|
+
[action.meta.key]: result
|
|
38
|
+
};
|
|
39
|
+
try {
|
|
40
|
+
if (action.endpoint.update) {
|
|
41
|
+
const updaters = action.endpoint.update(result, ...action.meta.args);
|
|
42
|
+
Object.keys(updaters).forEach(key => {
|
|
43
|
+
endpoints[key] = updaters[key](endpoints[key]);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// no reason to completely fail because of user-code error
|
|
47
|
+
// integrity of this state update is still guaranteed
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error(`The following error occured during Endpoint.update() for ${action.meta.key}`);
|
|
50
|
+
console.error(error);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
entities,
|
|
54
|
+
indexes,
|
|
55
|
+
endpoints,
|
|
56
|
+
entityMeta,
|
|
57
|
+
meta: {
|
|
58
|
+
...state.meta,
|
|
59
|
+
[action.meta.key]: {
|
|
60
|
+
date: action.meta.date,
|
|
61
|
+
expiresAt: action.meta.expiresAt,
|
|
62
|
+
prevExpiresAt: (_state$meta$action$me = state.meta[action.meta.key]) == null ? void 0 : _state$meta$action$me.expiresAt
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
optimistic: filterOptimistic(state, action),
|
|
66
|
+
lastReset: state.lastReset
|
|
67
|
+
};
|
|
68
|
+
// reducer must update the state, so in case of processing errors we simply compute the endpoints inline
|
|
69
|
+
} catch (error) {
|
|
70
|
+
if (typeof error === 'object') {
|
|
71
|
+
error.message = `Error processing ${action.meta.key}\n\nFull Schema: ${JSON.stringify(action.endpoint.schema, undefined, 2)}\n\nError:\n${error.message}`;
|
|
72
|
+
if ('payload' in action) error.payload = action.payload;
|
|
73
|
+
error.status = 400;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// this is not always bubbled up, so let's double sure this doesn't fail silently
|
|
77
|
+
/* istanbul ignore else */
|
|
78
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
79
|
+
console.error(error);
|
|
80
|
+
}
|
|
81
|
+
return reduceError(state, action, error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function reduceError(state, action, error) {
|
|
85
|
+
if (error.name === 'AbortError') {
|
|
86
|
+
// In case we abort simply undo the optimistic update and act like no fetch even occured
|
|
87
|
+
// We still want those watching promises from fetch directly to observed the abort, but we don't want to
|
|
88
|
+
// Trigger errors in this case. This means theoretically improperly built abortes useResource() could suspend forever.
|
|
89
|
+
return {
|
|
90
|
+
...state,
|
|
91
|
+
optimistic: filterOptimistic(state, action)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
...state,
|
|
96
|
+
meta: {
|
|
97
|
+
...state.meta,
|
|
98
|
+
[action.meta.key]: {
|
|
99
|
+
date: action.meta.date,
|
|
100
|
+
error,
|
|
101
|
+
expiresAt: action.meta.expiresAt,
|
|
102
|
+
errorPolicy: action.endpoint.errorPolicy == null ? void 0 : action.endpoint.errorPolicy(error)
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
optimistic: filterOptimistic(state, action)
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Filter all requests with same serialization that did not start after the resolving request */
|
|
109
|
+
function filterOptimistic(state, resolvingAction) {
|
|
110
|
+
return state.optimistic.filter(optimisticAction => optimisticAction.meta.key !== resolvingAction.meta.key || (optimisticAction.type === OPTIMISTIC_TYPE ? optimisticAction.meta.fetchedAt !== resolvingAction.meta.fetchedAt : optimisticAction.meta.date > resolvingAction.meta.date));
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemUiLCJPUFRJTUlTVElDX1RZUEUiLCJBYm9ydE9wdGltaXN0aWMiLCJzZXRSZXNwb25zZVJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsImNvbnRyb2xsZXIiLCJlcnJvciIsInJlZHVjZUVycm9yIiwicGF5bG9hZCIsIl9zdGF0ZSRtZXRhJGFjdGlvbiRtZSIsInR5cGUiLCJlbmRwb2ludCIsImdldE9wdGltaXN0aWNSZXNwb25zZSIsImNhbGwiLCJzbmFwc2hvdCIsIm1ldGEiLCJmZXRjaGVkQXQiLCJhcmdzIiwiZSIsImNvbnN0cnVjdG9yIiwicmVzdWx0IiwiZW50aXRpZXMiLCJpbmRleGVzIiwiZW50aXR5TWV0YSIsInNjaGVtYSIsImVuZHBvaW50cyIsImtleSIsInVwZGF0ZSIsInVwZGF0ZXJzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJjb25zb2xlIiwiZGF0ZSIsImV4cGlyZXNBdCIsInByZXZFeHBpcmVzQXQiLCJvcHRpbWlzdGljIiwiZmlsdGVyT3B0aW1pc3RpYyIsImxhc3RSZXNldCIsIm1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwic3RhdHVzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwibmFtZSIsImVycm9yUG9saWN5IiwicmVzb2x2aW5nQWN0aW9uIiwiZmlsdGVyIiwib3B0aW1pc3RpY0FjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9yZWR1Y2VyL3NldFJlc3BvbnNlUmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgT1BUSU1JU1RJQ19UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IEFib3J0T3B0aW1pc3RpYyBmcm9tICcuLi8uLi9jb250cm9sbGVyL0Fib3J0T3B0aW1pc3RpYy5qcyc7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0YXRlLFxuICBTZXRSZXNwb25zZUFjdGlvbixcbiAgT3B0aW1pc3RpY0FjdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVzcG9uc2VSZWR1Y2VyKFxuICBzdGF0ZTogU3RhdGU8dW5rbm93bj4sXG4gIGFjdGlvbjogT3B0aW1pc3RpY0FjdGlvbiB8IFNldFJlc3BvbnNlQWN0aW9uLFxuICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuKSB7XG4gIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICByZXR1cm4gcmVkdWNlRXJyb3Ioc3RhdGUsIGFjdGlvbiwgYWN0aW9uLnBheWxvYWQpO1xuICB9XG4gIHRyeSB7XG4gICAgbGV0IHBheWxvYWQ6IGFueTtcbiAgICAvLyBmb3IgdHJ1ZSBzZXQncyBwYXlsb2FkIGlzIGNvbnRhaW5lZCBpbiBhY3Rpb25cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09IE9QVElNSVNUSUNfVFlQRSkge1xuICAgICAgLy8gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghYWN0aW9uLmVuZHBvaW50LmdldE9wdGltaXN0aWNSZXNwb25zZSkgcmV0dXJuIHN0YXRlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gY29tcHV0ZSBvcHRpbWlzdGljIHJlc3BvbnNlIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgcGF5bG9hZCA9IGFjdGlvbi5lbmRwb2ludC5nZXRPcHRpbWlzdGljUmVzcG9uc2UuY2FsbChcbiAgICAgICAgICBhY3Rpb24uZW5kcG9pbnQsXG4gICAgICAgICAgY29udHJvbGxlci5zbmFwc2hvdChzdGF0ZSwgYWN0aW9uLm1ldGEuZmV0Y2hlZEF0KSxcbiAgICAgICAgICAuLi5hY3Rpb24ubWV0YS5hcmdzLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIC8vIEFib3J0T3B0aW1pc3RpYyBtZWFucyAnZG8gbm90aGluZycsIG90aGVyd2lzZSB3ZSBjb3VudCB0aGUgZXhjZXB0aW9uIGFzIGVuZHBvaW50IGZhaWx1cmVcbiAgICAgICAgaWYgKGUuY29uc3RydWN0b3IgPT09IEFib3J0T3B0aW1pc3RpYykge1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfVxuICAgIGNvbnN0IHsgcmVzdWx0LCBlbnRpdGllcywgaW5kZXhlcywgZW50aXR5TWV0YSB9ID0gbm9ybWFsaXplKFxuICAgICAgcGF5bG9hZCxcbiAgICAgIGFjdGlvbi5lbmRwb2ludC5zY2hlbWEsXG4gICAgICBhY3Rpb24ubWV0YS5hcmdzIGFzIGFueSxcbiAgICAgIHN0YXRlLmVudGl0aWVzLFxuICAgICAgc3RhdGUuaW5kZXhlcyxcbiAgICAgIHN0YXRlLmVudGl0eU1ldGEsXG4gICAgICBhY3Rpb24ubWV0YSxcbiAgICApO1xuICAgIGNvbnN0IGVuZHBvaW50czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAuLi5zdGF0ZS5lbmRwb2ludHMsXG4gICAgICBbYWN0aW9uLm1ldGEua2V5XTogcmVzdWx0LFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhY3Rpb24uZW5kcG9pbnQudXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZXJzID0gYWN0aW9uLmVuZHBvaW50LnVwZGF0ZShyZXN1bHQsIC4uLmFjdGlvbi5tZXRhLmFyZ3MpO1xuICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGVuZHBvaW50c1trZXldID0gdXBkYXRlcnNba2V5XShlbmRwb2ludHNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbm8gcmVhc29uIHRvIGNvbXBsZXRlbHkgZmFpbCBiZWNhdXNlIG9mIHVzZXItY29kZSBlcnJvclxuICAgICAgLy8gaW50ZWdyaXR5IG9mIHRoaXMgc3RhdGUgdXBkYXRlIGlzIHN0aWxsIGd1YXJhbnRlZWRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJlZCBkdXJpbmcgRW5kcG9pbnQudXBkYXRlKCkgZm9yICR7YWN0aW9uLm1ldGEua2V5fWAsXG4gICAgICApO1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBlbnRpdGllcyxcbiAgICAgIGluZGV4ZXMsXG4gICAgICBlbmRwb2ludHMsXG4gICAgICBlbnRpdHlNZXRhLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5zdGF0ZS5tZXRhLFxuICAgICAgICBbYWN0aW9uLm1ldGEua2V5XToge1xuICAgICAgICAgIGRhdGU6IGFjdGlvbi5tZXRhLmRhdGUsXG4gICAgICAgICAgZXhwaXJlc0F0OiBhY3Rpb24ubWV0YS5leHBpcmVzQXQsXG4gICAgICAgICAgcHJldkV4cGlyZXNBdDogc3RhdGUubWV0YVthY3Rpb24ubWV0YS5rZXldPy5leHBpcmVzQXQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb3B0aW1pc3RpYzogZmlsdGVyT3B0aW1pc3RpYyhzdGF0ZSwgYWN0aW9uKSxcbiAgICAgIGxhc3RSZXNldDogc3RhdGUubGFzdFJlc2V0LFxuICAgIH07XG4gICAgLy8gcmVkdWNlciBtdXN0IHVwZGF0ZSB0aGUgc3RhdGUsIHNvIGluIGNhc2Ugb2YgcHJvY2Vzc2luZyBlcnJvcnMgd2Ugc2ltcGx5IGNvbXB1dGUgdGhlIGVuZHBvaW50cyBpbmxpbmVcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvci5tZXNzYWdlID0gYEVycm9yIHByb2Nlc3NpbmcgJHtcbiAgICAgICAgYWN0aW9uLm1ldGEua2V5XG4gICAgICB9XFxuXFxuRnVsbCBTY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFjdGlvbi5lbmRwb2ludC5zY2hlbWEsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgMixcbiAgICAgICl9XFxuXFxuRXJyb3I6XFxuJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICBpZiAoJ3BheWxvYWQnIGluIGFjdGlvbikgZXJyb3IucGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgZXJyb3Iuc3RhdHVzID0gNDAwO1xuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgbm90IGFsd2F5cyBidWJibGVkIHVwLCBzbyBsZXQncyBkb3VibGUgc3VyZSB0aGlzIGRvZXNuJ3QgZmFpbCBzaWxlbnRseVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVkdWNlRXJyb3Ioc3RhdGUsIGFjdGlvbiwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUVycm9yKFxuICBzdGF0ZTogU3RhdGU8dW5rbm93bj4sXG4gIGFjdGlvbjogU2V0UmVzcG9uc2VBY3Rpb24gfCBPcHRpbWlzdGljQWN0aW9uLFxuICBlcnJvcjogYW55LFxuKTogU3RhdGU8dW5rbm93bj4ge1xuICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgLy8gSW4gY2FzZSB3ZSBhYm9ydCBzaW1wbHkgdW5kbyB0aGUgb3B0aW1pc3RpYyB1cGRhdGUgYW5kIGFjdCBsaWtlIG5vIGZldGNoIGV2ZW4gb2NjdXJlZFxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdGhvc2Ugd2F0Y2hpbmcgcHJvbWlzZXMgZnJvbSBmZXRjaCBkaXJlY3RseSB0byBvYnNlcnZlZCB0aGUgYWJvcnQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvXG4gICAgLy8gVHJpZ2dlciBlcnJvcnMgaW4gdGhpcyBjYXNlLiBUaGlzIG1lYW5zIHRoZW9yZXRpY2FsbHkgaW1wcm9wZXJseSBidWlsdCBhYm9ydGVzIHVzZVJlc291cmNlKCkgY291bGQgc3VzcGVuZCBmb3JldmVyLlxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9wdGltaXN0aWM6IGZpbHRlck9wdGltaXN0aWMoc3RhdGUsIGFjdGlvbiksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1ldGE6IHtcbiAgICAgIC4uLnN0YXRlLm1ldGEsXG4gICAgICBbYWN0aW9uLm1ldGEua2V5XToge1xuICAgICAgICBkYXRlOiBhY3Rpb24ubWV0YS5kYXRlLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZXhwaXJlc0F0OiBhY3Rpb24ubWV0YS5leHBpcmVzQXQsXG4gICAgICAgIGVycm9yUG9saWN5OiBhY3Rpb24uZW5kcG9pbnQuZXJyb3JQb2xpY3k/LihlcnJvciksXG4gICAgICB9LFxuICAgIH0sXG4gICAgb3B0aW1pc3RpYzogZmlsdGVyT3B0aW1pc3RpYyhzdGF0ZSwgYWN0aW9uKSxcbiAgfTtcbn1cbi8qKiBGaWx0ZXIgYWxsIHJlcXVlc3RzIHdpdGggc2FtZSBzZXJpYWxpemF0aW9uIHRoYXQgZGlkIG5vdCBzdGFydCBhZnRlciB0aGUgcmVzb2x2aW5nIHJlcXVlc3QgKi9cbmZ1bmN0aW9uIGZpbHRlck9wdGltaXN0aWMoXG4gIHN0YXRlOiBTdGF0ZTx1bmtub3duPixcbiAgcmVzb2x2aW5nQWN0aW9uOiBTZXRSZXNwb25zZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb24sXG4pIHtcbiAgcmV0dXJuIHN0YXRlLm9wdGltaXN0aWMuZmlsdGVyKFxuICAgIG9wdGltaXN0aWNBY3Rpb24gPT5cbiAgICAgIG9wdGltaXN0aWNBY3Rpb24ubWV0YS5rZXkgIT09IHJlc29sdmluZ0FjdGlvbi5tZXRhLmtleSB8fFxuICAgICAgKG9wdGltaXN0aWNBY3Rpb24udHlwZSA9PT0gT1BUSU1JU1RJQ19UWVBFID9cbiAgICAgICAgb3B0aW1pc3RpY0FjdGlvbi5tZXRhLmZldGNoZWRBdCAhPT0gcmVzb2x2aW5nQWN0aW9uLm1ldGEuZmV0Y2hlZEF0XG4gICAgICA6IG9wdGltaXN0aWNBY3Rpb24ubWV0YS5kYXRlID4gcmVzb2x2aW5nQWN0aW9uLm1ldGEuZGF0ZSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSx3QkFBd0I7QUFFbEQsU0FBU0MsZUFBZSxRQUFRLHNCQUFzQjtBQUN0RCxPQUFPQyxlQUFlLE1BQU0scUNBQXFDO0FBUWpFLE9BQU8sU0FBU0Msa0JBQWtCQSxDQUNoQ0MsS0FBcUIsRUFDckJDLE1BQTRDLEVBQzVDQyxVQUFzQixFQUN0QjtFQUNBLElBQUlELE1BQU0sQ0FBQ0UsS0FBSyxFQUFFO0lBQ2hCLE9BQU9DLFdBQVcsQ0FBQ0osS0FBSyxFQUFFQyxNQUFNLEVBQUVBLE1BQU0sQ0FBQ0ksT0FBTyxDQUFDO0VBQ25EO0VBQ0EsSUFBSTtJQUFBLElBQUFDLHFCQUFBO0lBQ0YsSUFBSUQsT0FBWTtJQUNoQjtJQUNBLElBQUlKLE1BQU0sQ0FBQ00sSUFBSSxLQUFLVixlQUFlLEVBQUU7TUFDbkM7TUFDQTtNQUNBLElBQUksQ0FBQ0ksTUFBTSxDQUFDTyxRQUFRLENBQUNDLHFCQUFxQixFQUFFLE9BQU9ULEtBQUs7TUFDeEQsSUFBSTtRQUNGO1FBQ0FLLE9BQU8sR0FBR0osTUFBTSxDQUFDTyxRQUFRLENBQUNDLHFCQUFxQixDQUFDQyxJQUFJLENBQ2xEVCxNQUFNLENBQUNPLFFBQVEsRUFDZk4sVUFBVSxDQUFDUyxRQUFRLENBQUNYLEtBQUssRUFBRUMsTUFBTSxDQUFDVyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxFQUNqRCxHQUFHWixNQUFNLENBQUNXLElBQUksQ0FBQ0UsSUFDakIsQ0FBQztNQUNILENBQUMsQ0FBQyxPQUFPQyxDQUFNLEVBQUU7UUFDZjtRQUNBLElBQUlBLENBQUMsQ0FBQ0MsV0FBVyxLQUFLbEIsZUFBZSxFQUFFO1VBQ3JDLE9BQU9FLEtBQUs7UUFDZDtRQUNBLE1BQU1lLENBQUM7TUFDVDtJQUNGLENBQUMsTUFBTTtNQUNMVixPQUFPLEdBQUdKLE1BQU0sQ0FBQ0ksT0FBTztJQUMxQjtJQUNBLE1BQU07TUFBRVksTUFBTTtNQUFFQyxRQUFRO01BQUVDLE9BQU87TUFBRUM7SUFBVyxDQUFDLEdBQUd4QixTQUFTLENBQ3pEUyxPQUFPLEVBQ1BKLE1BQU0sQ0FBQ08sUUFBUSxDQUFDYSxNQUFNLEVBQ3RCcEIsTUFBTSxDQUFDVyxJQUFJLENBQUNFLElBQUksRUFDaEJkLEtBQUssQ0FBQ2tCLFFBQVEsRUFDZGxCLEtBQUssQ0FBQ21CLE9BQU8sRUFDYm5CLEtBQUssQ0FBQ29CLFVBQVUsRUFDaEJuQixNQUFNLENBQUNXLElBQ1QsQ0FBQztJQUNELE1BQU1VLFNBQWtDLEdBQUc7TUFDekMsR0FBR3RCLEtBQUssQ0FBQ3NCLFNBQVM7TUFDbEIsQ0FBQ3JCLE1BQU0sQ0FBQ1csSUFBSSxDQUFDVyxHQUFHLEdBQUdOO0lBQ3JCLENBQUM7SUFDRCxJQUFJO01BQ0YsSUFBSWhCLE1BQU0sQ0FBQ08sUUFBUSxDQUFDZ0IsTUFBTSxFQUFFO1FBQzFCLE1BQU1DLFFBQVEsR0FBR3hCLE1BQU0sQ0FBQ08sUUFBUSxDQUFDZ0IsTUFBTSxDQUFDUCxNQUFNLEVBQUUsR0FBR2hCLE1BQU0sQ0FBQ1csSUFBSSxDQUFDRSxJQUFJLENBQUM7UUFDcEVZLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixRQUFRLENBQUMsQ0FBQ0csT0FBTyxDQUFDTCxHQUFHLElBQUk7VUFDbkNELFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLEdBQUdFLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDLENBQUNELFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO01BQ0o7TUFDQTtNQUNBO0lBQ0YsQ0FBQyxDQUFDLE9BQU9wQixLQUFLLEVBQUU7TUFDZDBCLE9BQU8sQ0FBQzFCLEtBQUssQ0FDWCw0REFBNERGLE1BQU0sQ0FBQ1csSUFBSSxDQUFDVyxHQUFHLEVBQzdFLENBQUM7TUFDRE0sT0FBTyxDQUFDMUIsS0FBSyxDQUFDQSxLQUFLLENBQUM7SUFDdEI7SUFDQSxPQUFPO01BQ0xlLFFBQVE7TUFDUkMsT0FBTztNQUNQRyxTQUFTO01BQ1RGLFVBQVU7TUFDVlIsSUFBSSxFQUFFO1FBQ0osR0FBR1osS0FBSyxDQUFDWSxJQUFJO1FBQ2IsQ0FBQ1gsTUFBTSxDQUFDVyxJQUFJLENBQUNXLEdBQUcsR0FBRztVQUNqQk8sSUFBSSxFQUFFN0IsTUFBTSxDQUFDVyxJQUFJLENBQUNrQixJQUFJO1VBQ3RCQyxTQUFTLEVBQUU5QixNQUFNLENBQUNXLElBQUksQ0FBQ21CLFNBQVM7VUFDaENDLGFBQWEsR0FBQTFCLHFCQUFBLEdBQUVOLEtBQUssQ0FBQ1ksSUFBSSxDQUFDWCxNQUFNLENBQUNXLElBQUksQ0FBQ1csR0FBRyxDQUFDLHFCQUEzQmpCLHFCQUFBLENBQTZCeUI7UUFDOUM7TUFDRixDQUFDO01BQ0RFLFVBQVUsRUFBRUMsZ0JBQWdCLENBQUNsQyxLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUMzQ2tDLFNBQVMsRUFBRW5DLEtBQUssQ0FBQ21DO0lBQ25CLENBQUM7SUFDRDtFQUNGLENBQUMsQ0FBQyxPQUFPaEMsS0FBVSxFQUFFO0lBQ25CLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUM3QkEsS0FBSyxDQUFDaUMsT0FBTyxHQUFHLG9CQUNkbkMsTUFBTSxDQUFDVyxJQUFJLENBQUNXLEdBQUcsb0JBQ0djLElBQUksQ0FBQ0MsU0FBUyxDQUNoQ3JDLE1BQU0sQ0FBQ08sUUFBUSxDQUFDYSxNQUFNLEVBQ3RCa0IsU0FBUyxFQUNULENBQ0YsQ0FBQyxlQUFlcEMsS0FBSyxDQUFDaUMsT0FBTyxFQUFFO01BQy9CLElBQUksU0FBUyxJQUFJbkMsTUFBTSxFQUFFRSxLQUFLLENBQUNFLE9BQU8sR0FBR0osTUFBTSxDQUFDSSxPQUFPO01BQ3ZERixLQUFLLENBQUNxQyxNQUFNLEdBQUcsR0FBRztJQUNwQjs7SUFFQTtJQUNBO0lBQ0EsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLEVBQUU7TUFDekNkLE9BQU8sQ0FBQzFCLEtBQUssQ0FBQ0EsS0FBSyxDQUFDO0lBQ3RCO0lBQ0EsT0FBT0MsV0FBVyxDQUFDSixLQUFLLEVBQUVDLE1BQU0sRUFBRUUsS0FBSyxDQUFDO0VBQzFDO0FBQ0Y7QUFFQSxTQUFTQyxXQUFXQSxDQUNsQkosS0FBcUIsRUFDckJDLE1BQTRDLEVBQzVDRSxLQUFVLEVBQ007RUFDaEIsSUFBSUEsS0FBSyxDQUFDeUMsSUFBSSxLQUFLLFlBQVksRUFBRTtJQUMvQjtJQUNBO0lBQ0E7SUFDQSxPQUFPO01BQ0wsR0FBRzVDLEtBQUs7TUFDUmlDLFVBQVUsRUFBRUMsZ0JBQWdCLENBQUNsQyxLQUFLLEVBQUVDLE1BQU07SUFDNUMsQ0FBQztFQUNIO0VBQ0EsT0FBTztJQUNMLEdBQUdELEtBQUs7SUFDUlksSUFBSSxFQUFFO01BQ0osR0FBR1osS0FBSyxDQUFDWSxJQUFJO01BQ2IsQ0FBQ1gsTUFBTSxDQUFDVyxJQUFJLENBQUNXLEdBQUcsR0FBRztRQUNqQk8sSUFBSSxFQUFFN0IsTUFBTSxDQUFDVyxJQUFJLENBQUNrQixJQUFJO1FBQ3RCM0IsS0FBSztRQUNMNEIsU0FBUyxFQUFFOUIsTUFBTSxDQUFDVyxJQUFJLENBQUNtQixTQUFTO1FBQ2hDYyxXQUFXLEVBQUU1QyxNQUFNLENBQUNPLFFBQVEsQ0FBQ3FDLFdBQVcsb0JBQTNCNUMsTUFBTSxDQUFDTyxRQUFRLENBQUNxQyxXQUFXLENBQUcxQyxLQUFLO01BQ2xEO0lBQ0YsQ0FBQztJQUNEOEIsVUFBVSxFQUFFQyxnQkFBZ0IsQ0FBQ2xDLEtBQUssRUFBRUMsTUFBTTtFQUM1QyxDQUFDO0FBQ0g7QUFDQTtBQUNBLFNBQVNpQyxnQkFBZ0JBLENBQ3ZCbEMsS0FBcUIsRUFDckI4QyxlQUFxRCxFQUNyRDtFQUNBLE9BQU85QyxLQUFLLENBQUNpQyxVQUFVLENBQUNjLE1BQU0sQ0FDNUJDLGdCQUFnQixJQUNkQSxnQkFBZ0IsQ0FBQ3BDLElBQUksQ0FBQ1csR0FBRyxLQUFLdUIsZUFBZSxDQUFDbEMsSUFBSSxDQUFDVyxHQUFHLEtBQ3JEeUIsZ0JBQWdCLENBQUN6QyxJQUFJLEtBQUtWLGVBQWUsR0FDeENtRCxnQkFBZ0IsQ0FBQ3BDLElBQUksQ0FBQ0MsU0FBUyxLQUFLaUMsZUFBZSxDQUFDbEMsSUFBSSxDQUFDQyxTQUFTLEdBQ2xFbUMsZ0JBQWdCLENBQUNwQyxJQUFJLENBQUNrQixJQUFJLEdBQUdnQixlQUFlLENBQUNsQyxJQUFJLENBQUNrQixJQUFJLENBQzVELENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/types.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { NormalizedIndex } from '@data-client/normalizr';
|
|
2
2
|
import type { UpdateFunction, AbstractInstanceType } from '@data-client/normalizr';
|
|
3
3
|
import type { ErrorTypes } from '@data-client/normalizr';
|
|
4
|
-
import type { ActionTypes,
|
|
5
|
-
import { SET_TYPE } from './actionTypes.js';
|
|
4
|
+
import type { ActionTypes, SetResponseAction, OptimisticAction } from './actions.js';
|
|
6
5
|
import type { Dispatch, Middleware, MiddlewareAPI } from './middlewareTypes.js';
|
|
7
6
|
export type { AbstractInstanceType, UpdateFunction };
|
|
8
|
-
export type SetTypes = typeof SET_TYPE;
|
|
9
7
|
export type PK = string;
|
|
10
8
|
export interface State<T> {
|
|
11
9
|
readonly entities: {
|
|
@@ -36,7 +34,7 @@ export interface State<T> {
|
|
|
36
34
|
};
|
|
37
35
|
};
|
|
38
36
|
};
|
|
39
|
-
readonly optimistic: (
|
|
37
|
+
readonly optimistic: (SetResponseAction | OptimisticAction)[];
|
|
40
38
|
readonly lastReset: number;
|
|
41
39
|
}
|
|
42
40
|
export * from './actions.js';
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEhF,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC;AAErD,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AAExB,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG;YAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAA;SAAE,GAAG,SAAS,CAAC;KACxE,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;KACzD,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG;YACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;YAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;YAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;YAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;YAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;SACpD,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG;YAC5B,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG;gBACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;aAC5B,CAAC;SACH,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,cAAc,cAAc,CAAC;AAE7B,MAAM,WAAW,OAAO,CAAC,OAAO,GAAG,WAAW;IAC5C,aAAa,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;CACpC;AAED,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC"}
|
package/lib/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './actions.js';
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vcm1hbGl6ZWRJbmRleCB9IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHR5cGUge1xuICBVcGRhdGVGdW5jdGlvbixcbiAgQWJzdHJhY3RJbnN0YW5jZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHR5cGUgeyBFcnJvclR5cGVzIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uVHlwZXMsXG4gIFNldFJlc3BvbnNlQWN0aW9uLFxuICBPcHRpbWlzdGljQWN0aW9uLFxufSBmcm9tICcuL2FjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgTWlkZGxld2FyZSwgTWlkZGxld2FyZUFQSSB9IGZyb20gJy4vbWlkZGxld2FyZVR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBBYnN0cmFjdEluc3RhbmNlVHlwZSwgVXBkYXRlRnVuY3Rpb24gfTtcblxuZXhwb3J0IHR5cGUgUEsgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGU8VD4ge1xuICByZWFkb25seSBlbnRpdGllczoge1xuICAgIHJlYWRvbmx5IFtlbnRpdHlLZXk6IHN0cmluZ106IHsgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiBUIH0gfCB1bmRlZmluZWQ7XG4gIH07XG4gIHJlYWRvbmx5IGluZGV4ZXM6IE5vcm1hbGl6ZWRJbmRleDtcbiAgcmVhZG9ubHkgZW5kcG9pbnRzOiB7XG4gICAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93biB8IFBLW10gfCBQSyB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVhZG9ubHkgbWV0YToge1xuICAgIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHtcbiAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGVycm9yPzogRXJyb3JUeXBlcztcbiAgICAgIHJlYWRvbmx5IGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgcHJldkV4cGlyZXNBdD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGludmFsaWRhdGVkPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IGVycm9yUG9saWN5PzogJ2hhcmQnIHwgJ3NvZnQnIHwgdW5kZWZpbmVkO1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IGVudGl0eU1ldGE6IHtcbiAgICByZWFkb25seSBbZW50aXR5S2V5OiBzdHJpbmddOiB7XG4gICAgICByZWFkb25seSBbcGs6IHN0cmluZ106IHtcbiAgICAgICAgcmVhZG9ubHkgZGF0ZTogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IG9wdGltaXN0aWM6IChTZXRSZXNwb25zZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb24pW107XG4gIHJlYWRvbmx5IGxhc3RSZXNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZXI8QWN0aW9ucyA9IEFjdGlvblR5cGVzPiB7XG4gIGdldE1pZGRsZXdhcmUoKTogTWlkZGxld2FyZTxBY3Rpb25zPjtcbiAgY2xlYW51cCgpOiB2b2lkO1xuICBpbml0PzogKHN0YXRlOiBTdGF0ZTxhbnk+KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSB7IERpc3BhdGNoLCBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlQVBJIH07XG4iXSwibWFwcGluZ3MiOiJBQWlEQSxjQUFjLGNBQWM7QUFBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
package/package.json
CHANGED
package/src/actionTypes.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const FETCH_TYPE = 'rdc/fetch' as const;
|
|
2
2
|
export const SET_TYPE = 'rdc/set' as const;
|
|
3
|
+
export const SET_RESPONSE_TYPE = 'rdc/setresponse' as const;
|
|
3
4
|
export const OPTIMISTIC_TYPE = 'rdc/optimistic' as const;
|
|
4
5
|
export const RESET_TYPE = 'rdc/reset' as const;
|
|
5
6
|
export const SUBSCRIBE_TYPE = 'rdc/subscribe' as const;
|
package/src/actions.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
|
+
Denormalize,
|
|
2
3
|
EndpointInterface,
|
|
4
|
+
Queryable,
|
|
3
5
|
ResolveType,
|
|
4
6
|
UnknownError,
|
|
5
7
|
} from '@data-client/normalizr';
|
|
@@ -15,6 +17,7 @@ import type {
|
|
|
15
17
|
OPTIMISTIC_TYPE,
|
|
16
18
|
INVALIDATEALL_TYPE,
|
|
17
19
|
EXPIREALL_TYPE,
|
|
20
|
+
SET_RESPONSE_TYPE,
|
|
18
21
|
} from './actionTypes.js';
|
|
19
22
|
import type { EndpointUpdateFunction } from './controller/types.js';
|
|
20
23
|
|
|
@@ -27,33 +30,48 @@ type EndpointDefault = EndpointInterface & {
|
|
|
27
30
|
|
|
28
31
|
/* SET */
|
|
29
32
|
export interface SetMeta {
|
|
33
|
+
args: readonly any[];
|
|
34
|
+
fetchedAt: number;
|
|
35
|
+
date: number;
|
|
36
|
+
expiresAt: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface SetAction<S extends Queryable = any> {
|
|
40
|
+
type: typeof SET_TYPE;
|
|
41
|
+
schema: S;
|
|
42
|
+
meta: SetMeta;
|
|
43
|
+
value: Denormalize<S>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* setResponse */
|
|
47
|
+
export interface SetResponseMeta {
|
|
30
48
|
args: readonly any[];
|
|
31
49
|
key: string;
|
|
32
50
|
fetchedAt: number;
|
|
33
51
|
date: number;
|
|
34
52
|
expiresAt: number;
|
|
35
53
|
}
|
|
36
|
-
export interface
|
|
54
|
+
export interface SetResponseActionSuccess<
|
|
37
55
|
E extends EndpointAndUpdate<E> = EndpointDefault,
|
|
38
56
|
> {
|
|
39
|
-
type: typeof
|
|
57
|
+
type: typeof SET_RESPONSE_TYPE;
|
|
40
58
|
endpoint: E;
|
|
41
|
-
meta:
|
|
59
|
+
meta: SetResponseMeta;
|
|
42
60
|
payload: ResolveType<E>;
|
|
43
61
|
error?: false;
|
|
44
62
|
}
|
|
45
|
-
export interface
|
|
63
|
+
export interface SetResponseActionError<
|
|
46
64
|
E extends EndpointAndUpdate<E> = EndpointDefault,
|
|
47
65
|
> {
|
|
48
|
-
type: typeof
|
|
66
|
+
type: typeof SET_RESPONSE_TYPE;
|
|
49
67
|
endpoint: E;
|
|
50
|
-
meta:
|
|
68
|
+
meta: SetResponseMeta;
|
|
51
69
|
payload: UnknownError;
|
|
52
70
|
error: true;
|
|
53
71
|
}
|
|
54
|
-
export type
|
|
55
|
-
|
|
56
|
-
|
|
72
|
+
export type SetResponseAction<
|
|
73
|
+
E extends EndpointAndUpdate<E> = EndpointDefault,
|
|
74
|
+
> = SetResponseActionSuccess<E> | SetResponseActionError<E>;
|
|
57
75
|
|
|
58
76
|
/* FETCH */
|
|
59
77
|
export interface FetchMeta<A extends readonly any[] = readonly any[]> {
|
|
@@ -81,7 +99,7 @@ export interface OptimisticAction<
|
|
|
81
99
|
> {
|
|
82
100
|
type: typeof OPTIMISTIC_TYPE;
|
|
83
101
|
endpoint: E;
|
|
84
|
-
meta:
|
|
102
|
+
meta: SetResponseMeta;
|
|
85
103
|
error?: false;
|
|
86
104
|
}
|
|
87
105
|
|
|
@@ -144,6 +162,7 @@ export type ActionTypes =
|
|
|
144
162
|
| FetchAction
|
|
145
163
|
| OptimisticAction
|
|
146
164
|
| SetAction
|
|
165
|
+
| SetResponseAction
|
|
147
166
|
| SubscribeAction
|
|
148
167
|
| UnsubscribeAction
|
|
149
168
|
| InvalidateAction
|
|
@@ -5,7 +5,6 @@ import type {
|
|
|
5
5
|
Denormalize,
|
|
6
6
|
Queryable,
|
|
7
7
|
SchemaArgs,
|
|
8
|
-
NI,
|
|
9
8
|
} from '@data-client/normalizr';
|
|
10
9
|
import {
|
|
11
10
|
ExpiryStatus,
|
|
@@ -27,6 +26,7 @@ import createInvalidate from './createInvalidate.js';
|
|
|
27
26
|
import createInvalidateAll from './createInvalidateAll.js';
|
|
28
27
|
import createReset from './createReset.js';
|
|
29
28
|
import createSet from './createSet.js';
|
|
29
|
+
import createSetResponse from './createSetResponse.js';
|
|
30
30
|
import {
|
|
31
31
|
createUnsubscription,
|
|
32
32
|
createSubscription,
|
|
@@ -53,7 +53,7 @@ const unsetDispatch = (action: unknown): Promise<void> => {
|
|
|
53
53
|
);
|
|
54
54
|
};
|
|
55
55
|
const unsetState = (): State<unknown> => {
|
|
56
|
-
// This is only the value until it is set by the
|
|
56
|
+
// This is only the value until it is set by the DataProvider
|
|
57
57
|
/* istanbul ignore next */
|
|
58
58
|
return initialState;
|
|
59
59
|
};
|
|
@@ -183,9 +183,26 @@ export default class Controller<
|
|
|
183
183
|
resetEntireStore = (): Promise<void> => this.dispatch(createReset());
|
|
184
184
|
|
|
185
185
|
/**
|
|
186
|
-
*
|
|
186
|
+
* Sets value for the Queryable and args.
|
|
187
187
|
* @see https://dataclient.io/docs/api/Controller#set
|
|
188
188
|
*/
|
|
189
|
+
set = <S extends Queryable>(
|
|
190
|
+
schema: S,
|
|
191
|
+
...rest: readonly [...SchemaArgs<S>, any]
|
|
192
|
+
): Promise<void> => {
|
|
193
|
+
const value: Denormalize<S> = rest[rest.length - 1];
|
|
194
|
+
const action = createSet(schema, {
|
|
195
|
+
args: rest.slice(0, rest.length - 1) as SchemaArgs<S>,
|
|
196
|
+
value,
|
|
197
|
+
});
|
|
198
|
+
// TODO: reject with error if this fails in reducer
|
|
199
|
+
return this.dispatch(action);
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Sets response for the Endpoint and args.
|
|
204
|
+
* @see https://dataclient.io/docs/api/Controller#setResponse
|
|
205
|
+
*/
|
|
189
206
|
setResponse = <
|
|
190
207
|
E extends EndpointInterface & {
|
|
191
208
|
update?: EndpointUpdateFunction<E>;
|
|
@@ -195,7 +212,7 @@ export default class Controller<
|
|
|
195
212
|
...rest: readonly [...Parameters<E>, any]
|
|
196
213
|
): Promise<void> => {
|
|
197
214
|
const response: ResolveType<E> = rest[rest.length - 1];
|
|
198
|
-
const action =
|
|
215
|
+
const action = createSetResponse(endpoint, {
|
|
199
216
|
args: rest.slice(0, rest.length - 1) as Parameters<E>,
|
|
200
217
|
response,
|
|
201
218
|
});
|
|
@@ -203,7 +220,7 @@ export default class Controller<
|
|
|
203
220
|
};
|
|
204
221
|
|
|
205
222
|
/**
|
|
206
|
-
*
|
|
223
|
+
* Sets an error response for the Endpoint and args.
|
|
207
224
|
* @see https://dataclient.io/docs/api/Controller#setError
|
|
208
225
|
*/
|
|
209
226
|
setError = <
|
|
@@ -215,7 +232,7 @@ export default class Controller<
|
|
|
215
232
|
...rest: readonly [...Parameters<E>, Error]
|
|
216
233
|
): Promise<void> => {
|
|
217
234
|
const response: Error = rest[rest.length - 1];
|
|
218
|
-
const action =
|
|
235
|
+
const action = createSetResponse(endpoint, {
|
|
219
236
|
args: rest.slice(0, rest.length - 1) as Parameters<E>,
|
|
220
237
|
response,
|
|
221
238
|
error: true,
|
|
@@ -247,7 +264,7 @@ export default class Controller<
|
|
|
247
264
|
error?: false | undefined;
|
|
248
265
|
},
|
|
249
266
|
): Promise<void> => {
|
|
250
|
-
return this.dispatch(
|
|
267
|
+
return this.dispatch(createSetResponse(endpoint, meta as any));
|
|
251
268
|
};
|
|
252
269
|
|
|
253
270
|
/**
|
|
@@ -526,7 +543,7 @@ function entityExpiresAt(
|
|
|
526
543
|
readonly [pk: string]: {
|
|
527
544
|
readonly date: number;
|
|
528
545
|
readonly expiresAt: number;
|
|
529
|
-
readonly fetchedAt: number; // This is only the value until it is set by the
|
|
546
|
+
readonly fetchedAt: number; // This is only the value until it is set by the DataProvider
|
|
530
547
|
};
|
|
531
548
|
};
|
|
532
549
|
},
|
|
@@ -1,60 +1,22 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Queryable, SchemaArgs } from '@data-client/normalizr';
|
|
2
2
|
|
|
3
3
|
import ensurePojo from './ensurePojo.js';
|
|
4
|
-
import { EndpointUpdateFunction } from './types.js';
|
|
5
4
|
import { SET_TYPE } from '../actionTypes.js';
|
|
6
5
|
import type { SetAction, SetMeta } from '../types.js';
|
|
7
6
|
|
|
8
|
-
export default function createSet<
|
|
9
|
-
|
|
10
|
-
update?: EndpointUpdateFunction<E>;
|
|
11
|
-
},
|
|
12
|
-
>(
|
|
13
|
-
endpoint: E,
|
|
14
|
-
options: {
|
|
15
|
-
args: readonly [...Parameters<E>];
|
|
16
|
-
response: Error;
|
|
17
|
-
fetchedAt?: number;
|
|
18
|
-
error: true;
|
|
19
|
-
},
|
|
20
|
-
): SetAction<E>;
|
|
21
|
-
|
|
22
|
-
export default function createSet<
|
|
23
|
-
E extends EndpointInterface & {
|
|
24
|
-
update?: EndpointUpdateFunction<E>;
|
|
25
|
-
},
|
|
26
|
-
>(
|
|
27
|
-
endpoint: E,
|
|
28
|
-
options: {
|
|
29
|
-
args: readonly [...Parameters<E>];
|
|
30
|
-
response: ResolveType<E>;
|
|
31
|
-
fetchedAt?: number;
|
|
32
|
-
error?: false;
|
|
33
|
-
},
|
|
34
|
-
): SetAction<E>;
|
|
35
|
-
|
|
36
|
-
export default function createSet<
|
|
37
|
-
E extends EndpointInterface & {
|
|
38
|
-
update?: EndpointUpdateFunction<E>;
|
|
39
|
-
},
|
|
40
|
-
>(
|
|
41
|
-
endpoint: E,
|
|
7
|
+
export default function createSet<S extends Queryable>(
|
|
8
|
+
schema: S,
|
|
42
9
|
{
|
|
43
10
|
args,
|
|
44
11
|
fetchedAt,
|
|
45
|
-
|
|
46
|
-
error = false,
|
|
12
|
+
value,
|
|
47
13
|
}: {
|
|
48
|
-
args: readonly [...
|
|
49
|
-
|
|
14
|
+
args: readonly [...SchemaArgs<S>];
|
|
15
|
+
value: any;
|
|
50
16
|
fetchedAt?: number;
|
|
51
|
-
error?: boolean;
|
|
52
17
|
},
|
|
53
|
-
): SetAction<
|
|
54
|
-
const expiryLength: number =
|
|
55
|
-
error ?
|
|
56
|
-
endpoint.errorExpiryLength ?? 1000
|
|
57
|
-
: endpoint.dataExpiryLength ?? 60000;
|
|
18
|
+
): SetAction<S> {
|
|
19
|
+
const expiryLength: number = 60000;
|
|
58
20
|
/* istanbul ignore next */
|
|
59
21
|
if (process.env.NODE_ENV === 'development' && expiryLength < 0) {
|
|
60
22
|
throw new Error('Negative expiry length are not allowed.');
|
|
@@ -65,15 +27,13 @@ export default function createSet<
|
|
|
65
27
|
fetchedAt: fetchedAt ?? now,
|
|
66
28
|
date: now,
|
|
67
29
|
expiresAt: now + expiryLength,
|
|
68
|
-
key: endpoint.key(...args),
|
|
69
30
|
};
|
|
70
31
|
|
|
71
|
-
const action: SetAction<
|
|
32
|
+
const action: SetAction<S> = {
|
|
72
33
|
type: SET_TYPE,
|
|
73
|
-
|
|
74
|
-
|
|
34
|
+
value,
|
|
35
|
+
schema,
|
|
75
36
|
meta,
|
|
76
37
|
};
|
|
77
|
-
if (error) (action as any).error = true;
|
|
78
38
|
return action;
|
|
79
39
|
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { EndpointInterface, ResolveType } from '@data-client/normalizr';
|
|
2
|
+
|
|
3
|
+
import ensurePojo from './ensurePojo.js';
|
|
4
|
+
import { EndpointUpdateFunction } from './types.js';
|
|
5
|
+
import { SET_RESPONSE_TYPE } from '../actionTypes.js';
|
|
6
|
+
import type { SetResponseAction, SetResponseMeta } from '../types.js';
|
|
7
|
+
|
|
8
|
+
export default function createSetResponse<
|
|
9
|
+
E extends EndpointInterface & {
|
|
10
|
+
update?: EndpointUpdateFunction<E>;
|
|
11
|
+
},
|
|
12
|
+
>(
|
|
13
|
+
endpoint: E,
|
|
14
|
+
options: {
|
|
15
|
+
args: readonly [...Parameters<E>];
|
|
16
|
+
response: Error;
|
|
17
|
+
fetchedAt?: number;
|
|
18
|
+
error: true;
|
|
19
|
+
},
|
|
20
|
+
): SetResponseAction<E>;
|
|
21
|
+
|
|
22
|
+
export default function createSetResponse<
|
|
23
|
+
E extends EndpointInterface & {
|
|
24
|
+
update?: EndpointUpdateFunction<E>;
|
|
25
|
+
},
|
|
26
|
+
>(
|
|
27
|
+
endpoint: E,
|
|
28
|
+
options: {
|
|
29
|
+
args: readonly [...Parameters<E>];
|
|
30
|
+
response: ResolveType<E>;
|
|
31
|
+
fetchedAt?: number;
|
|
32
|
+
error?: false;
|
|
33
|
+
},
|
|
34
|
+
): SetResponseAction<E>;
|
|
35
|
+
|
|
36
|
+
export default function createSetResponse<
|
|
37
|
+
E extends EndpointInterface & {
|
|
38
|
+
update?: EndpointUpdateFunction<E>;
|
|
39
|
+
},
|
|
40
|
+
>(
|
|
41
|
+
endpoint: E,
|
|
42
|
+
{
|
|
43
|
+
args,
|
|
44
|
+
fetchedAt,
|
|
45
|
+
response,
|
|
46
|
+
error = false,
|
|
47
|
+
}: {
|
|
48
|
+
args: readonly [...Parameters<E>];
|
|
49
|
+
response: any;
|
|
50
|
+
fetchedAt?: number;
|
|
51
|
+
error?: boolean;
|
|
52
|
+
},
|
|
53
|
+
): SetResponseAction<E> {
|
|
54
|
+
const expiryLength: number =
|
|
55
|
+
error ?
|
|
56
|
+
endpoint.errorExpiryLength ?? 1000
|
|
57
|
+
: endpoint.dataExpiryLength ?? 60000;
|
|
58
|
+
/* istanbul ignore next */
|
|
59
|
+
if (process.env.NODE_ENV === 'development' && expiryLength < 0) {
|
|
60
|
+
throw new Error('Negative expiry length are not allowed.');
|
|
61
|
+
}
|
|
62
|
+
const now = Date.now();
|
|
63
|
+
const meta: SetResponseMeta = {
|
|
64
|
+
args: args.map(ensurePojo),
|
|
65
|
+
fetchedAt: fetchedAt ?? now,
|
|
66
|
+
date: now,
|
|
67
|
+
expiresAt: now + expiryLength,
|
|
68
|
+
key: endpoint.key(...args),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const action: SetResponseAction<E> = {
|
|
72
|
+
type: SET_RESPONSE_TYPE,
|
|
73
|
+
payload: response,
|
|
74
|
+
endpoint: endpoint,
|
|
75
|
+
meta,
|
|
76
|
+
};
|
|
77
|
+
if (error) (action as any).error = true;
|
|
78
|
+
return action;
|
|
79
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -41,6 +41,7 @@ export type {
|
|
|
41
41
|
} from './controller/Controller.js';
|
|
42
42
|
export { default as createFetch } from './controller/createFetch.js';
|
|
43
43
|
export { default as createSet } from './controller/createSet.js';
|
|
44
|
+
export { default as createSetResponse } from './controller/createSetResponse.js';
|
|
44
45
|
|
|
45
46
|
export * from './controller/types.js';
|
|
46
47
|
export * as actionTypes from './actionTypes.js';
|
|
@@ -94,8 +94,10 @@ export default class DevToolsManager implements Manager {
|
|
|
94
94
|
(window as any).__REDUX_DEVTOOLS_EXTENSION__ &&
|
|
95
95
|
(window as any).__REDUX_DEVTOOLS_EXTENSION__.connect({
|
|
96
96
|
...DEFAULT_CONFIG,
|
|
97
|
-
config,
|
|
97
|
+
...config,
|
|
98
98
|
});
|
|
99
|
+
// we cut it in half so we should double so we don't lose
|
|
100
|
+
if (config?.maxAge) this.maxBufferLength = config.maxAge * 2;
|
|
99
101
|
if (process.env.NODE_ENV !== 'production' && this.devTools) {
|
|
100
102
|
this.devTools.subscribe((msg: any) => {
|
|
101
103
|
switch (msg.type) {
|
|
@@ -150,7 +152,7 @@ export default class DevToolsManager implements Manager {
|
|
|
150
152
|
|
|
151
153
|
handleAction(action: any, state: any) {
|
|
152
154
|
if (this.started) {
|
|
153
|
-
this.devTools.send(action, state
|
|
155
|
+
this.devTools.send(action, state);
|
|
154
156
|
} else {
|
|
155
157
|
// avoid this getting too big in case this is long running
|
|
156
158
|
// we cut in half so we aren't constantly reallocating
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SET_RESPONSE_TYPE } from '../actionTypes.js';
|
|
2
2
|
import Controller from '../controller/Controller.js';
|
|
3
3
|
import { UnknownError } from '../index.js';
|
|
4
4
|
import { ActionTypes, Manager } from '../types.js';
|
|
@@ -16,7 +16,7 @@ export default class LogoutManager implements Manager {
|
|
|
16
16
|
this.middleware = controller => next => async action => {
|
|
17
17
|
await next(action);
|
|
18
18
|
if (
|
|
19
|
-
action.type ===
|
|
19
|
+
action.type === SET_RESPONSE_TYPE &&
|
|
20
20
|
action.error &&
|
|
21
21
|
this.shouldLogout(action.payload)
|
|
22
22
|
) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SET_RESPONSE_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js';
|
|
2
2
|
import Controller from '../controller/Controller.js';
|
|
3
|
-
import
|
|
3
|
+
import createSetResponse from '../controller/createSetResponse.js';
|
|
4
4
|
import RIC from '../state/RIC.js';
|
|
5
5
|
import type {
|
|
6
6
|
FetchAction,
|
|
@@ -8,7 +8,7 @@ import type {
|
|
|
8
8
|
ActionTypes,
|
|
9
9
|
MiddlewareAPI,
|
|
10
10
|
Middleware,
|
|
11
|
-
|
|
11
|
+
SetResponseAction,
|
|
12
12
|
} from '../types.js';
|
|
13
13
|
|
|
14
14
|
export class ResetError extends Error {
|
|
@@ -60,7 +60,7 @@ export default class NetworkManager implements Manager {
|
|
|
60
60
|
return next(action);
|
|
61
61
|
}
|
|
62
62
|
return Promise.resolve();
|
|
63
|
-
case
|
|
63
|
+
case SET_RESPONSE_TYPE:
|
|
64
64
|
// only set after new state is computed
|
|
65
65
|
return next(action).then(() => {
|
|
66
66
|
if (action.meta.key in this.fetched) {
|
|
@@ -70,7 +70,7 @@ export default class NetworkManager implements Manager {
|
|
|
70
70
|
// processing errors result in state meta having error, so we should reject the promise
|
|
71
71
|
if (error) {
|
|
72
72
|
this.handleSet(
|
|
73
|
-
|
|
73
|
+
createSetResponse(action.endpoint, {
|
|
74
74
|
args: action.meta.args,
|
|
75
75
|
response: error,
|
|
76
76
|
fetchedAt: action.meta.fetchedAt,
|
|
@@ -228,7 +228,7 @@ export default class NetworkManager implements Manager {
|
|
|
228
228
|
*
|
|
229
229
|
* Will resolve the promise associated with set key.
|
|
230
230
|
*/
|
|
231
|
-
protected handleSet(action:
|
|
231
|
+
protected handleSet(action: SetResponseAction) {
|
|
232
232
|
// this can still turn out to be untrue since this is async
|
|
233
233
|
if (action.meta.key in this.fetched) {
|
|
234
234
|
let promiseHandler: (value?: any) => void;
|