@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.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +89 -15
  3. package/dist/index.umd.min.js +1 -1
  4. package/legacy/actionTypes.js +2 -1
  5. package/legacy/actions.js +1 -1
  6. package/legacy/controller/Controller.js +21 -7
  7. package/legacy/controller/createSet.js +7 -11
  8. package/legacy/controller/createSetResponse.js +32 -0
  9. package/legacy/index.js +2 -1
  10. package/legacy/manager/DevtoolsManager.js +5 -5
  11. package/legacy/manager/LogoutManager.js +3 -3
  12. package/legacy/manager/NetworkManager.js +5 -5
  13. package/legacy/manager/PollingSubscription.js +1 -1
  14. package/legacy/manager/SubscriptionManager.js +1 -1
  15. package/legacy/next/index.js +1 -1
  16. package/legacy/state/reducer/createReducer.js +6 -3
  17. package/legacy/state/reducer/fetchReducer.js +1 -1
  18. package/legacy/state/reducer/setReducer.js +7 -85
  19. package/legacy/state/reducer/setResponseReducer.js +107 -0
  20. package/legacy/types.js +1 -1
  21. package/lib/actionTypes.d.ts +1 -0
  22. package/lib/actionTypes.d.ts.map +1 -1
  23. package/lib/actionTypes.js +2 -1
  24. package/lib/actions.d.ts +23 -11
  25. package/lib/actions.d.ts.map +1 -1
  26. package/lib/actions.js +1 -1
  27. package/lib/controller/Controller.d.ts +7 -2
  28. package/lib/controller/Controller.d.ts.map +1 -1
  29. package/lib/controller/Controller.js +21 -7
  30. package/lib/controller/createSet.d.ts +5 -17
  31. package/lib/controller/createSet.d.ts.map +1 -1
  32. package/lib/controller/createSet.js +7 -11
  33. package/lib/controller/createSetResponse.d.ts +20 -0
  34. package/lib/controller/createSetResponse.d.ts.map +1 -0
  35. package/lib/controller/createSetResponse.js +32 -0
  36. package/lib/index.d.ts +1 -0
  37. package/lib/index.d.ts.map +1 -1
  38. package/lib/index.js +2 -1
  39. package/lib/manager/DevtoolsManager.d.ts.map +1 -1
  40. package/lib/manager/DevtoolsManager.js +5 -3
  41. package/lib/manager/LogoutManager.js +3 -3
  42. package/lib/manager/NetworkManager.d.ts +2 -2
  43. package/lib/manager/NetworkManager.d.ts.map +1 -1
  44. package/lib/manager/NetworkManager.js +5 -5
  45. package/lib/manager/PollingSubscription.js +1 -1
  46. package/lib/manager/SubscriptionManager.js +1 -1
  47. package/lib/next/index.js +1 -1
  48. package/lib/state/reducer/createReducer.d.ts.map +1 -1
  49. package/lib/state/reducer/createReducer.js +6 -3
  50. package/lib/state/reducer/expireReducer.d.ts +1 -1
  51. package/lib/state/reducer/fetchReducer.js +1 -1
  52. package/lib/state/reducer/invalidateReducer.d.ts +1 -1
  53. package/lib/state/reducer/setReducer.d.ts +2 -3
  54. package/lib/state/reducer/setReducer.d.ts.map +1 -1
  55. package/lib/state/reducer/setReducer.js +7 -90
  56. package/lib/state/reducer/setResponseReducer.d.ts +4 -0
  57. package/lib/state/reducer/setResponseReducer.d.ts.map +1 -0
  58. package/lib/state/reducer/setResponseReducer.js +112 -0
  59. package/lib/types.d.ts +2 -4
  60. package/lib/types.d.ts.map +1 -1
  61. package/lib/types.js +1 -1
  62. package/package.json +1 -1
  63. package/src/actionTypes.ts +1 -0
  64. package/src/actions.ts +29 -10
  65. package/src/controller/Controller.ts +25 -8
  66. package/src/controller/createSet.ts +11 -51
  67. package/src/controller/createSetResponse.ts +79 -0
  68. package/src/index.ts +1 -0
  69. package/src/manager/DevtoolsManager.ts +4 -2
  70. package/src/manager/LogoutManager.ts +2 -2
  71. package/src/manager/NetworkManager.ts +6 -6
  72. package/src/manager/__tests__/logoutManager.ts +5 -5
  73. package/src/manager/__tests__/networkManager.ts +6 -6
  74. package/src/manager/__tests__/subscriptionManager.ts +2 -2
  75. package/src/state/__tests__/reducer.ts +64 -25
  76. package/src/state/reducer/createReducer.ts +6 -1
  77. package/src/state/reducer/fetchReducer.ts +2 -2
  78. package/src/state/reducer/setReducer.ts +9 -121
  79. package/src/state/reducer/setResponseReducer.ts +151 -0
  80. package/src/types.ts +6 -5
  81. package/ts3.4/actionTypes.d.ts +1 -0
  82. package/ts3.4/actions.d.ts +23 -11
  83. package/ts3.4/controller/Controller.d.ts +10 -2
  84. package/ts3.4/controller/createSet.d.ts +5 -19
  85. package/ts3.4/controller/createSetResponse.d.ts +24 -0
  86. package/ts3.4/index.d.ts +1 -0
  87. package/ts3.4/manager/NetworkManager.d.ts +2 -2
  88. package/ts3.4/state/reducer/expireReducer.d.ts +1 -1
  89. package/ts3.4/state/reducer/invalidateReducer.d.ts +1 -1
  90. package/ts3.4/state/reducer/setReducer.d.ts +2 -3
  91. package/ts3.4/state/reducer/setResponseReducer.d.ts +4 -0
  92. 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/LihlcnJvciksXG4gICAgICB9LFxuICAgIH0sXG4gICAgb3B0aW1pc3RpYzogZmlsdGVyT3B0aW1pc3RpYyhzdGF0ZSwgYWN0aW9uKSxcbiAgfTtcbn1cbi8qKiBGaWx0ZXIgYWxsIHJlcXVlc3RzIHdpdGggc2FtZSBzZXJpYWxpemF0aW9uIHRoYXQgZGlkIG5vdCBzdGFydCBhZnRlciB0aGUgcmVzb2x2aW5nIHJlcXVlc3QgKi9cbmZ1bmN0aW9uIGZpbHRlck9wdGltaXN0aWMoXG4gIHN0YXRlOiBTdGF0ZTx1bmtub3duPixcbiAgcmVzb2x2aW5nQWN0aW9uOiBTZXRSZXNwb25zZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb24sXG4pIHtcbiAgcmV0dXJuIHN0YXRlLm9wdGltaXN0aWMuZmlsdGVyKFxuICAgIG9wdGltaXN0aWNBY3Rpb24gPT5cbiAgICAgIG9wdGltaXN0aWNBY3Rpb24ubWV0YS5rZXkgIT09IHJlc29sdmluZ0FjdGlvbi5tZXRhLmtleSB8fFxuICAgICAgKG9wdGltaXN0aWNBY3Rpb24udHlwZSA9PT0gT1BUSU1JU1RJQ19UWVBFID9cbiAgICAgICAgb3B0aW1pc3RpY0FjdGlvbi5tZXRhLmZldGNoZWRBdCAhPT0gcmVzb2x2aW5nQWN0aW9uLm1ldGEuZmV0Y2hlZEF0XG4gICAgICA6IG9wdGltaXN0aWNBY3Rpb24ubWV0YS5kYXRlID4gcmVzb2x2aW5nQWN0aW9uLm1ldGEuZGF0ZSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSx3QkFBd0I7QUFFbEQsU0FBU0MsZUFBZSxRQUFRLHNCQUFzQjtBQUN0RCxPQUFPQyxlQUFlLE1BQU0scUNBQXFDO0FBUWpFLE9BQU8sU0FBU0Msa0JBQWtCQSxDQUNoQ0MsS0FBcUIsRUFDckJDLE1BQTRDLEVBQzVDQyxVQUFzQixFQUN0QjtFQUNBLElBQUlELE1BQU0sQ0FBQ0UsS0FBSyxFQUFFO0lBQ2hCLE9BQU9DLFdBQVcsQ0FBQ0osS0FBSyxFQUFFQyxNQUFNLEVBQUVBLE1BQU0sQ0FBQ0ksT0FBTyxDQUFDO0VBQ25EO0VBQ0EsSUFBSTtJQUFBLElBQUFDLHFCQUFBO0lBQ0YsSUFBSUQsT0FBWTtJQUNoQjtJQUNBLElBQUlKLE1BQU0sQ0FBQ00sSUFBSSxLQUFLVixlQUFlLEVBQUU7TUFDbkM7TUFDQTtNQUNBLElBQUksQ0FBQ0ksTUFBTSxDQUFDTyxRQUFRLENBQUNDLHFCQUFxQixFQUFFLE9BQU9ULEtBQUs7TUFDeEQsSUFBSTtRQUNGO1FBQ0FLLE9BQU8sR0FBR0osTUFBTSxDQUFDTyxRQUFRLENBQUNDLHFCQUFxQixDQUFDQyxJQUFJLENBQ2xEVCxNQUFNLENBQUNPLFFBQVEsRUFDZk4sVUFBVSxDQUFDUyxRQUFRLENBQUNYLEtBQUssRUFBRUMsTUFBTSxDQUFDVyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxFQUNqRCxHQUFHWixNQUFNLENBQUNXLElBQUks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
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, SetAction, OptimisticAction } from './actions.js';
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: (SetAction | OptimisticAction)[];
37
+ readonly optimistic: (SetResponseAction | OptimisticAction)[];
40
38
  readonly lastReset: number;
