@data-client/core 0.14.13 → 0.14.16

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 (64) hide show
  1. package/dist/index.js +62 -40
  2. package/dist/index.umd.min.js +1 -1
  3. package/legacy/actionTypes.js +23 -12
  4. package/legacy/actions.js +1 -1
  5. package/legacy/controller/actions/createExpireAll.js +3 -3
  6. package/legacy/controller/actions/createFetch.js +3 -3
  7. package/legacy/controller/actions/createInvalidate.js +3 -3
  8. package/legacy/controller/actions/createInvalidateAll.js +3 -3
  9. package/legacy/controller/actions/createOptimistic.js +3 -3
  10. package/legacy/controller/actions/createReset.js +3 -3
  11. package/legacy/controller/actions/createSet.js +3 -3
  12. package/legacy/controller/actions/createSetResponse.js +3 -3
  13. package/legacy/controller/actions/createSubscription.js +4 -4
  14. package/legacy/manager/LogoutManager.js +3 -3
  15. package/legacy/manager/NetworkManager.js +6 -6
  16. package/legacy/manager/SubscriptionManager.js +4 -4
  17. package/legacy/state/reducer/createReducer.js +11 -11
  18. package/legacy/state/reducer/invalidateReducer.js +3 -3
  19. package/legacy/state/reducer/setResponseReducer.js +4 -4
  20. package/lib/actionTypes.d.ts +11 -0
  21. package/lib/actionTypes.d.ts.map +1 -1
  22. package/lib/actionTypes.js +23 -12
  23. package/lib/actions.d.ts +12 -12
  24. package/lib/actions.d.ts.map +1 -1
  25. package/lib/actions.js +1 -1
  26. package/lib/controller/actions/createExpireAll.js +3 -3
  27. package/lib/controller/actions/createFetch.js +3 -3
  28. package/lib/controller/actions/createInvalidate.js +3 -3
  29. package/lib/controller/actions/createInvalidateAll.js +3 -3
  30. package/lib/controller/actions/createOptimistic.js +3 -3
  31. package/lib/controller/actions/createReset.js +3 -3
  32. package/lib/controller/actions/createSet.js +3 -3
  33. package/lib/controller/actions/createSetResponse.js +3 -3
  34. package/lib/controller/actions/createSubscription.js +4 -4
  35. package/lib/manager/LogoutManager.js +3 -3
  36. package/lib/manager/NetworkManager.js +6 -6
  37. package/lib/manager/SubscriptionManager.js +4 -4
  38. package/lib/state/reducer/createReducer.js +11 -11
  39. package/lib/state/reducer/invalidateReducer.js +3 -3
  40. package/lib/state/reducer/setResponseReducer.js +4 -4
  41. package/package.json +2 -2
  42. package/src/actionTypes.ts +23 -11
  43. package/src/actions.ts +22 -22
  44. package/src/controller/actions/createExpireAll.ts +2 -2
  45. package/src/controller/actions/createFetch.ts +2 -2
  46. package/src/controller/actions/createInvalidate.ts +2 -2
  47. package/src/controller/actions/createInvalidateAll.ts +2 -2
  48. package/src/controller/actions/createOptimistic.ts +2 -2
  49. package/src/controller/actions/createReset.ts +2 -2
  50. package/src/controller/actions/createSet.ts +2 -2
  51. package/src/controller/actions/createSetResponse.ts +2 -2
  52. package/src/controller/actions/createSubscription.ts +3 -3
  53. package/src/manager/LogoutManager.ts +2 -2
  54. package/src/manager/NetworkManager.ts +5 -5
  55. package/src/manager/SubscriptionManager.ts +3 -3
  56. package/src/manager/__tests__/logoutManager.ts +3 -3
  57. package/src/manager/__tests__/networkManager.ts +6 -6
  58. package/src/manager/__tests__/subscriptionManager.ts +4 -4
  59. package/src/state/__tests__/reducer.ts +22 -22
  60. package/src/state/reducer/createReducer.ts +18 -18
  61. package/src/state/reducer/invalidateReducer.ts +2 -2
  62. package/src/state/reducer/setResponseReducer.ts +3 -3
  63. package/ts3.4/actionTypes.d.ts +11 -0
  64. package/ts3.4/actions.d.ts +12 -12