41
39
  }
42
40
  export * from './actions.js';
@@ -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,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEhF,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC;AAEvC,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,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC;IACtD,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"}
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vcm1hbGl6ZWRJbmRleCB9IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHR5cGUge1xuICBVcGRhdGVGdW5jdGlvbixcbiAgQWJzdHJhY3RJbnN0YW5jZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHR5cGUgeyBFcnJvclR5cGVzIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHsgQWN0aW9uVHlwZXMsIFNldEFjdGlvbiwgT3B0aW1pc3RpY0FjdGlvbiB9IGZyb20gJy4vYWN0aW9ucy5qcyc7XG5pbXBvcnQgeyBTRVRfVFlQRSB9IGZyb20gJy4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgTWlkZGxld2FyZSwgTWlkZGxld2FyZUFQSSB9IGZyb20gJy4vbWlkZGxld2FyZVR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBBYnN0cmFjdEluc3RhbmNlVHlwZSwgVXBkYXRlRnVuY3Rpb24gfTtcblxuZXhwb3J0IHR5cGUgU2V0VHlwZXMgPSB0eXBlb2YgU0VUX1RZUEU7XG5cbmV4cG9ydCB0eXBlIFBLID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlPFQ+IHtcbiAgcmVhZG9ubHkgZW50aXRpZXM6IHtcbiAgICByZWFkb25seSBbZW50aXR5S2V5OiBzdHJpbmddOiB7IHJlYWRvbmx5IFtwazogc3RyaW5nXTogVCB9IHwgdW5kZWZpbmVkO1xuICB9O1xuICByZWFkb25seSBpbmRleGVzOiBOb3JtYWxpemVkSW5kZXg7XG4gIHJlYWRvbmx5IGVuZHBvaW50czoge1xuICAgIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHVua25vd24gfCBQS1tdIHwgUEsgfCB1bmRlZmluZWQ7XG4gIH07XG4gIHJlYWRvbmx5IG1ldGE6IHtcbiAgICByZWFkb25seSBba2V5OiBzdHJpbmddOiB7XG4gICAgICByZWFkb25seSBkYXRlOiBudW1iZXI7XG4gICAgICByZWFkb25seSBlcnJvcj86IEVycm9yVHlwZXM7XG4gICAgICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IHByZXZFeHBpcmVzQXQ/OiBudW1iZXI7XG4gICAgICByZWFkb25seSBpbnZhbGlkYXRlZD86IGJvb2xlYW47XG4gICAgICByZWFkb25seSBlcnJvclBvbGljeT86ICdoYXJkJyB8ICdzb2Z0JyB8IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9O1xuICByZWFkb25seSBlbnRpdHlNZXRhOiB7XG4gICAgcmVhZG9ubHkgW2VudGl0eUtleTogc3RyaW5nXToge1xuICAgICAgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xuICByZWFkb25seSBvcHRpbWlzdGljOiAoU2V0QWN0aW9uIHwgT3B0aW1pc3RpY0FjdGlvbilbXTtcbiAgcmVhZG9ubHkgbGFzdFJlc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlcjxBY3Rpb25zID0gQWN0aW9uVHlwZXM+IHtcbiAgZ2V0TWlkZGxld2FyZSgpOiBNaWRkbGV3YXJlPEFjdGlvbnM+O1xuICBjbGVhbnVwKCk6IHZvaWQ7XG4gIGluaXQ/OiAoc3RhdGU6IFN0YXRlPGFueT4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIHsgRGlzcGF0Y2gsIE1pZGRsZXdhcmUsIE1pZGRsZXdhcmVBUEkgfTtcbiJdLCJtYXBwaW5ncyI6IkFBZ0RBLGNBQWMsY0FBYztBQUFDIiwiaWdub3JlTGlzdCI6W119
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vcm1hbGl6ZWRJbmRleCB9IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHR5cGUge1xuICBVcGRhdGVGdW5jdGlvbixcbiAgQWJzdHJhY3RJbnN0YW5jZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHR5cGUgeyBFcnJvclR5cGVzIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uVHlwZXMsXG4gIFNldFJlc3BvbnNlQWN0aW9uLFxuICBPcHRpbWlzdGljQWN0aW9uLFxufSBmcm9tICcuL2FjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgTWlkZGxld2FyZSwgTWlkZGxld2FyZUFQSSB9IGZyb20gJy4vbWlkZGxld2FyZVR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBBYnN0cmFjdEluc3RhbmNlVHlwZSwgVXBkYXRlRnVuY3Rpb24gfTtcblxuZXhwb3J0IHR5cGUgUEsgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGU8VD4ge1xuICByZWFkb25seSBlbnRpdGllczoge1xuICAgIHJlYWRvbmx5IFtlbnRpdHlLZXk6IHN0cmluZ106IHsgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiBUIH0gfCB1bmRlZmluZWQ7XG4gIH07XG4gIHJlYWRvbmx5IGluZGV4ZXM6IE5vcm1hbGl6ZWRJbmRleDtcbiAgcmVhZG9ubHkgZW5kcG9pbnRzOiB7XG4gICAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93biB8IFBLW10gfCBQSyB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVhZG9ubHkgbWV0YToge1xuICAgIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHtcbiAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGVycm9yPzogRXJyb3JUeXBlcztcbiAgICAgIHJlYWRvbmx5IGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgcHJldkV4cGlyZXNBdD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGludmFsaWRhdGVkPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IGVycm9yUG9saWN5PzogJ2hhcmQnIHwgJ3NvZnQnIHwgdW5kZWZpbmVkO1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IGVudGl0eU1ldGE6IHtcbiAgICByZWFkb25seSBbZW50aXR5S2V5OiBzdHJpbmddOiB7XG4gICAgICByZWFkb25seSBbcGs6IHN0cmluZ106IHtcbiAgICAgICAgcmVhZG9ubHkgZGF0ZTogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IG9wdGltaXN0aWM6IChTZXRSZXNwb25zZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb24pW107XG4gIHJlYWRvbmx5IGxhc3RSZXNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZXI8QWN0aW9ucyA9IEFjdGlvblR5cGVzPiB7XG4gIGdldE1pZGRsZXdhcmUoKTogTWlkZGxld2FyZTxBY3Rpb25zPjtcbiAgY2xlYW51cCgpOiB2b2lkO1xuICBpbml0PzogKHN0YXRlOiBTdGF0ZTxhbnk+KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSB7IERpc3BhdGNoLCBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlQVBJIH07XG4iXSwibWFwcGluZ3MiOiJBQWlEQSxjQUFjLGNBQWM7QUFBQyIsImlnbm9yZUxpc3QiOltdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-client/core",
3
- "version": "0.12.3",
3
+ "version": "0.13.0",
4
4
  "description": "High performance mutable data framework.",
5
5
  "sideEffects": false,
6
6
  "main": "dist/index.js",
@@ -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 SetActionSuccess<
54
+ export interface SetResponseActionSuccess<
37
55
  E extends EndpointAndUpdate<E> = EndpointDefault,
38
56
  > {
39
- type: typeof SET_TYPE;
57
+ type: typeof SET_RESPONSE_TYPE;
40
58
  endpoint: E;
41
- meta: SetMeta;
59
+ meta: SetResponseMeta;
42
60
  payload: ResolveType<E>;
43
61
  error?: false;
44
62
  }
45
- export interface SetActionError<
63
+ export interface SetResponseActionError<
46
64
  E extends EndpointAndUpdate<E> = EndpointDefault,
47
65
  > {
48
- type: typeof SET_TYPE;
66
+ type: typeof SET_RESPONSE_TYPE;
49
67
  endpoint: E;
50
- meta: SetMeta;
68
+ meta: SetResponseMeta;
51
69
  payload: UnknownError;
52
70
  error: true;
53
71
  }
54
- export type SetAction<E extends EndpointAndUpdate<E> = EndpointDefault> =
55
- | SetActionSuccess<E>
56
- | SetActionError<E>;
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: SetMeta;
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 CacheProvider
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
- * Stores response in cache for given Endpoint and args.
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 = createSet(endpoint, {
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
- * Stores the result of Endpoint and args as the error provided.
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 = createSet(endpoint, {
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(createSet(endpoint, meta as any));
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 CacheProvider
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 { EndpointInterface, ResolveType } from '@data-client/normalizr';
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
- 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
- ): 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
- response,
46
- error = false,
12
+ value,
47
13
  }: {
48
- args: readonly [...Parameters<E>];
49
- response: any;
14
+ args: readonly [...SchemaArgs<S>];
15
+ value: any;
50
16
  fetchedAt?: number;
51
- error?: boolean;
52
17
  },
53
- ): SetAction<E> {
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<E> = {
32
+ const action: SetAction<S> = {
72
33
  type: SET_TYPE,
73
- payload: response,
74
- endpoint: endpoint,
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, undefined, 'RDC');
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 { SET_TYPE } from '../actionTypes.js';
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 === SET_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 { SET_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js';
1
+ import { SET_RESPONSE_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js';
2
2
  import Controller from '../controller/Controller.js';
3
- import createSet from '../controller/createSet.js';
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
- SetAction,
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 SET_TYPE:
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
- createSet(action.endpoint, {
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: SetAction) {
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;