@@ -1,4 +1,4 @@
1
- import { INVALIDATE_TYPE } from '../../actionTypes.js';
1
+ import { INVALIDATE } from '../../actionTypes.js';
2
2
  export function invalidateReducer(state, action) {
3
3
  const endpoints = {
4
4
  ...state.endpoints
@@ -16,7 +16,7 @@ export function invalidateReducer(state, action) {
16
16
  delete itemMeta.error;
17
17
  meta[key] = itemMeta;
18
18
  };
19
- if (action.type === INVALIDATE_TYPE) {
19
+ if (action.type === INVALIDATE) {
20
20
  invalidateKey(action.key);
21
21
  } else {
22
22
  Object.keys(endpoints).forEach(key => {
@@ -31,4 +31,4 @@ export function invalidateReducer(state, action) {
31
31
  meta
32
32
  };
33
33
  }
34
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFX1RZUEUiLCJpbnZhbGlkYXRlUmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwiZW5kcG9pbnRzIiwibWV0YSIsImludmFsaWRhdGVLZXkiLCJrZXkiLCJpdGVtTWV0YSIsImV4cGlyZXNBdCIsImludmFsaWRhdGVkIiwiZXJyb3IiLCJ0eXBlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJ0ZXN0S2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3JlZHVjZXIvaW52YWxpZGF0ZVJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU5WQUxJREFURV9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBTdGF0ZSxcbiAgSW52YWxpZGF0ZUFsbEFjdGlvbixcbiAgSW52YWxpZGF0ZUFjdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW52YWxpZGF0ZVJlZHVjZXIoXG4gIHN0YXRlOiBTdGF0ZTx1bmtub3duPixcbiAgYWN0aW9uOiBJbnZhbGlkYXRlQWN0aW9uIHwgSW52YWxpZGF0ZUFsbEFjdGlvbixcbikge1xuICBjb25zdCBlbmRwb2ludHMgPSB7IC4uLnN0YXRlLmVuZHBvaW50cyB9O1xuICBjb25zdCBtZXRhID0geyAuLi5zdGF0ZS5tZXRhIH07XG4gIGNvbnN0IGludmFsaWRhdGVLZXkgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICBkZWxldGUgZW5kcG9pbnRzW2tleV07XG4gICAgY29uc3QgaXRlbU1ldGEgPSB7XG4gICAgICAuLi5tZXRhW2tleV0sXG4gICAgICBleHBpcmVzQXQ6IDAsXG4gICAgICBpbnZhbGlkYXRlZDogdHJ1ZSxcbiAgICB9O1xuICAgIGRlbGV0ZSBpdGVtTWV0YS5lcnJvcjtcbiAgICBtZXRhW2tleV0gPSBpdGVtTWV0YTtcbiAgfTtcbiAgaWYgKGFjdGlvbi50eXBlID09PSBJTlZBTElEQVRFX1RZUEUpIHtcbiAgICBpbnZhbGlkYXRlS2V5KGFjdGlvbi5rZXkpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5rZXlzKGVuZHBvaW50cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGFjdGlvbi50ZXN0S2V5KGtleSkpIHtcbiAgICAgICAgaW52YWxpZGF0ZUtleShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlbmRwb2ludHMsXG4gICAgbWV0YSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZUFBZSxRQUFRLHNCQUFzQjtBQU90RCxPQUFPLFNBQVNDLGlCQUFpQkEsQ0FDL0JDLEtBQXFCLEVBQ3JCQyxNQUE4QyxFQUM5QztFQUNBLE1BQU1DLFNBQVMsR0FBRztJQUFFLEdBQUdGLEtBQUssQ0FBQ0U7RUFBVSxDQUFDO0VBQ3hDLE1BQU1DLElBQUksR0FBRztJQUFFLEdBQUdILEtBQUssQ0FBQ0c7RUFBSyxDQUFDO0VBQzlCLE1BQU1DLGFBQWEsR0FBSUMsR0FBVyxJQUFLO0lBQ3JDLE9BQU9ILFNBQVMsQ0FBQ0csR0FBRyxDQUFDO0lBQ3JCLE1BQU1DLFFBQVEsR0FBRztNQUNmLEdBQUdILElBQUksQ0FBQ0UsR0FBRyxDQUFDO01BQ1pFLFNBQVMsRUFBRSxDQUFDO01BQ1pDLFdBQVcsRUFBRTtJQUNmLENBQUM7SUFDRCxPQUFPRixRQUFRLENBQUNHLEtBQUs7SUFDckJOLElBQUksQ0FBQ0UsR0FBRyxDQUFDLEdBQUdDLFFBQVE7RUFDdEIsQ0FBQztFQUNELElBQUlMLE1BQU0sQ0FBQ1MsSUFBSSxLQUFLWixlQUFlLEVBQUU7SUFDbkNNLGFBQWEsQ0FBQ0gsTUFBTSxDQUFDSSxHQUFHLENBQUM7RUFDM0IsQ0FBQyxNQUFNO0lBQ0xNLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDVixTQUFTLENBQUMsQ0FBQ1csT0FBTyxDQUFDUixHQUFHLElBQUk7TUFDcEMsSUFBSUosTUFBTSxDQUFDYSxPQUFPLENBQUNULEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCRCxhQUFhLENBQUNDLEdBQUcsQ0FBQztNQUNwQjtJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBTztJQUNMLEdBQUdMLEtBQUs7SUFDUkUsU0FBUztJQUNUQztFQUNGLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFIiwiaW52YWxpZGF0ZVJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsImVuZHBvaW50cyIsIm1ldGEiLCJpbnZhbGlkYXRlS2V5Iiwia2V5IiwiaXRlbU1ldGEiLCJleHBpcmVzQXQiLCJpbnZhbGlkYXRlZCIsImVycm9yIiwidHlwZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwidGVzdEtleSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9yZWR1Y2VyL2ludmFsaWRhdGVSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOVkFMSURBVEUgfSBmcm9tICcuLi8uLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0YXRlLFxuICBJbnZhbGlkYXRlQWxsQWN0aW9uLFxuICBJbnZhbGlkYXRlQWN0aW9uLFxufSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlUmVkdWNlcihcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICBhY3Rpb246IEludmFsaWRhdGVBY3Rpb24gfCBJbnZhbGlkYXRlQWxsQWN0aW9uLFxuKSB7XG4gIGNvbnN0IGVuZHBvaW50cyA9IHsgLi4uc3RhdGUuZW5kcG9pbnRzIH07XG4gIGNvbnN0IG1ldGEgPSB7IC4uLnN0YXRlLm1ldGEgfTtcbiAgY29uc3QgaW52YWxpZGF0ZUtleSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgIGRlbGV0ZSBlbmRwb2ludHNba2V5XTtcbiAgICBjb25zdCBpdGVtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGFba2V5XSxcbiAgICAgIGV4cGlyZXNBdDogMCxcbiAgICAgIGludmFsaWRhdGVkOiB0cnVlLFxuICAgIH07XG4gICAgZGVsZXRlIGl0ZW1NZXRhLmVycm9yO1xuICAgIG1ldGFba2V5XSA9IGl0ZW1NZXRhO1xuICB9O1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IElOVkFMSURBVEUpIHtcbiAgICBpbnZhbGlkYXRlS2V5KGFjdGlvbi5rZXkpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5rZXlzKGVuZHBvaW50cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGFjdGlvbi50ZXN0S2V5KGtleSkpIHtcbiAgICAgICAgaW52YWxpZGF0ZUtleShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlbmRwb2ludHMsXG4gICAgbWV0YSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLHNCQUFzQjtBQU9qRCxPQUFPLFNBQVNDLGlCQUFpQkEsQ0FDL0JDLEtBQXFCLEVBQ3JCQyxNQUE4QyxFQUM5QztFQUNBLE1BQU1DLFNBQVMsR0FBRztJQUFFLEdBQUdGLEtBQUssQ0FBQ0U7RUFBVSxDQUFDO0VBQ3hDLE1BQU1DLElBQUksR0FBRztJQUFFLEdBQUdILEtBQUssQ0FBQ0c7RUFBSyxDQUFDO0VBQzlCLE1BQU1DLGFBQWEsR0FBSUMsR0FBVyxJQUFLO0lBQ3JDLE9BQU9ILFNBQVMsQ0FBQ0csR0FBRyxDQUFDO0lBQ3JCLE1BQU1DLFFBQVEsR0FBRztNQUNmLEdBQUdILElBQUksQ0FBQ0UsR0FBRyxDQUFDO01BQ1pFLFNBQVMsRUFBRSxDQUFDO01BQ1pDLFdBQVcsRUFBRTtJQUNmLENBQUM7SUFDRCxPQUFPRixRQUFRLENBQUNHLEtBQUs7SUFDckJOLElBQUksQ0FBQ0UsR0FBRyxDQUFDLEdBQUdDLFFBQVE7RUFDdEIsQ0FBQztFQUNELElBQUlMLE1BQU0sQ0FBQ1MsSUFBSSxLQUFLWixVQUFVLEVBQUU7SUFDOUJNLGFBQWEsQ0FBQ0gsTUFBTSxDQUFDSSxHQUFHLENBQUM7RUFDM0IsQ0FBQyxNQUFNO0lBQ0xNLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDVixTQUFTLENBQUMsQ0FBQ1csT0FBTyxDQUFDUixHQUFHLElBQUk7TUFDcEMsSUFBSUosTUFBTSxDQUFDYSxPQUFPLENBQUNULEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCRCxhQUFhLENBQUNDLEdBQUcsQ0FBQztNQUNwQjtJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBTztJQUNMLEdBQUdMLEtBQUs7SUFDUkUsU0FBUztJQUNUQztFQUNGLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,5 +1,5 @@
1
1
  import { normalize } from '@data-client/normalizr';
2
- import { OPTIMISTIC_TYPE } from '../../actionTypes.js';
2
+ import { OPTIMISTIC } from '../../actionTypes.js';
3
3
  import AbortOptimistic from '../../controller/AbortOptimistic.js';
4
4
  export function setResponseReducer(state, action, controller) {
5
5
  if (action.error) {
@@ -9,7 +9,7 @@ export function setResponseReducer(state, action, controller) {
9
9
  var _state$meta$action$ke;
10
10
  let response;
11
11
  // for true set's response is contained in action
12
- if (action.type === OPTIMISTIC_TYPE) {
12
+ if (action.type === OPTIMISTIC) {
13
13
  // this should never happen
14
14
  /* istanbul ignore if */
15
15
  if (!action.endpoint.getOptimisticResponse) return state;
@@ -107,6 +107,6 @@ function reduceError(state, action, error) {
107
107
  }
108
108
  /** Filter all requests with same serialization that did not start after the resolving request */
109
109
  function filterOptimistic(state, resolvingAction) {
110
- return state.optimistic.filter(optimisticAction => optimisticAction.key !== resolvingAction.key || (optimisticAction.type === OPTIMISTIC_TYPE ? optimisticAction.meta.fetchedAt !== resolvingAction.meta.fetchedAt : optimisticAction.meta.date > resolvingAction.meta.date));
110
+ return state.optimistic.filter(optimisticAction => optimisticAction.key !== resolvingAction.key || (optimisticAction.type === OPTIMISTIC ? optimisticAction.meta.fetchedAt !== resolvingAction.meta.fetchedAt : optimisticAction.meta.date > resolvingAction.meta.date));
111
111
  }
112
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemUiLCJPUFRJTUlTVElDX1RZUEUiLCJBYm9ydE9wdGltaXN0aWMiLCJzZXRSZXNwb25zZVJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsImNvbnRyb2xsZXIiLCJlcnJvciIsInJlZHVjZUVycm9yIiwicmVzcG9uc2UiLCJfc3RhdGUkbWV0YSRhY3Rpb24ka2UiLCJ0eXBlIiwiZW5kcG9pbnQiLCJnZXRPcHRpbWlzdGljUmVzcG9uc2UiLCJjYWxsIiwic25hcHNob3QiLCJtZXRhIiwiZmV0Y2hlZEF0IiwiYXJncyIsImUiLCJjb25zdHJ1Y3RvciIsInJlc3VsdCIsImVudGl0aWVzIiwiaW5kZXhlcyIsImVudGl0eU1ldGEiLCJzY2hlbWEiLCJlbmRwb2ludHMiLCJrZXkiLCJ1cGRhdGUiLCJ1cGRhdGVycyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiY29uc29sZSIsImRhdGUiLCJleHBpcmVzQXQiLCJwcmV2RXhwaXJlc0F0Iiwib3B0aW1pc3RpYyIsImZpbHRlck9wdGltaXN0aWMiLCJsYXN0UmVzZXQiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsInVuZGVmaW5lZCIsInN0YXR1cyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIm5hbWUiLCJlcnJvclBvbGljeSIsInJlc29sdmluZ0FjdGlvbiIsImZpbHRlciIsIm9wdGltaXN0aWNBY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvcmVkdWNlci9zZXRSZXNwb25zZVJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IE9QVElNSVNUSUNfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCBBYm9ydE9wdGltaXN0aWMgZnJvbSAnLi4vLi4vY29udHJvbGxlci9BYm9ydE9wdGltaXN0aWMuanMnO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tICcuLi8uLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBTdGF0ZSxcbiAgU2V0UmVzcG9uc2VBY3Rpb24sXG4gIE9wdGltaXN0aWNBY3Rpb24sXG59IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFJlc3BvbnNlUmVkdWNlcihcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICBhY3Rpb246IE9wdGltaXN0aWNBY3Rpb24gfCBTZXRSZXNwb25zZUFjdGlvbixcbiAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbikge1xuICBpZiAoYWN0aW9uLmVycm9yKSB7XG4gICAgcmV0dXJuIHJlZHVjZUVycm9yKHN0YXRlLCBhY3Rpb24sIGFjdGlvbi5yZXNwb25zZSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2U6IGFueTtcbiAgICAvLyBmb3IgdHJ1ZSBzZXQncyByZXNwb25zZSBpcyBjb250YWluZWQgaW4gYWN0aW9uXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSBPUFRJTUlTVElDX1RZUEUpIHtcbiAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWFjdGlvbi5lbmRwb2ludC5nZXRPcHRpbWlzdGljUmVzcG9uc2UpIHJldHVybiBzdGF0ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGNvbXB1dGUgb3B0aW1pc3RpYyByZXNwb25zZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gICAgICAgIHJlc3BvbnNlID0gYWN0aW9uLmVuZHBvaW50LmdldE9wdGltaXN0aWNSZXNwb25zZS5jYWxsKFxuICAgICAgICAgIGFjdGlvbi5lbmRwb2ludCxcbiAgICAgICAgICBjb250cm9sbGVyLnNuYXBzaG90KHN0YXRlLCBhY3Rpb24ubWV0YS5mZXRjaGVkQXQpLFxuICAgICAgICAgIC4uLmFjdGlvbi5hcmdzLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIC8vIEFib3J0T3B0aW1pc3RpYyBtZWFucyAnZG8gbm90aGluZycsIG90aGVyd2lzZSB3ZSBjb3VudCB0aGUgZXhjZXB0aW9uIGFzIGVuZHBvaW50IGZhaWx1cmVcbiAgICAgICAgaWYgKGUuY29uc3RydWN0b3IgPT09IEFib3J0T3B0aW1pc3RpYykge1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGFjdGlvbi5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgeyByZXN1bHQsIGVudGl0aWVzLCBpbmRleGVzLCBlbnRpdHlNZXRhIH0gPSBub3JtYWxpemUoXG4gICAgICBhY3Rpb24uZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBhY3Rpb24uYXJncyxcbiAgICAgIHN0YXRlLFxuICAgICAgYWN0aW9uLm1ldGEsXG4gICAgKTtcbiAgICBjb25zdCBlbmRwb2ludHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgLi4uc3RhdGUuZW5kcG9pbnRzLFxuICAgICAgW2FjdGlvbi5rZXldOiByZXN1bHQsXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFjdGlvbi5lbmRwb2ludC51cGRhdGUpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlcnMgPSBhY3Rpb24uZW5kcG9pbnQudXBkYXRlKHJlc3VsdCwgLi4uYWN0aW9uLmFyZ3MpO1xuICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGVuZHBvaW50c1trZXldID0gdXBkYXRlcnNba2V5XShlbmRwb2ludHNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbm8gcmVhc29uIHRvIGNvbXBsZXRlbHkgZmFpbCBiZWNhdXNlIG9mIHVzZXItY29kZSBlcnJvclxuICAgICAgLy8gaW50ZWdyaXR5IG9mIHRoaXMgc3RhdGUgdXBkYXRlIGlzIHN0aWxsIGd1YXJhbnRlZWRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJlZCBkdXJpbmcgRW5kcG9pbnQudXBkYXRlKCkgZm9yICR7YWN0aW9uLmtleX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZW50aXRpZXMsXG4gICAgICBlbmRwb2ludHMsXG4gICAgICBpbmRleGVzLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5zdGF0ZS5tZXRhLFxuICAgICAgICBbYWN0aW9uLmtleV06IHtcbiAgICAgICAgICBkYXRlOiBhY3Rpb24ubWV0YS5kYXRlLFxuICAgICAgICAgIGV4cGlyZXNBdDogYWN0aW9uLm1ldGEuZXhwaXJlc0F0LFxuICAgICAgICAgIHByZXZFeHBpcmVzQXQ6IHN0YXRlLm1ldGFbYWN0aW9uLmtleV0/LmV4cGlyZXNBdCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnRpdHlNZXRhLFxuICAgICAgb3B0aW1pc3RpYzogZmlsdGVyT3B0aW1pc3RpYyhzdGF0ZSwgYWN0aW9uKSxcbiAgICAgIGxhc3RSZXNldDogc3RhdGUubGFzdFJlc2V0LFxuICAgIH07XG4gICAgLy8gcmVkdWNlciBtdXN0IHVwZGF0ZSB0aGUgc3RhdGUsIHNvIGluIGNhc2Ugb2YgcHJvY2Vzc2luZyBlcnJvcnMgd2Ugc2ltcGx5IGNvbXB1dGUgdGhlIGVuZHBvaW50cyBpbmxpbmVcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvci5tZXNzYWdlID0gYEVycm9yIHByb2Nlc3NpbmcgJHtcbiAgICAgICAgYWN0aW9uLmtleVxuICAgICAgfVxcblxcbkZ1bGwgU2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3Rpb24uZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIDIsXG4gICAgICApfVxcblxcbkVycm9yOlxcbiR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgaWYgKCdyZXNwb25zZScgaW4gYWN0aW9uKSBlcnJvci5yZXNwb25zZSA9IGFjdGlvbi5yZXNwb25zZTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IDQwMDtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIG5vdCBhbHdheXMgYnViYmxlZCB1cCwgc28gbGV0J3MgZG91YmxlIHN1cmUgdGhpcyBkb2Vzbid0IGZhaWwgc2lsZW50bHlcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZHVjZUVycm9yKHN0YXRlLCBhY3Rpb24sIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2VFcnJvcihcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICBhY3Rpb246IFNldFJlc3BvbnNlQWN0aW9uIHwgT3B0aW1pc3RpY0FjdGlvbixcbiAgZXJyb3I6IGFueSxcbik6IFN0YXRlPHVua25vd24+IHtcbiAgaWYgKGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgIC8vIEluIGNhc2Ugd2UgYWJvcnQgc2ltcGx5IHVuZG8gdGhlIG9wdGltaXN0aWMgdXBkYXRlIGFuZCBhY3QgbGlrZSBubyBmZXRjaCBldmVuIG9jY3VyZWRcbiAgICAvLyBXZSBzdGlsbCB3YW50IHRob3NlIHdhdGNoaW5nIHByb21pc2VzIGZyb20gZmV0Y2ggZGlyZWN0bHkgdG8gb2JzZXJ2ZWQgdGhlIGFib3J0LCBidXQgd2UgZG9uJ3Qgd2FudCB0b1xuICAgIC8vIFRyaWdnZXIgZXJyb3JzIGluIHRoaXMgY2FzZS4gVGhpcyBtZWFucyB0aGVvcmV0aWNhbGx5IGltcHJvcGVybHkgYnVpbHQgYWJvcnRlcyB1c2VSZXNvdXJjZSgpIGNvdWxkIHN1c3BlbmQgZm9yZXZlci5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvcHRpbWlzdGljOiBmaWx0ZXJPcHRpbWlzdGljKHN0YXRlLCBhY3Rpb24pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtZXRhOiB7XG4gICAgICAuLi5zdGF0ZS5tZXRhLFxuICAgICAgW2FjdGlvbi5rZXldOiB7XG4gICAgICAgIGRhdGU6IGFjdGlvbi5tZXRhLmRhdGUsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBleHBpcmVzQXQ6IGFjdGlvbi5tZXRhLmV4cGlyZXNBdCxcbiAgICAgICAgZXJyb3JQb2xpY3k6IGFjdGlvbi5lbmRwb2ludC5lcnJvclBvbGljeT8uKGVycm9yKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcHRpbWlzdGljOiBmaWx0ZXJPcHRpbWlzdGljKHN0YXRlLCBhY3Rpb24pLFxuICB9O1xufVxuLyoqIEZpbHRlciBhbGwgcmVxdWVzdHMgd2l0aCBzYW1lIHNlcmlhbGl6YXRpb24gdGhhdCBkaWQgbm90IHN0YXJ0IGFmdGVyIHRoZSByZXNvbHZpbmcgcmVxdWVzdCAqL1xuZnVuY3Rpb24gZmlsdGVyT3B0aW1pc3RpYyhcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICByZXNvbHZpbmdBY3Rpb246IFNldFJlc3BvbnNlQWN0aW9uIHwgT3B0aW1pc3RpY0FjdGlvbixcbikge1xuICByZXR1cm4gc3RhdGUub3B0aW1pc3RpYy5maWx0ZXIoXG4gICAgb3B0aW1pc3RpY0FjdGlvbiA9PlxuICAgICAgb3B0aW1pc3RpY0FjdGlvbi5rZXkgIT09IHJlc29sdmluZ0FjdGlvbi5rZXkgfHxcbiAgICAgIChvcHRpbWlzdGljQWN0aW9uLnR5cGUgPT09IE9QVElNSVNUSUNfVFlQRSA/XG4gICAgICAgIG9wdGltaXN0aWNBY3Rpb24ubWV0YS5mZXRjaGVkQXQgIT09IHJlc29sdmluZ0FjdGlvbi5tZXRhLmZldGNoZWRBdFxuICAgICAgOiBvcHRpbWlzdGljQWN0aW9uLm1ldGEuZGF0ZSA+IHJlc29sdmluZ0FjdGlvbi5tZXRhLmRhdGUpLFxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxTQUFTLFFBQVEsd0JBQXdCO0FBRWxELFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFDdEQsT0FBT0MsZUFBZSxNQUFNLHFDQUFxQztBQVFqRSxPQUFPLFNBQVNDLGtCQUFrQkEsQ0FDaENDLEtBQXFCLEVBQ3JCQyxNQUE0QyxFQUM1Q0MsVUFBc0IsRUFDdEI7RUFDQSxJQUFJRCxNQUFNLENBQUNFLEtBQUssRUFBRTtJQUNoQixPQUFPQyxXQUFXLENBQUNKLEtBQUssRUFBRUMsTUFBTSxFQUFFQSxNQUFNLENBQUNJLFFBQVEsQ0FBQztFQUNwRDtFQUNBLElBQUk7SUFBQSxJQUFBQyxxQkFBQTtJQUNGLElBQUlELFFBQWE7SUFDakI7SUFDQSxJQUFJSixNQUFNLENBQUNNLElBQUksS0FBS1YsZUFBZSxFQUFFO01BQ25DO01BQ0E7TUFDQSxJQUFJLENBQUNJLE1BQU0sQ0FBQ08sUUFBUSxDQUFDQyxxQkFBcUIsRUFBRSxPQUFPVCxLQUFLO01BQ3hELElBQUk7UUFDRjtRQUNBSyxRQUFRLEdBQUdKLE1BQU0sQ0FBQ08sUUFBUSxDQUFDQyxxQkFBcUIsQ0FBQ0MsSUFBSSxDQUNuRFQsTUFBTSxDQUFDTyxRQUFRLEVBQ2ZOLFVBQVUsQ0FBQ1MsUUFBUSxDQUFDWCxLQUFLLEVBQUVDLE1BQU0sQ0FBQ1csSUFBSSxDQUFDQyxTQUFTLENBQUMsRUFDakQsR0FBR1osTUFBTSxDQUFDYSxJQUNaLENBQUM7TUFDSCxDQUFDLENBQUMsT0FBT0MsQ0FBTSxFQUFFO1FBQ2Y7UUFDQSxJQUFJQSxDQUFDLENBQUNDLFdBQVcsS0FBS2xCLGVBQWUsRUFBRTtVQUNyQyxPQUFPRSxLQUFLO1FBQ2Q7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
112
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemUiLCJPUFRJTUlTVElDIiwiQWJvcnRPcHRpbWlzdGljIiwic2V0UmVzcG9uc2VSZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJjb250cm9sbGVyIiwiZXJyb3IiLCJyZWR1Y2VFcnJvciIsInJlc3BvbnNlIiwiX3N0YXRlJG1ldGEkYWN0aW9uJGtlIiwidHlwZSIsImVuZHBvaW50IiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiY2FsbCIsInNuYXBzaG90IiwibWV0YSIsImZldGNoZWRBdCIsImFyZ3MiLCJlIiwiY29uc3RydWN0b3IiLCJyZXN1bHQiLCJlbnRpdGllcyIsImluZGV4ZXMiLCJlbnRpdHlNZXRhIiwic2NoZW1hIiwiZW5kcG9pbnRzIiwia2V5IiwidXBkYXRlIiwidXBkYXRlcnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImNvbnNvbGUiLCJkYXRlIiwiZXhwaXJlc0F0IiwicHJldkV4cGlyZXNBdCIsIm9wdGltaXN0aWMiLCJmaWx0ZXJPcHRpbWlzdGljIiwibGFzdFJlc2V0IiwibWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJzdGF0dXMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJuYW1lIiwiZXJyb3JQb2xpY3kiLCJyZXNvbHZpbmdBY3Rpb24iLCJmaWx0ZXIiLCJvcHRpbWlzdGljQWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3JlZHVjZXIvc2V0UmVzcG9uc2VSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgeyBPUFRJTUlTVElDIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IEFib3J0T3B0aW1pc3RpYyBmcm9tICcuLi8uLi9jb250cm9sbGVyL0Fib3J0T3B0aW1pc3RpYy5qcyc7XG5pbXBvcnQgdHlwZSBDb250cm9sbGVyIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0YXRlLFxuICBTZXRSZXNwb25zZUFjdGlvbixcbiAgT3B0aW1pc3RpY0FjdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVzcG9uc2VSZWR1Y2VyKFxuICBzdGF0ZTogU3RhdGU8dW5rbm93bj4sXG4gIGFjdGlvbjogT3B0aW1pc3RpY0FjdGlvbiB8IFNldFJlc3BvbnNlQWN0aW9uLFxuICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuKSB7XG4gIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICByZXR1cm4gcmVkdWNlRXJyb3Ioc3RhdGUsIGFjdGlvbiwgYWN0aW9uLnJlc3BvbnNlKTtcbiAgfVxuICB0cnkge1xuICAgIGxldCByZXNwb25zZTogYW55O1xuICAgIC8vIGZvciB0cnVlIHNldCdzIHJlc3BvbnNlIGlzIGNvbnRhaW5lZCBpbiBhY3Rpb25cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09IE9QVElNSVNUSUMpIHtcbiAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWFjdGlvbi5lbmRwb2ludC5nZXRPcHRpbWlzdGljUmVzcG9uc2UpIHJldHVybiBzdGF0ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGNvbXB1dGUgb3B0aW1pc3RpYyByZXNwb25zZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gICAgICAgIHJlc3BvbnNlID0gYWN0aW9uLmVuZHBvaW50LmdldE9wdGltaXN0aWNSZXNwb25zZS5jYWxsKFxuICAgICAgICAgIGFjdGlvbi5lbmRwb2ludCxcbiAgICAgICAgICBjb250cm9sbGVyLnNuYXBzaG90KHN0YXRlLCBhY3Rpb24ubWV0YS5mZXRjaGVkQXQpLFxuICAgICAgICAgIC4uLmFjdGlvbi5hcmdzLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIC8vIEFib3J0T3B0aW1pc3RpYyBtZWFucyAnZG8gbm90aGluZycsIG90aGVyd2lzZSB3ZSBjb3VudCB0aGUgZXhjZXB0aW9uIGFzIGVuZHBvaW50IGZhaWx1cmVcbiAgICAgICAgaWYgKGUuY29uc3RydWN0b3IgPT09IEFib3J0T3B0aW1pc3RpYykge1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZSA9IGFjdGlvbi5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgeyByZXN1bHQsIGVudGl0aWVzLCBpbmRleGVzLCBlbnRpdHlNZXRhIH0gPSBub3JtYWxpemUoXG4gICAgICBhY3Rpb24uZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBhY3Rpb24uYXJncyxcbiAgICAgIHN0YXRlLFxuICAgICAgYWN0aW9uLm1ldGEsXG4gICAgKTtcbiAgICBjb25zdCBlbmRwb2ludHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgLi4uc3RhdGUuZW5kcG9pbnRzLFxuICAgICAgW2FjdGlvbi5rZXldOiByZXN1bHQsXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFjdGlvbi5lbmRwb2ludC51cGRhdGUpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlcnMgPSBhY3Rpb24uZW5kcG9pbnQudXBkYXRlKHJlc3VsdCwgLi4uYWN0aW9uLmFyZ3MpO1xuICAgICAgICBPYmplY3Qua2V5cyh1cGRhdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGVuZHBvaW50c1trZXldID0gdXBkYXRlcnNba2V5XShlbmRwb2ludHNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbm8gcmVhc29uIHRvIGNvbXBsZXRlbHkgZmFpbCBiZWNhdXNlIG9mIHVzZXItY29kZSBlcnJvclxuICAgICAgLy8gaW50ZWdyaXR5IG9mIHRoaXMgc3RhdGUgdXBkYXRlIGlzIHN0aWxsIGd1YXJhbnRlZWRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJlZCBkdXJpbmcgRW5kcG9pbnQudXBkYXRlKCkgZm9yICR7YWN0aW9uLmtleX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZW50aXRpZXMsXG4gICAgICBlbmRwb2ludHMsXG4gICAgICBpbmRleGVzLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5zdGF0ZS5tZXRhLFxuICAgICAgICBbYWN0aW9uLmtleV06IHtcbiAgICAgICAgICBkYXRlOiBhY3Rpb24ubWV0YS5kYXRlLFxuICAgICAgICAgIGV4cGlyZXNBdDogYWN0aW9uLm1ldGEuZXhwaXJlc0F0LFxuICAgICAgICAgIHByZXZFeHBpcmVzQXQ6IHN0YXRlLm1ldGFbYWN0aW9uLmtleV0/LmV4cGlyZXNBdCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnRpdHlNZXRhLFxuICAgICAgb3B0aW1pc3RpYzogZmlsdGVyT3B0aW1pc3RpYyhzdGF0ZSwgYWN0aW9uKSxcbiAgICAgIGxhc3RSZXNldDogc3RhdGUubGFzdFJlc2V0LFxuICAgIH07XG4gICAgLy8gcmVkdWNlciBtdXN0IHVwZGF0ZSB0aGUgc3RhdGUsIHNvIGluIGNhc2Ugb2YgcHJvY2Vzc2luZyBlcnJvcnMgd2Ugc2ltcGx5IGNvbXB1dGUgdGhlIGVuZHBvaW50cyBpbmxpbmVcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvci5tZXNzYWdlID0gYEVycm9yIHByb2Nlc3NpbmcgJHtcbiAgICAgICAgYWN0aW9uLmtleVxuICAgICAgfVxcblxcbkZ1bGwgU2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3Rpb24uZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIDIsXG4gICAgICApfVxcblxcbkVycm9yOlxcbiR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgaWYgKCdyZXNwb25zZScgaW4gYWN0aW9uKSBlcnJvci5yZXNwb25zZSA9IGFjdGlvbi5yZXNwb25zZTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IDQwMDtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIG5vdCBhbHdheXMgYnViYmxlZCB1cCwgc28gbGV0J3MgZG91YmxlIHN1cmUgdGhpcyBkb2Vzbid0IGZhaWwgc2lsZW50bHlcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZHVjZUVycm9yKHN0YXRlLCBhY3Rpb24sIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2VFcnJvcihcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICBhY3Rpb246IFNldFJlc3BvbnNlQWN0aW9uIHwgT3B0aW1pc3RpY0FjdGlvbixcbiAgZXJyb3I6IGFueSxcbik6IFN0YXRlPHVua25vd24+IHtcbiAgaWYgKGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgIC8vIEluIGNhc2Ugd2UgYWJvcnQgc2ltcGx5IHVuZG8gdGhlIG9wdGltaXN0aWMgdXBkYXRlIGFuZCBhY3QgbGlrZSBubyBmZXRjaCBldmVuIG9jY3VyZWRcbiAgICAvLyBXZSBzdGlsbCB3YW50IHRob3NlIHdhdGNoaW5nIHByb21pc2VzIGZyb20gZmV0Y2ggZGlyZWN0bHkgdG8gb2JzZXJ2ZWQgdGhlIGFib3J0LCBidXQgd2UgZG9uJ3Qgd2FudCB0b1xuICAgIC8vIFRyaWdnZXIgZXJyb3JzIGluIHRoaXMgY2FzZS4gVGhpcyBtZWFucyB0aGVvcmV0aWNhbGx5IGltcHJvcGVybHkgYnVpbHQgYWJvcnRlcyB1c2VSZXNvdXJjZSgpIGNvdWxkIHN1c3BlbmQgZm9yZXZlci5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvcHRpbWlzdGljOiBmaWx0ZXJPcHRpbWlzdGljKHN0YXRlLCBhY3Rpb24pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtZXRhOiB7XG4gICAgICAuLi5zdGF0ZS5tZXRhLFxuICAgICAgW2FjdGlvbi5rZXldOiB7XG4gICAgICAgIGRhdGU6IGFjdGlvbi5tZXRhLmRhdGUsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBleHBpcmVzQXQ6IGFjdGlvbi5tZXRhLmV4cGlyZXNBdCxcbiAgICAgICAgZXJyb3JQb2xpY3k6IGFjdGlvbi5lbmRwb2ludC5lcnJvclBvbGljeT8uKGVycm9yKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcHRpbWlzdGljOiBmaWx0ZXJPcHRpbWlzdGljKHN0YXRlLCBhY3Rpb24pLFxuICB9O1xufVxuLyoqIEZpbHRlciBhbGwgcmVxdWVzdHMgd2l0aCBzYW1lIHNlcmlhbGl6YXRpb24gdGhhdCBkaWQgbm90IHN0YXJ0IGFmdGVyIHRoZSByZXNvbHZpbmcgcmVxdWVzdCAqL1xuZnVuY3Rpb24gZmlsdGVyT3B0aW1pc3RpYyhcbiAgc3RhdGU6IFN0YXRlPHVua25vd24+LFxuICByZXNvbHZpbmdBY3Rpb246IFNldFJlc3BvbnNlQWN0aW9uIHwgT3B0aW1pc3RpY0FjdGlvbixcbikge1xuICByZXR1cm4gc3RhdGUub3B0aW1pc3RpYy5maWx0ZXIoXG4gICAgb3B0aW1pc3RpY0FjdGlvbiA9PlxuICAgICAgb3B0aW1pc3RpY0FjdGlvbi5rZXkgIT09IHJlc29sdmluZ0FjdGlvbi5rZXkgfHxcbiAgICAgIChvcHRpbWlzdGljQWN0aW9uLnR5cGUgPT09IE9QVElNSVNUSUMgP1xuICAgICAgICBvcHRpbWlzdGljQWN0aW9uLm1ldGEuZmV0Y2hlZEF0ICE9PSByZXNvbHZpbmdBY3Rpb24ubWV0YS5mZXRjaGVkQXRcbiAgICAgIDogb3B0aW1pc3RpY0FjdGlvbi5tZXRhLmRhdGUgPiByZXNvbHZpbmdBY3Rpb24ubWV0YS5kYXRlKSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxRQUFRLHdCQUF3QjtBQUVsRCxTQUFTQyxVQUFVLFFBQVEsc0JBQXNCO0FBQ2pELE9BQU9DLGVBQWUsTUFBTSxxQ0FBcUM7QUFRakUsT0FBTyxTQUFTQyxrQkFBa0JBLENBQ2hDQyxLQUFxQixFQUNyQkMsTUFBNEMsRUFDNUNDLFVBQXNCLEVBQ3RCO0VBQ0EsSUFBSUQsTUFBTSxDQUFDRSxLQUFLLEVBQUU7SUFDaEIsT0FBT0MsV0FBVyxDQUFDSixLQUFLLEVBQUVDLE1BQU0sRUFBRUEsTUFBTSxDQUFDSSxRQUFRLENBQUM7RUFDcEQ7RUFDQSxJQUFJO0lBQUEsSUFBQUMscUJBQUE7SUFDRixJQUFJRCxRQUFhO0lBQ2pCO0lBQ0EsSUFBSUosTUFBTSxDQUFDTSxJQUFJLEtBQUtWLFVBQVUsRUFBRTtNQUM5QjtNQUNBO01BQ0EsSUFBSSxDQUFDSSxNQUFNLENBQUNPLFFBQVEsQ0FBQ0MscUJBQXFCLEVBQUUsT0FBT1QsS0FBSztNQUN4RCxJQUFJO1FBQ0Y7UUFDQUssUUFBUSxHQUFHSixNQUFNLENBQUNPLFFBQVEsQ0FBQ0MscUJBQXFCLENBQUNDLElBQUksQ0FDbkRULE1BQU0sQ0FBQ08sUUFBUSxFQUNmTixVQUFVLENBQUNTLFFBQVEsQ0FBQ1gsS0FBSyxFQUFFQyxNQUFNLENBQUNXLElBQUksQ0FBQ0MsU0FBUyxDQUFDLEVBQ2pELEdBQUdaLE1BQU0sQ0FBQ2EsSUFDWixDQUFDO01BQ0gsQ0FBQyxDQUFDLE9BQU9DLENBQU0sRUFBRTtRQUNmO1FBQ0EsSUFBSUEsQ0FBQyxDQUFDQyxXQUFXLEtBQUtsQixlQUFlLEVBQUU7VUFDckMsT0FBT0UsS0FBSztRQUNkO1FBQ0EsTUFBTWUsQ0FBQztNQUNU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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-client/core",
3
- "version": "0.14.13",
3
+ "version": "0.14.16",
4
4
  "description": "Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch",
5
5
  "sideEffects": false,
6
6
  "main": "dist/index.js",
@@ -121,7 +121,7 @@
121
121
  },
122
122
  "dependencies": {
123
123
  "@babel/runtime": "^7.17.0",
124
- "@data-client/normalizr": "^0.14.10",
124
+ "@data-client/normalizr": "^0.14.16",
125
125
  "flux-standard-action": "^2.1.1"
126
126
  },
127
127
  "devDependencies": {
@@ -1,11 +1,23 @@
1
- export const FETCH_TYPE = 'rdc/fetch' as const;
2
- export const SET_TYPE = 'rdc/set' as const;
3
- export const SET_RESPONSE_TYPE = 'rdc/setresponse' as const;
4
- export const OPTIMISTIC_TYPE = 'rdc/optimistic' as const;
5
- export const RESET_TYPE = 'rdc/reset' as const;
6
- export const SUBSCRIBE_TYPE = 'rdc/subscribe' as const;
7
- export const UNSUBSCRIBE_TYPE = 'rdc/unsubscribe' as const;
8
- export const INVALIDATE_TYPE = 'rdc/invalidate' as const;
9
- export const INVALIDATEALL_TYPE = 'rdc/invalidateall' as const;
10
- export const EXPIREALL_TYPE = 'rdc/expireall' as const;
11
- export const GC_TYPE = 'rdc/gc' as const;
1
+ export const FETCH = 'rdc/fetch' as const;
2
+ export const SET = 'rdc/set' as const;
3
+ export const SET_RESPONSE = 'rdc/setresponse' as const;
4
+ export const OPTIMISTIC = 'rdc/optimistic' as const;
5
+ export const RESET = 'rdc/reset' as const;
6
+ export const SUBSCRIBE = 'rdc/subscribe' as const;
7
+ export const UNSUBSCRIBE = 'rdc/unsubscribe' as const;
8
+ export const INVALIDATE = 'rdc/invalidate' as const;
9
+ export const INVALIDATEALL = 'rdc/invalidateall' as const;
10
+ export const EXPIREALL = 'rdc/expireall' as const;
11
+ export const GC = 'rdc/gc' as const;
12
+
13
+ export const FETCH_TYPE = FETCH;
14
+ export const SET_TYPE = SET;
15
+ export const SET_RESPONSE_TYPE = SET_RESPONSE;
16
+ export const OPTIMISTIC_TYPE = OPTIMISTIC;
17
+ export const RESET_TYPE = RESET;
18
+ export const SUBSCRIBE_TYPE = SUBSCRIBE;
19
+ export const UNSUBSCRIBE_TYPE = UNSUBSCRIBE;
20
+ export const INVALIDATE_TYPE = INVALIDATE;
21
+ export const INVALIDATEALL_TYPE = INVALIDATEALL;
22
+ export const EXPIREALL_TYPE = EXPIREALL;
23
+ export const GC_TYPE = GC;
package/src/actions.ts CHANGED
@@ -7,17 +7,17 @@ import type {
7
7
  } from '@data-client/normalizr';
8
8
 
9
9
  import type {
10
- SET_TYPE,
11
- RESET_TYPE,
12
- FETCH_TYPE,
13
- SUBSCRIBE_TYPE,
14
- UNSUBSCRIBE_TYPE,
15
- INVALIDATE_TYPE,
16
- GC_TYPE,
17
- OPTIMISTIC_TYPE,
18
- INVALIDATEALL_TYPE,
19
- EXPIREALL_TYPE,
20
- SET_RESPONSE_TYPE,
10
+ SET,
11
+ RESET,
12
+ FETCH,
13
+ SUBSCRIBE,
14
+ UNSUBSCRIBE,
15
+ INVALIDATE,
16
+ GC,
17
+ OPTIMISTIC,
18
+ INVALIDATEALL,
19
+ EXPIREALL,
20
+ SET_RESPONSE,
21
21
  } from './actionTypes.js';
22
22
  import type { EndpointUpdateFunction } from './controller/types.js';
23
23
 
@@ -37,7 +37,7 @@ export interface ActionMeta {
37
37
 
38
38
  /** Action for Controller.set() */
39
39
  export interface SetAction<S extends Queryable = any> {
40
- type: typeof SET_TYPE;
40
+ type: typeof SET;
41
41
  schema: S;
42
42
  args: readonly any[];
43
43
  meta: ActionMeta;
@@ -48,7 +48,7 @@ export interface SetAction<S extends Queryable = any> {
48
48
  export interface SetResponseActionBase<
49
49
  E extends EndpointAndUpdate<E> = EndpointDefault,
50
50
  > {
51
- type: typeof SET_RESPONSE_TYPE;
51
+ type: typeof SET_RESPONSE;
52
52
  endpoint: E;
53
53
  args: readonly any[];
54
54
  key: string;
@@ -81,7 +81,7 @@ export interface FetchMeta {
81
81
 
82
82
  /** Action for Controller.fetch() */
83
83
  export interface FetchAction<E extends EndpointAndUpdate<E> = EndpointDefault> {
84
- type: typeof FETCH_TYPE;
84
+ type: typeof FETCH;
85
85
  endpoint: E;
86
86
  args: readonly [...Parameters<E>];
87
87
  key: string;
@@ -93,7 +93,7 @@ export interface FetchAction<E extends EndpointAndUpdate<E> = EndpointDefault> {
93
93
  export interface OptimisticAction<
94
94
  E extends EndpointAndUpdate<E> = EndpointDefault,
95
95
  > {
96
- type: typeof OPTIMISTIC_TYPE;
96
+ type: typeof OPTIMISTIC;
97
97
  endpoint: E;
98
98
  args: readonly any[];
99
99
  key: string;
@@ -106,7 +106,7 @@ export interface OptimisticAction<
106
106
  export interface SubscribeAction<
107
107
  E extends EndpointAndUpdate<E> = EndpointDefault,
108
108
  > {
109
- type: typeof SUBSCRIBE_TYPE;
109
+ type: typeof SUBSCRIBE;
110
110
  endpoint: E;
111
111
  args: readonly any[];
112
112
  key: string;
@@ -116,7 +116,7 @@ export interface SubscribeAction<
116
116
  export interface UnsubscribeAction<
117
117
  E extends EndpointAndUpdate<E> = EndpointDefault,
118
118
  > {
119
- type: typeof UNSUBSCRIBE_TYPE;
119
+ type: typeof UNSUBSCRIBE;
120
120
  endpoint: E;
121
121
  args: readonly any[];
122
122
  key: string;
@@ -124,30 +124,30 @@ export interface UnsubscribeAction<
124
124
 
125
125
  /* EXPIRY */
126
126
  export interface ExpireAllAction {
127
- type: typeof EXPIREALL_TYPE;
127
+ type: typeof EXPIREALL;
128
128
  testKey: (key: string) => boolean;
129
129
  }
130
130
 
131
131
  /* INVALIDATE */
132
132
  export interface InvalidateAllAction {
133
- type: typeof INVALIDATEALL_TYPE;
133
+ type: typeof INVALIDATEALL;
134
134
  testKey: (key: string) => boolean;
135
135
  }
136
136
 
137
137
  export interface InvalidateAction {
138
- type: typeof INVALIDATE_TYPE;
138
+ type: typeof INVALIDATE;
139
139
  key: string;
140
140
  }
141
141
 
142
142
  /* RESET */
143
143
  export interface ResetAction {
144
- type: typeof RESET_TYPE;
144
+ type: typeof RESET;
145
145
  date: number;
146
146
  }
147
147
 
148
148
  /* GC */
149
149
  export interface GCAction {
150
- type: typeof GC_TYPE;
150
+ type: typeof GC;
151
151
  entities: [string, string][];
152
152
  endpoints: string[];
153
153
  }
@@ -1,11 +1,11 @@
1
- import { EXPIREALL_TYPE } from '../../actionTypes.js';
1
+ import { EXPIREALL } from '../../actionTypes.js';
2
2
  import type { ExpireAllAction } from '../../types.js';
3
3
 
4
4
  export function createExpireAll(
5
5
  testKey: (key: string) => boolean,
6
6
  ): ExpireAllAction {
7
7
  return {
8
- type: EXPIREALL_TYPE,
8
+ type: EXPIREALL,
9
9
  testKey,
10
10
  };
11
11
  }
@@ -1,6 +1,6 @@
1
1
  import type { EndpointInterface, NI } from '@data-client/normalizr';
2
2
 
3
- import { FETCH_TYPE } from '../../actionTypes.js';
3
+ import { FETCH } from '../../actionTypes.js';
4
4
  import type { FetchAction, FetchMeta } from '../../types.js';
5
5
  import { EndpointUpdateFunction } from '../types.js';
6
6
 
@@ -26,7 +26,7 @@ export function createFetch<
26
26
  };
27
27
 
28
28
  return {
29
- type: FETCH_TYPE,
29
+ type: FETCH,
30
30
  key: endpoint.key(...args),
31
31
  args,
32
32
  endpoint,
@@ -1,6 +1,6 @@
1
1
  import type { EndpointInterface } from '@data-client/normalizr';
2
2
 
3
- import { INVALIDATE_TYPE } from '../../actionTypes.js';
3
+ import { INVALIDATE } from '../../actionTypes.js';
4
4
  import type { InvalidateAction } from '../../types.js';
5
5
 
6
6
  export function createInvalidate<E extends EndpointInterface>(
@@ -8,7 +8,7 @@ export function createInvalidate<E extends EndpointInterface>(
8
8
  { args }: { args: readonly [...Parameters<E>] },
9
9
  ): InvalidateAction {
10
10
  return {
11
- type: INVALIDATE_TYPE,
11
+ type: INVALIDATE,
12
12
  key: endpoint.key(...args),
13
13
  };
14
14
  }
@@ -1,11 +1,11 @@
1
- import { INVALIDATEALL_TYPE } from '../../actionTypes.js';
1
+ import { INVALIDATEALL } from '../../actionTypes.js';
2
2
  import type { InvalidateAllAction } from '../../types.js';
3
3
 
4
4
  export function createInvalidateAll(
5
5
  testKey: (key: string) => boolean,
6
6
  ): InvalidateAllAction {
7
7
  return {
8
- type: INVALIDATEALL_TYPE,
8
+ type: INVALIDATEALL,
9
9
  testKey,
10
10
  };
11
11
  }
@@ -1,7 +1,7 @@
1
1
  import type { EndpointInterface } from '@data-client/normalizr';
2
2
 
3
3
  import { createMeta } from './createMeta.js';
4
- import { OPTIMISTIC_TYPE } from '../../actionTypes.js';
4
+ import { OPTIMISTIC } from '../../actionTypes.js';
5
5
  import type { OptimisticAction } from '../../types.js';
6
6
  import type { EndpointUpdateFunction } from '../types.js';
7
7
 
@@ -23,7 +23,7 @@ export function createOptimistic<
23
23
  }
24
24
 
25
25
  return {
26
- type: OPTIMISTIC_TYPE,
26
+ type: OPTIMISTIC,
27
27
  key: endpoint.key(...args),
28
28
  args,
29
29
  endpoint,
@@ -1,9 +1,9 @@
1
- import { RESET_TYPE } from '../../actionTypes.js';
1
+ import { RESET } from '../../actionTypes.js';
2
2
  import type { ResetAction } from '../../types.js';
3
3
 
4
4
  export function createReset(): ResetAction {
5
5
  return {
6
- type: RESET_TYPE,
6
+ type: RESET,
7
7
  date: Date.now(),
8
8
  };
9
9
  }
@@ -5,7 +5,7 @@ import type {
5
5
  } from '@data-client/normalizr';
6
6
 
7
7
  import { createMeta } from './createMeta.js';
8
- import { SET_TYPE } from '../../actionTypes.js';
8
+ import { SET } from '../../actionTypes.js';
9
9
  import type { SetAction } from '../../types.js';
10
10
  import ensurePojo from '../ensurePojo.js';
11
11
 
@@ -22,7 +22,7 @@ export function createSet<S extends Queryable>(
22
22
  },
23
23
  ): SetAction<S> {
24
24
  return {
25
- type: SET_TYPE,
25
+ type: SET,
26
26
  value,
27
27
  args: args.map(ensurePojo) as SchemaArgs<S>,
28
28
  schema,
@@ -1,7 +1,7 @@
1
1
  import type { EndpointInterface, ResolveType } from '@data-client/normalizr';
2
2
 
3
3
  import { createMeta } from './createMeta.js';
4
- import { SET_RESPONSE_TYPE } from '../../actionTypes.js';
4
+ import { SET_RESPONSE } from '../../actionTypes.js';
5
5
  import type { SetResponseAction } from '../../types.js';
6
6
  import ensurePojo from '../ensurePojo.js';
7
7
  import { EndpointUpdateFunction } from '../types.js';
@@ -62,7 +62,7 @@ export function createSetResponse<
62
62
  }
63
63
 
64
64
  return {
65
- type: SET_RESPONSE_TYPE,
65
+ type: SET_RESPONSE,
66
66
  key: endpoint.key(...args),
67
67
  response,
68
68
  args: args.map(ensurePojo),
@@ -1,6 +1,6 @@
1
1
  import type { EndpointInterface } from '@data-client/normalizr';
2
2
 
3
- import { SUBSCRIBE_TYPE, UNSUBSCRIBE_TYPE } from '../../actionTypes.js';
3
+ import { SUBSCRIBE, UNSUBSCRIBE } from '../../actionTypes.js';
4
4
  import type { SubscribeAction, UnsubscribeAction } from '../../types.js';
5
5
 
6
6
  export function createSubscription<E extends EndpointInterface>(
@@ -8,7 +8,7 @@ export function createSubscription<E extends EndpointInterface>(
8
8
  { args }: { args: readonly [...Parameters<E>] },
9
9
  ): SubscribeAction<E> {
10
10
  return {
11
- type: SUBSCRIBE_TYPE,
11
+ type: SUBSCRIBE,
12
12
  endpoint,
13
13
  args,
14
14
  key: endpoint.key(...args),
@@ -20,7 +20,7 @@ export function createUnsubscription<E extends EndpointInterface>(
20
20
  { args }: { args: readonly [...Parameters<E>] },
21
21
  ): UnsubscribeAction<E> {
22
22
  return {
23
- type: UNSUBSCRIBE_TYPE,
23
+ type: UNSUBSCRIBE,
24
24
  key: endpoint.key(...args),
25
25
  args,
26
26
  endpoint,
@@ -1,4 +1,4 @@
1
- import { SET_RESPONSE_TYPE } from '../actionTypes.js';
1
+ import { SET_RESPONSE } from '../actionTypes.js';
2
2
  import type Controller from '../controller/Controller.js';
3
3
  import { UnknownError } from '../index.js';
4
4
  import type { Manager, Middleware } from '../types.js';
@@ -16,7 +16,7 @@ export default class LogoutManager implements Manager {
16
16
  middleware: Middleware = controller => next => async action => {
17
17
  await next(action);
18
18
  if (
19
- action.type === SET_RESPONSE_TYPE &&
19
+ action.type === SET_RESPONSE &&
20
20
  action.error &&
21
21
  this.shouldLogout(action.response)
22
22
  ) {
@@ -1,4 +1,4 @@
1
- import { SET_RESPONSE_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js';
1
+ import { SET_RESPONSE, FETCH, RESET } from '../actionTypes.js';
2
2
  import { createSetResponse } from '../controller/actions/index.js';
3
3
  import Controller from '../controller/Controller.js';
4
4
  import type {
@@ -46,7 +46,7 @@ export default class NetworkManager implements Manager {
46
46
  this.controller = controller;
47
47
  return next => action => {
48
48
  switch (action.type) {
49
- case FETCH_TYPE:
49
+ case FETCH:
50
50
  this.handleFetch(action);
51
51
  // This is the only case that causes any state change
52
52
  // It's important to intercept other fetches as we don't want to trigger reducers during
@@ -58,7 +58,7 @@ export default class NetworkManager implements Manager {
58
58
  return next(action);
59
59
  }
60
60
  return Promise.resolve();
61
- case SET_RESPONSE_TYPE:
61
+ case SET_RESPONSE:
62
62
  // only set after new state is computed
63
63
  return next(action).then(() => {
64
64
  if (action.key in this.fetched) {
@@ -79,7 +79,7 @@ export default class NetworkManager implements Manager {
79
79
  }
80
80
  }
81
81
  });
82
- case RESET_TYPE: {
82
+ case RESET: {
83
83
  const rejectors = { ...this.rejectors };
84
84
 
85
85
  this.clearAll();
@@ -112,7 +112,7 @@ export default class NetworkManager implements Manager {
112
112
  /** Used by DevtoolsManager to determine whether to log an action */
113
113
  skipLogging(action: ActionTypes) {
114
114
  /* istanbul ignore next */
115
- return action.type === FETCH_TYPE && action.key in this.fetched;
115
+ return action.type === FETCH && action.key in this.fetched;
116
116
  }
117
117
 
118
118
  allSettled() {
@@ -1,4 +1,4 @@
1
- import { SUBSCRIBE_TYPE, UNSUBSCRIBE_TYPE } from '../actionTypes.js';
1
+ import { SUBSCRIBE, UNSUBSCRIBE } from '../actionTypes.js';
2
2
  import Controller from '../controller/Controller.js';
3
3
  import type {
4
4
  Manager,
@@ -51,14 +51,14 @@ export default class SubscriptionManager<
51
51
  this.controller = controller;
52
52
  return next => action => {
53
53
  switch (action.type) {
54
- case SUBSCRIBE_TYPE:
54
+ case SUBSCRIBE:
55
55
  try {
56
56
  this.handleSubscribe(action);
57
57
  } catch (e) {
58
58
  console.error(e);
59
59
  }
60
60
  return Promise.resolve();
61
- case UNSUBSCRIBE_TYPE:
61
+ case UNSUBSCRIBE:
62
62
  this.handleUnsubscribe(action);
63
63
  return Promise.resolve();
64
64
  default:
@@ -1,7 +1,7 @@
1
1
  import { CoolerArticleResource } from '__tests__/new';
2
2
 
3
3
  import { Controller, initialState } from '../..';
4
- import { FETCH_TYPE, RESET_TYPE } from '../../actionTypes';
4
+ import { FETCH, RESET } from '../../actionTypes';
5
5
  import { createSetResponse } from '../../controller/actions';
6
6
  import LogoutManager from '../LogoutManager.js';
7
7
 
@@ -73,7 +73,7 @@ describe('LogoutManager', () => {
73
73
  await manager.middleware(API)(next)(action);
74
74
 
75
75
  expect(dispatch.mock.calls.length).toBe(1);
76
- expect(dispatch.mock.calls[0][0]?.type).toBe(RESET_TYPE);
76
+ expect(dispatch.mock.calls[0][0]?.type).toBe(RESET);
77
77
  });
78
78
 
79
79
  it('should call custom handleLogout', async () => {
@@ -97,7 +97,7 @@ describe('LogoutManager', () => {
97
97
  });
98
98
 
99
99
  it('should let other actions pass through', async () => {
100
- const action = { type: FETCH_TYPE };
100
+ const action = { type: FETCH };
101
101
  next.mockReset();
102
102
 
103
103
  await manager.middleware(API)(next)(action as any);
@@ -1,7 +1,7 @@
1
1
  import { Endpoint } from '@data-client/endpoint';
2
2
  import { Article, ArticleResource } from '__tests__/new';
3
3
 
4
- import { SET_RESPONSE_TYPE } from '../../actionTypes';
4
+ import { SET_RESPONSE } from '../../actionTypes';
5
5
  import { createFetch } from '../../controller/actions';
6
6
  import Controller from '../../controller/Controller';
7
7
  import NetworkManager from '../../manager/NetworkManager';
@@ -159,7 +159,7 @@ describe('NetworkManager', () => {
159
159
  await new Promise(resolve => setTimeout(resolve, 0));
160
160
 
161
161
  const action: SetResponseAction = {
162
- type: SET_RESPONSE_TYPE,
162
+ type: SET_RESPONSE,
163
163
  endpoint: fetchResolveAction.endpoint,
164
164
  response,
165
165
  args: fetchResolveAction.args,
@@ -195,7 +195,7 @@ describe('NetworkManager', () => {
195
195
  await new Promise(resolve => setTimeout(resolve, 0));
196
196
 
197
197
  const action: SetResponseAction = {
198
- type: SET_RESPONSE_TYPE,
198
+ type: SET_RESPONSE,
199
199
  endpoint: fetchSetWithUpdatersAction.endpoint,
200
200
  response,
201
201
  args: fetchSetWithUpdatersAction.args,
@@ -231,7 +231,7 @@ describe('NetworkManager', () => {
231
231
  await new Promise(resolve => setTimeout(resolve, 0));
232
232
 
233
233
  const action: SetResponseAction = {
234
- type: SET_RESPONSE_TYPE,
234
+ type: SET_RESPONSE,
235
235
  endpoint: fetchRpcWithUpdatersAction.endpoint,
236
236
  response,
237
237
  args: fetchRpcWithUpdatersAction.args,
@@ -267,7 +267,7 @@ describe('NetworkManager', () => {
267
267
  // mutations resolve before dispatch, so we must wait for next tick to see set
268
268
  await new Promise(resolve => setTimeout(resolve, 0));
269
269
  expect(dispatch).toHaveBeenCalledWith({
270
- type: SET_RESPONSE_TYPE,
270
+ type: SET_RESPONSE,
271
271
  endpoint: fetchRpcWithUpdatersAndOptimisticAction.endpoint,
272
272
  response,
273
273
  args: fetchRpcWithUpdatersAndOptimisticAction.args,
@@ -338,7 +338,7 @@ describe('NetworkManager', () => {
338
338
  } catch (error) {
339
339
  expect(next).not.toHaveBeenCalled();
340
340
  expect(dispatch).toHaveBeenCalledWith({
341
- type: SET_RESPONSE_TYPE,
341
+ type: SET_RESPONSE,
342
342
  response: error,
343
343
  key: fetchRejectAction.key,
344
344
  meta: {
@@ -4,7 +4,7 @@ import { actionTypes, Controller, initialState } from '../..';
4
4
  import { SubscribeAction, UnsubscribeAction } from '../../types';
5
5
  import SubscriptionManager, { Subscription } from '../SubscriptionManager.js';
6
6
 
7
- const { UNSUBSCRIBE_TYPE, SUBSCRIBE_TYPE, SET_RESPONSE_TYPE } = actionTypes;
7
+ const { UNSUBSCRIBE, SUBSCRIBE, SET_RESPONSE } = actionTypes;
8
8
 
9
9
  function onError(e: any) {
10
10
  e.preventDefault();
@@ -55,7 +55,7 @@ describe('SubscriptionManager', () => {
55
55
  () => Promise.reject(new Error('Failed'))
56
56
  : () => Promise.resolve(response);
57
57
  return {
58
- type: SUBSCRIBE_TYPE,
58
+ type: SUBSCRIBE,
59
59
  endpoint: PollingArticleResource.get.extend({ fetch }),
60
60
  args: [{ id: response.id }],
61
61
  key: PollingArticleResource.get.key({ id: response.id }),
@@ -65,7 +65,7 @@ describe('SubscriptionManager', () => {
65
65
  response: Record<string, any>,
66
66
  ): UnsubscribeAction {
67
67
  return {
68
- type: UNSUBSCRIBE_TYPE,
68
+ type: UNSUBSCRIBE,
69
69
  endpoint: PollingArticleResource.get,
70
70
  key: PollingArticleResource.get.key({ id: response.id }),
71
71
  args: [{ id: response.id }],
@@ -185,7 +185,7 @@ describe('SubscriptionManager', () => {
185
185
  });
186
186
 
187
187
  it('should let other actions pass through', () => {
188
- const action = { type: SET_RESPONSE_TYPE };
188
+ const action = { type: SET_RESPONSE };
189
189
  next.mockReset();
190
190
 
191
191
  manager.middleware(API)(next)(action as any);