@data-client/core 0.14.1 → 0.14.4

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 (72) hide show
  1. package/dist/index.js +52 -27
  2. package/dist/index.umd.min.js +1 -1
  3. package/legacy/controller/actions/createFetch.js +3 -3
  4. package/legacy/controller/actions/createOptimistic.js +3 -3
  5. package/legacy/controller/actions/createSet.js +2 -2
  6. package/legacy/controller/actions/createSetResponse.js +3 -3
  7. package/legacy/controller/actions/createSubscription.js +3 -3
  8. package/legacy/manager/DevtoolsManager.js +24 -2
  9. package/legacy/manager/NetworkManager.js +5 -2
  10. package/legacy/manager/SubscriptionManager.js +1 -1
  11. package/legacy/manager/applyManager.js +12 -4
  12. package/legacy/manager/devtoolsTypes.js +1 -1
  13. package/legacy/state/reducer/createReducer.js +2 -2
  14. package/legacy/state/reducer/fetchReducer.js +2 -9
  15. package/legacy/state/reducer/setReducer.js +3 -3
  16. package/legacy/state/reducer/setResponseReducer.js +3 -3
  17. package/legacy/types.js +1 -1
  18. package/lib/controller/actions/createFetch.js +3 -3
  19. package/lib/controller/actions/createOptimistic.js +3 -3
  20. package/lib/controller/actions/createSet.js +2 -2
  21. package/lib/controller/actions/createSetResponse.js +3 -3
  22. package/lib/controller/actions/createSubscription.js +3 -3
  23. package/lib/manager/DevtoolsManager.d.ts.map +1 -1
  24. package/lib/manager/DevtoolsManager.js +24 -2
  25. package/lib/manager/NetworkManager.d.ts +4 -1
  26. package/lib/manager/NetworkManager.d.ts.map +1 -1
  27. package/lib/manager/NetworkManager.js +5 -2
  28. package/lib/manager/SubscriptionManager.d.ts +1 -1
  29. package/lib/manager/SubscriptionManager.d.ts.map +1 -1
  30. package/lib/manager/SubscriptionManager.js +1 -1
  31. package/lib/manager/applyManager.d.ts.map +1 -1
  32. package/lib/manager/applyManager.js +12 -4
  33. package/lib/manager/devtoolsTypes.d.ts +5 -3
  34. package/lib/manager/devtoolsTypes.d.ts.map +1 -1
  35. package/lib/manager/devtoolsTypes.js +1 -1
  36. package/lib/state/reducer/createReducer.js +2 -2
  37. package/lib/state/reducer/expireReducer.d.ts +1 -1
  38. package/lib/state/reducer/fetchReducer.d.ts.map +1 -1
  39. package/lib/state/reducer/fetchReducer.js +2 -9
  40. package/lib/state/reducer/setReducer.d.ts +4 -4
  41. package/lib/state/reducer/setReducer.js +3 -3
  42. package/lib/state/reducer/setResponseReducer.d.ts +4 -4
  43. package/lib/state/reducer/setResponseReducer.js +3 -3
  44. package/lib/types.d.ts +1 -1
  45. package/lib/types.d.ts.map +1 -1
  46. package/lib/types.js +1 -1
  47. package/package.json +1 -1
  48. package/src/controller/actions/createFetch.ts +2 -2
  49. package/src/controller/actions/createOptimistic.ts +2 -2
  50. package/src/controller/actions/createSet.ts +1 -1
  51. package/src/controller/actions/createSetResponse.ts +2 -2
  52. package/src/controller/actions/createSubscription.ts +2 -2
  53. package/src/manager/DevtoolsManager.ts +14 -1
  54. package/src/manager/NetworkManager.ts +1 -1
  55. package/src/manager/SubscriptionManager.ts +3 -2
  56. package/src/manager/__tests__/applyManager.ts +38 -0
  57. package/src/manager/__tests__/networkManager.ts +1 -1
  58. package/src/manager/applyManager.ts +16 -3
  59. package/src/manager/devtoolsTypes.ts +9 -3
  60. package/src/state/__tests__/reducer.ts +3 -2
  61. package/src/state/reducer/createReducer.ts +1 -1
  62. package/src/state/reducer/fetchReducer.ts +1 -13
  63. package/src/state/reducer/setReducer.ts +2 -2
  64. package/src/state/reducer/setResponseReducer.ts +2 -2
  65. package/src/types.ts +1 -1
  66. package/ts3.4/manager/NetworkManager.d.ts +4 -1
  67. package/ts3.4/manager/SubscriptionManager.d.ts +1 -1
  68. package/ts3.4/manager/devtoolsTypes.d.ts +5 -3
  69. package/ts3.4/state/reducer/expireReducer.d.ts +1 -1
  70. package/ts3.4/state/reducer/setReducer.d.ts +4 -4
  71. package/ts3.4/state/reducer/setResponseReducer.d.ts +4 -4
  72. package/ts3.4/types.d.ts +1 -1
package/dist/index.js CHANGED
@@ -67,9 +67,9 @@ function createOptimistic(endpoint, args, fetchedAt) {
67
67
  }
68
68
  return {
69
69
  type: OPTIMISTIC_TYPE,
70
- endpoint,
71
- args,
72
70
  key: endpoint.key(...args),
71
+ args,
72
+ endpoint,
73
73
  meta: createMeta((_endpoint$dataExpiryL2 = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL2 : 60000, fetchedAt)
74
74
  };
75
75
  }
@@ -81,15 +81,8 @@ function fetchReducer(state, action) {
81
81
  ...state,
82
82
  optimistic: [...state.optimistic, setAction]
83
83
  };
84
- } else {
85
- // If 'fetch' action reaches the reducer there are no middlewares installed to handle it
86
- /* istanbul ignore next */
87
- if (process.env.NODE_ENV !== 'production') {
88
- console.warn('Fetch appears unhandled - you are likely missing the NetworkManager middleware');
89
- console.warn('See https://dataclient.io/docs/guides/redux for hooking up redux');
90
- }
91
- return state;
92
84
  }
85
+ return state;
93
86
  }
94
87
 
95
88
  function invalidateReducer(state, action) {
@@ -142,10 +135,10 @@ function setReducer(state, action, controller) {
142
135
  } = normalizr.normalize(action.schema, value, action.args, state, action.meta);
143
136
  return {
144
137
  entities,
145
- indexes,
146
138
  endpoints: state.endpoints,
147
- entityMeta,
139
+ indexes,
148
140
  meta: state.meta,
141
+ entityMeta,
149
142
  optimistic: state.optimistic,
150
143
  lastReset: state.lastReset
151
144
  };
@@ -212,9 +205,8 @@ function setResponseReducer(state, action, controller) {
212
205
  }
213
206
  return {
214
207
  entities,
215
- indexes,
216
208
  endpoints,
217
- entityMeta,
209
+ indexes,
218
210
  meta: {
219
211
  ...state.meta,
220
212
  [action.key]: {
@@ -223,6 +215,7 @@ function setResponseReducer(state, action, controller) {
223
215
  prevExpiresAt: (_state$meta$action$ke = state.meta[action.key]) == null ? void 0 : _state$meta$action$ke.expiresAt
224
216
  }
225
217
  },
218
+ entityMeta,
226
219
  optimistic: filterOptimistic(state, action),
227
220
  lastReset: state.lastReset
228
221
  };
@@ -314,8 +307,8 @@ function createReducer(controller) {
314
307
  }
315
308
  const initialState = {
316
309
  entities: {},
317
- indexes: {},
318
310
  endpoints: {},
311
+ indexes: {},
319
312
  meta: {},
320
313
  entityMeta: {},
321
314
  optimistic: [],
@@ -344,9 +337,9 @@ function createUnsubscription(endpoint, {
344
337
  }) {
345
338
  return {
346
339
  type: UNSUBSCRIBE_TYPE,
347
- endpoint,
340
+ key: endpoint.key(...args),
348
341
  args,
349
- key: endpoint.key(...args)
342
+ endpoint
350
343
  };
351
344
  }
352
345
 
@@ -370,10 +363,10 @@ function createSetResponse(endpoint, {
370
363
  }
371
364
  return {
372
365
  type: SET_RESPONSE_TYPE,
373
- endpoint,
366
+ key: endpoint.key(...args),
374
367
  response,
375
368
  args: args.map(ensurePojo$1),
376
- key: endpoint.key(...args),
369
+ endpoint,
377
370
  meta: createMeta(expiryLength, fetchedAt),
378
371
  error
379
372
  };
@@ -386,9 +379,9 @@ function createSet(schema, {
386
379
  }) {
387
380
  return {
388
381
  type: SET_TYPE,
389
- schema,
390
382
  value,
391
383
  args: args.map(ensurePojo$1),
384
+ schema,
392
385
  meta: createMeta(60000, fetchedAt)
393
386
  };
394
387
  }
@@ -435,9 +428,9 @@ function createFetch(endpoint, {
435
428
  };
436
429
  return {
437
430
  type: FETCH_TYPE,
438
- endpoint,
439
- args,
440
431
  key: endpoint.key(...args),
432
+ args,
433
+ endpoint,
441
434
  meta
442
435
  };
443
436
  }
@@ -816,7 +809,10 @@ class ResetError extends Error {
816
809
  * @see https://dataclient.io/docs/api/NetworkManager
817
810
  */
818
811
  class NetworkManager {
819
- constructor(dataExpiryLength = 60000, errorExpiryLength = 1000) {
812
+ constructor({
813
+ dataExpiryLength = 60000,
814
+ errorExpiryLength = 1000
815
+ } = {}) {
820
816
  this.fetched = Object.create(null);
821
817
  this.resolvers = {};
822
818
  this.rejectors = {};
@@ -1063,14 +1059,21 @@ class NetworkManager {
1063
1059
  }
1064
1060
 
1065
1061
  function applyManager(managers, controller) {
1066
- return managers.map(manager => {
1062
+ /* istanbul ignore next */
1063
+ if (process.env.NODE_ENV !== 'production' && !managers.find(mgr => mgr instanceof NetworkManager)) {
1064
+ console.warn('NetworkManager not found; this is a required manager.');
1065
+ console.warn('See https://dataclient.io/docs/guides/redux for hooking up redux');
1066
+ }
1067
+ return managers.map((manager, i) => {
1067
1068
  const middleware = manager.getMiddleware();
1068
1069
  return ({
1069
1070
  dispatch,
1070
1071
  getState
1071
1072
  }) => {
1072
- controller.dispatch = dispatch;
1073
- controller.getState = getState;
1073
+ if (i === 0) {
1074
+ controller.dispatch = dispatch;
1075
+ controller.getState = getState;
1076
+ }
1074
1077
  // controller is a superset of the middleware API
1075
1078
  return middleware(controller);
1076
1079
  };
@@ -1377,6 +1380,27 @@ if (process.env.NODE_ENV !== 'production') {
1377
1380
  DEFAULT_CONFIG = {
1378
1381
  name: `Data Client: ${(_globalThis$document = globalThis.document) == null ? void 0 : _globalThis$document.title}`,
1379
1382
  autoPause: true,
1383
+ features: {
1384
+ pause: true,
1385
+ // start/pause recording of dispatched actions
1386
+ lock: true,
1387
+ // lock/unlock dispatching actions and side effects
1388
+ persist: false,
1389
+ // persist states on page reloading
1390
+ export: true,
1391
+ // export history of actions in a file
1392
+ import: 'custom',
1393
+ // import history of actions from a file
1394
+ jump: true,
1395
+ // jump back and forth (time travelling)
1396
+ skip: true,
1397
+ // skip (cancel) actions
1398
+ reorder: true,
1399
+ // drag and drop actions in the history list
1400
+ dispatch: false,
1401
+ // dispatch custom actions or action creators
1402
+ test: false // generate tests for the selected actions
1403
+ },
1380
1404
  actionSanitizer: action => {
1381
1405
  if (!('endpoint' in action)) return action;
1382
1406
  return {
@@ -1452,6 +1476,7 @@ class DevToolsManager {
1452
1476
  const reducer = createReducer(controller);
1453
1477
  let state = controller.getState();
1454
1478
  return next => action => {
1479
+ const shouldSkip = skipLogging == null ? void 0 : skipLogging(action);
1455
1480
  const ret = next(action);
1456
1481
  if (this.started) {
1457
1482
  // we track state changes here since getState() will only update after a batch commit
@@ -1460,7 +1485,7 @@ class DevToolsManager {
1460
1485
  state = controller.getState();
1461
1486
  }
1462
1487
  ret.then(() => {
1463
- if (skipLogging != null && skipLogging(action)) return;
1488
+ if (shouldSkip) return;
1464
1489
  this.handleAction(action, state.optimistic.reduce(reducer, state));
1465
1490
  });
1466
1491
  return ret;
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@data-client/normalizr")):"function"==typeof define&&define.amd?define(["exports","@data-client/normalizr"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}),e.normalizr)}(this,(function(e,t){"use strict";function s(e,t){const s=Date.now();return{fetchedAt:null!=t?t:s,date:s,expiresAt:s+e}}const i="rdc/fetch",n="rdc/set",r="rdc/setresponse",o="rdc/optimistic",a="rdc/reset",c="rdc/subscribe",l="rdc/unsubscribe",h="rdc/invalidate",d="rdc/invalidateall",u="rdc/expireall",p="rdc/gc";var f=Object.freeze({__proto__:null,FETCH_TYPE:i,SET_TYPE:n,SET_RESPONSE_TYPE:r,OPTIMISTIC_TYPE:o,RESET_TYPE:a,SUBSCRIBE_TYPE:c,UNSUBSCRIBE_TYPE:l,INVALIDATE_TYPE:h,INVALIDATEALL_TYPE:d,EXPIREALL_TYPE:u,GC_TYPE:p});function g(e,t,i){var n;return{type:o,endpoint:e,args:t,key:e.key(...t),meta:s(null!=(n=e.dataExpiryLength)?n:6e4,i)}}class y extends Error{}function m(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:v(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(s)}}),optimistic:v(e,t)})}function v(e,t){return e.optimistic.filter((e=>e.key!==t.key||(e.type===o?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function E(e){return function(s,c){switch(s||(s=b),c.type){case p:return c.entities.forEach((([e,t])=>{var i,n;null==(i=s.entities[e])||delete i[t],null==(n=s.entityMeta[e])||delete n[t]})),c.endpoints.forEach((e=>{delete s.endpoints[e],delete s.meta[e]})),s;case i:return function(e,t){if(t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect){const s=g(t.endpoint,t.args,t.meta.fetchedAt);return Object.assign({},e,{optimistic:[...e.optimistic,s]})}return e}(s,c);case o:case r:return function(e,s,i){if(s.error)return m(e,s,s.response);try{var n;let r;if(s.type===o){if(!s.endpoint.getOptimisticResponse)return e;try{r=s.endpoint.getOptimisticResponse.call(s.endpoint,i.snapshot(e,s.meta.fetchedAt),...s.args)}catch(t){if(t.constructor===y)return e;throw t}}else r=s.response;const{result:a,entities:c,indexes:l,entityMeta:h}=t.normalize(s.endpoint.schema,r,s.args,e,s.meta),d=Object.assign({},e.endpoints,{[s.key]:a});try{if(s.endpoint.update){const e=s.endpoint.update(a,...s.args);Object.keys(e).forEach((t=>{d[t]=e[t](d[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.key}`),console.error(e)}return{entities:c,indexes:l,endpoints:d,entityMeta:h,meta:Object.assign({},e.meta,{[s.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(n=e.meta[s.key])?void 0:n.expiresAt}}),optimistic:v(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.key}\n\nFull Schema: ${JSON.stringify(s.endpoint.schema,void 0,2)}\n\nError:\n${t.message}`,"response"in s&&(t.response=s.response),t.status=400),m(e,s,t)}}(s,c,e);case n:return function(e,s,i){let n;if("function"==typeof s.value){const t=i.get(s.schema,...s.args,e);if(void 0===t)return e;n=s.value(t)}else n=s.value;try{const{entities:i,indexes:r,entityMeta:o}=t.normalize(s.schema,n,s.args,e,s.meta);return{entities:i,indexes:r,endpoints:e.endpoints,entityMeta:o,meta:e.meta,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(s,c,e);case d:case h:return function(e,t){const s=Object.assign({},e.endpoints),i=Object.assign({},e.meta),n=e=>{delete s[e];const t=Object.assign({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===h?n(t.key):Object.keys(s).forEach((e=>{t.testKey(e)&&n(e)})),Object.assign({},e,{endpoints:s,meta:i})}(s,c);case u:return function(e,t){const s=Object.assign({},e.meta);return Object.keys(s).forEach((e=>{t.testKey(e)&&(s[e]=Object.assign({},s[e],{expiresAt:1}))})),Object.assign({},e,{meta:s})}(s,c);case a:return Object.assign({},b,{lastReset:c.date});default:return s}}}const b={entities:{},indexes:{},endpoints:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var L=Object.freeze({__proto__:null,MemoCache:t.MemoCache,INVALID:t.INVALID,initialState:b});function O(e,{args:t}){return{type:c,endpoint:e,args:t,key:e.key(...t)}}function S(e,{args:t}){return{type:l,endpoint:e,args:t,key:e.key(...t)}}var I="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function w(e,{args:t,fetchedAt:i,response:n,error:o=!1}){var a,c;const l=o?null!=(a=e.errorExpiryLength)?a:1e3:null!=(c=e.dataExpiryLength)?c:6e4;return{type:r,endpoint:e,response:n,args:t.map(I),key:e.key(...t),meta:s(l,i),error:o}}function x(e,{args:t,fetchedAt:i,value:r}){return{type:n,schema:e,value:r,args:t.map(I),meta:s(6e4,i)}}function A(){return{type:a,date:Date.now()}}function k(e){return{type:d,testKey:e}}function j(e,{args:t}){return{type:h,key:e.key(...t)}}function _(e,{args:t}){let s=0,n=0;const r=new Promise(((e,t)=>{[s,n]=[e,t]})),o={fetchedAt:Date.now(),resolve:s,reject:n,promise:r};return{type:i,endpoint:e,args:t,key:e.key(...t),meta:o}}function R(e){return{type:u,testKey:e}}var T=Object.freeze({__proto__:null,createSubscription:O,createUnsubscription:S,createSetResponse:w,createSet:x,createReset:A,createOptimistic:g,createMeta:s,createInvalidateAll:k,createInvalidate:j,createFetch:_,createExpireAll:R});function P(e,t){return e.meta[t]}const q=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},D=()=>b;class M{constructor({dispatch:e=q,getState:s=D,memo:i=new t.MemoCache}={}){this.fetch=(e,...s)=>{const i=_(e,{args:s});return this.dispatch(i),e.schema?i.meta.promise.then((i=>t.denormalize(e.schema,i,{},s))):i.meta.promise},this.fetchIfStale=(e,...s)=>{const{data:i,expiresAt:n,expiryStatus:r}=this.getResponse(e,...s,this.getState());return r!==t.ExpiryStatus.Invalid&&Date.now()<=n?i:this.fetch(e,...s)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(j(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch(k((t=>e.testKey(t)))),this.expireAll=e=>this.dispatch(R((t=>e.testKey(t)))),this.resetEntireStore=()=>this.dispatch(A()),this.setResponse=(e,...t)=>{const s=t[t.length-1],i=w(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(i)},this.setError=(e,...t)=>{const s=t[t.length-1],i=w(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(w(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(O(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(S(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new H(this,e,t),this.dispatch=e,this.getState=s,this.memo=i}set(e,...t){const s=t[t.length-1],i=x(e,{args:t.slice(0,t.length-1),value:s});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const s=t[t.length-1],i=t.slice(0,t.length-1),n=e.key(...i),r=P(s,n);return void 0===s.endpoints[n]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...s){const i=s[s.length-1],n=s.slice(0,s.length-1).map(I),r=1!==n.length||null!==n[0],o=r?e.key(...n):"",a=r?i.endpoints[o]:void 0,c=e.schema,l=P(i,o);let h=null==l?void 0:l.expiresAt;const d=void 0===a&&void 0!==c,u=d?this.memo.buildQueryKey(c,n,i.entities,i.indexes,o):a;if(!r)return{data:u,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};let p=!1;if(d)p=!t.validateQueryKey(u);else if(!c||!C(c))return{data:a,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:a&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:h||0};const{data:f,paths:g}=this.memo.denormalize(c,u,i.entities,n);return!h&&p&&(h=1),this.getSchemaResponse(f,g,i.entityMeta,h,e.invalidIfStale||p,l)}get(e,...t){const s=t[t.length-1],i=t.slice(0,t.length-1).map(I);return this.memo.query(e,i,s.entities,s.indexes)}getSchemaResponse(e,s,i,n,r,o={}){const a="symbol"==typeof e;n||(n=function(e,t){let s=1/0;for(const{pk:n,key:r}of e){var i;const e=null==(i=t[r])||null==(i=i[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(s,i));return{data:e,expiryStatus:null!=o&&o.invalidated||a&&(null==o||!o.error)?t.ExpiryStatus.Invalid:a||r?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:n}}}function C(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&C(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?C(t):Object.values(t).some((e=>C(e)))}return!1}class H{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=H.abort,this.state=t,this.controller=e,this.fetchedAt=s}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getError(e,...t){return this.controller.getError(e,...t,this.state)}get(e,...t){return this.controller.get(e,...t,this.state)}}H.abort=new y;class N extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class F{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class z{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Y;Y="undefined"!=typeof navigator&&"function"==typeof addEventListener?F:z;var V=Y;let B={};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=M,e.DefaultConnectionListener=V,e.DevToolsManager=class{constructor(e,t){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},B,e)),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),this.devTools?this.middleware=e=>{this.controller=e;const s=E(e);let i=e.getState();return n=>r=>{const o=n(r);return i=this.started?s(i,r):e.getState(),o.then((()=>{null!=t&&t(r)||this.handleAction(r,i.optimistic.reduce(s,i))})),o}}:this.middleware=()=>e=>t=>e(t)}handleAction(e,t){this.started?this.devTools.send(e,t):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([e,t]))}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===r&&s.error&&this.shouldLogout(s.response)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new M,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=e=>(this.controller=e,t=>s=>{switch(s.type){case i:return this.handleFetch(s),void 0!==s.endpoint.getOptimisticResponse&&s.endpoint.sideEffect?t(s):Promise.resolve();case r:return t(s).then((()=>{if(s.key in this.fetched){var t;const i=null==(t=e.getState().meta[s.key])?void 0:t.error;i?this.handleSet(w(s.endpoint,{args:s.args,response:i,fetchedAt:s.meta.fetchedAt,error:!0})):this.handleSet(s)}}));case a:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(s).then((()=>{for(const t in e)e[t](new N)}))}default:return t(s)}})}skipLogging(e){return e.type===i&&e.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const{resolve:t,reject:s,fetchedAt:i}=e.meta,n=!e.endpoint.sideEffect,r=()=>{let r=e.endpoint(...e.args);return n||(r=(e=>e.then((e=>(t(e),e))).catch((e=>{throw s(e),e})))(r)),r=r.then((t=>{let s=this.getLastReset();return i>=s&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i}),t})).catch((t=>{const s=this.getLastReset();throw i>=s&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i,error:!0}),t})),r};return n?this.throttle(e.key,r,i).then((e=>t(e))).catch((e=>s(e))):r().catch((()=>{}))}handleSet(e){if(e.key in this.fetched){let t;t=e.error?this.rejectors[e.key]:this.resolvers[e.key],t(e.response),this.clear(e.key)}}getMiddleware(){return this.middleware}throttle(e,t,s){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=s,this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,s){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.args,this.key=e.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=s||new V,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=this.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=N,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new M,this.Subscription=e,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case c:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case l:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}})}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].add(s)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].remove(s)&&delete this.subscriptions[t]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=L,e.actionTypes=f,e.actions=T,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:i})=>(t.dispatch=e,t.getState=i,s(t))}))},e.createReducer=E,e.initialState=b,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@data-client/normalizr")):"function"==typeof define&&define.amd?define(["exports","@data-client/normalizr"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}),e.normalizr)}(this,(function(e,t){"use strict";function s(e,t){const s=Date.now();return{fetchedAt:null!=t?t:s,date:s,expiresAt:s+e}}const i="rdc/fetch",n="rdc/set",r="rdc/setresponse",o="rdc/optimistic",a="rdc/reset",c="rdc/subscribe",l="rdc/unsubscribe",h="rdc/invalidate",d="rdc/invalidateall",u="rdc/expireall",p="rdc/gc";var f=Object.freeze({__proto__:null,FETCH_TYPE:i,SET_TYPE:n,SET_RESPONSE_TYPE:r,OPTIMISTIC_TYPE:o,RESET_TYPE:a,SUBSCRIBE_TYPE:c,UNSUBSCRIBE_TYPE:l,INVALIDATE_TYPE:h,INVALIDATEALL_TYPE:d,EXPIREALL_TYPE:u,GC_TYPE:p});function g(e,t,i){var n;return{type:o,key:e.key(...t),args:t,endpoint:e,meta:s(null!=(n=e.dataExpiryLength)?n:6e4,i)}}class y extends Error{}function m(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:v(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(s)}}),optimistic:v(e,t)})}function v(e,t){return e.optimistic.filter((e=>e.key!==t.key||(e.type===o?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function E(e){return function(s,c){switch(s||(s=b),c.type){case p:return c.entities.forEach((([e,t])=>{var i,n;null==(i=s.entities[e])||delete i[t],null==(n=s.entityMeta[e])||delete n[t]})),c.endpoints.forEach((e=>{delete s.endpoints[e],delete s.meta[e]})),s;case i:return function(e,t){if(t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect){const s=g(t.endpoint,t.args,t.meta.fetchedAt);return Object.assign({},e,{optimistic:[...e.optimistic,s]})}return e}(s,c);case o:case r:return function(e,s,i){if(s.error)return m(e,s,s.response);try{var n;let r;if(s.type===o){if(!s.endpoint.getOptimisticResponse)return e;try{r=s.endpoint.getOptimisticResponse.call(s.endpoint,i.snapshot(e,s.meta.fetchedAt),...s.args)}catch(t){if(t.constructor===y)return e;throw t}}else r=s.response;const{result:a,entities:c,indexes:l,entityMeta:h}=t.normalize(s.endpoint.schema,r,s.args,e,s.meta),d=Object.assign({},e.endpoints,{[s.key]:a});try{if(s.endpoint.update){const e=s.endpoint.update(a,...s.args);Object.keys(e).forEach((t=>{d[t]=e[t](d[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.key}`),console.error(e)}return{entities:c,endpoints:d,indexes:l,meta:Object.assign({},e.meta,{[s.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(n=e.meta[s.key])?void 0:n.expiresAt}}),entityMeta:h,optimistic:v(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.key}\n\nFull Schema: ${JSON.stringify(s.endpoint.schema,void 0,2)}\n\nError:\n${t.message}`,"response"in s&&(t.response=s.response),t.status=400),m(e,s,t)}}(s,c,e);case n:return function(e,s,i){let n;if("function"==typeof s.value){const t=i.get(s.schema,...s.args,e);if(void 0===t)return e;n=s.value(t)}else n=s.value;try{const{entities:i,indexes:r,entityMeta:o}=t.normalize(s.schema,n,s.args,e,s.meta);return{entities:i,endpoints:e.endpoints,indexes:r,meta:e.meta,entityMeta:o,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(s,c,e);case d:case h:return function(e,t){const s=Object.assign({},e.endpoints),i=Object.assign({},e.meta),n=e=>{delete s[e];const t=Object.assign({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===h?n(t.key):Object.keys(s).forEach((e=>{t.testKey(e)&&n(e)})),Object.assign({},e,{endpoints:s,meta:i})}(s,c);case u:return function(e,t){const s=Object.assign({},e.meta);return Object.keys(s).forEach((e=>{t.testKey(e)&&(s[e]=Object.assign({},s[e],{expiresAt:1}))})),Object.assign({},e,{meta:s})}(s,c);case a:return Object.assign({},b,{lastReset:c.date});default:return s}}}const b={entities:{},endpoints:{},indexes:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var L=Object.freeze({__proto__:null,MemoCache:t.MemoCache,INVALID:t.INVALID,initialState:b});function O(e,{args:t}){return{type:c,endpoint:e,args:t,key:e.key(...t)}}function S(e,{args:t}){return{type:l,key:e.key(...t),args:t,endpoint:e}}var I="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function x(e,{args:t,fetchedAt:i,response:n,error:o=!1}){var a,c;const l=o?null!=(a=e.errorExpiryLength)?a:1e3:null!=(c=e.dataExpiryLength)?c:6e4;return{type:r,key:e.key(...t),response:n,args:t.map(I),endpoint:e,meta:s(l,i),error:o}}function w(e,{args:t,fetchedAt:i,value:r}){return{type:n,value:r,args:t.map(I),schema:e,meta:s(6e4,i)}}function A(){return{type:a,date:Date.now()}}function k(e){return{type:d,testKey:e}}function j(e,{args:t}){return{type:h,key:e.key(...t)}}function _(e,{args:t}){let s=0,n=0;const r=new Promise(((e,t)=>{[s,n]=[e,t]})),o={fetchedAt:Date.now(),resolve:s,reject:n,promise:r};return{type:i,key:e.key(...t),args:t,endpoint:e,meta:o}}function R(e){return{type:u,testKey:e}}var T=Object.freeze({__proto__:null,createSubscription:O,createUnsubscription:S,createSetResponse:x,createSet:w,createReset:A,createOptimistic:g,createMeta:s,createInvalidateAll:k,createInvalidate:j,createFetch:_,createExpireAll:R});function P(e,t){return e.meta[t]}const q=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},D=()=>b;class M{constructor({dispatch:e=q,getState:s=D,memo:i=new t.MemoCache}={}){this.fetch=(e,...s)=>{const i=_(e,{args:s});return this.dispatch(i),e.schema?i.meta.promise.then((i=>t.denormalize(e.schema,i,{},s))):i.meta.promise},this.fetchIfStale=(e,...s)=>{const{data:i,expiresAt:n,expiryStatus:r}=this.getResponse(e,...s,this.getState());return r!==t.ExpiryStatus.Invalid&&Date.now()<=n?i:this.fetch(e,...s)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(j(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch(k((t=>e.testKey(t)))),this.expireAll=e=>this.dispatch(R((t=>e.testKey(t)))),this.resetEntireStore=()=>this.dispatch(A()),this.setResponse=(e,...t)=>{const s=t[t.length-1],i=x(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(i)},this.setError=(e,...t)=>{const s=t[t.length-1],i=x(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(x(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(O(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(S(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new H(this,e,t),this.dispatch=e,this.getState=s,this.memo=i}set(e,...t){const s=t[t.length-1],i=w(e,{args:t.slice(0,t.length-1),value:s});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const s=t[t.length-1],i=t.slice(0,t.length-1),n=e.key(...i),r=P(s,n);return void 0===s.endpoints[n]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...s){const i=s[s.length-1],n=s.slice(0,s.length-1).map(I),r=1!==n.length||null!==n[0],o=r?e.key(...n):"",a=r?i.endpoints[o]:void 0,c=e.schema,l=P(i,o);let h=null==l?void 0:l.expiresAt;const d=void 0===a&&void 0!==c,u=d?this.memo.buildQueryKey(c,n,i.entities,i.indexes,o):a;if(!r)return{data:u,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};let p=!1;if(d)p=!t.validateQueryKey(u);else if(!c||!C(c))return{data:a,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:a&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:h||0};const{data:f,paths:g}=this.memo.denormalize(c,u,i.entities,n);return!h&&p&&(h=1),this.getSchemaResponse(f,g,i.entityMeta,h,e.invalidIfStale||p,l)}get(e,...t){const s=t[t.length-1],i=t.slice(0,t.length-1).map(I);return this.memo.query(e,i,s.entities,s.indexes)}getSchemaResponse(e,s,i,n,r,o={}){const a="symbol"==typeof e;n||(n=function(e,t){let s=1/0;for(const{pk:n,key:r}of e){var i;const e=null==(i=t[r])||null==(i=i[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(s,i));return{data:e,expiryStatus:null!=o&&o.invalidated||a&&(null==o||!o.error)?t.ExpiryStatus.Invalid:a||r?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:n}}}function C(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&C(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?C(t):Object.values(t).some((e=>C(e)))}return!1}class H{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=H.abort,this.state=t,this.controller=e,this.fetchedAt=s}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getError(e,...t){return this.controller.getError(e,...t,this.state)}get(e,...t){return this.controller.get(e,...t,this.state)}}H.abort=new y;class N extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class F{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class z{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Y;Y="undefined"!=typeof navigator&&"function"==typeof addEventListener?F:z;var V=Y;let B={};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=M,e.DefaultConnectionListener=V,e.DevToolsManager=class{constructor(e,t){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},B,e)),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),this.devTools?this.middleware=e=>{this.controller=e;const s=E(e);let i=e.getState();return n=>r=>{const o=null==t?void 0:t(r),a=n(r);return i=this.started?s(i,r):e.getState(),a.then((()=>{o||this.handleAction(r,i.optimistic.reduce(s,i))})),a}}:this.middleware=()=>e=>t=>e(t)}handleAction(e,t){this.started?this.devTools.send(e,t):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([e,t]))}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===r&&s.error&&this.shouldLogout(s.response)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor({dataExpiryLength:e=6e4,errorExpiryLength:t=1e3}={}){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new M,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=e=>(this.controller=e,t=>s=>{switch(s.type){case i:return this.handleFetch(s),void 0!==s.endpoint.getOptimisticResponse&&s.endpoint.sideEffect?t(s):Promise.resolve();case r:return t(s).then((()=>{if(s.key in this.fetched){var t;const i=null==(t=e.getState().meta[s.key])?void 0:t.error;i?this.handleSet(x(s.endpoint,{args:s.args,response:i,fetchedAt:s.meta.fetchedAt,error:!0})):this.handleSet(s)}}));case a:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(s).then((()=>{for(const t in e)e[t](new N)}))}default:return t(s)}})}skipLogging(e){return e.type===i&&e.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const{resolve:t,reject:s,fetchedAt:i}=e.meta,n=!e.endpoint.sideEffect,r=()=>{let r=e.endpoint(...e.args);return n||(r=(e=>e.then((e=>(t(e),e))).catch((e=>{throw s(e),e})))(r)),r=r.then((t=>{let s=this.getLastReset();return i>=s&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i}),t})).catch((t=>{const s=this.getLastReset();throw i>=s&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i,error:!0}),t})),r};return n?this.throttle(e.key,r,i).then((e=>t(e))).catch((e=>s(e))):r().catch((()=>{}))}handleSet(e){if(e.key in this.fetched){let t;t=e.error?this.rejectors[e.key]:this.resolvers[e.key],t(e.response),this.clear(e.key)}}getMiddleware(){return this.middleware}throttle(e,t,s){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=s,this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,s){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.args,this.key=e.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=s||new V,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=this.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=N,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new M,this.Subscription=e,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case c:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case l:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}})}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].add(s)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].remove(s)&&delete this.subscriptions[t]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=L,e.actionTypes=f,e.actions=T,e.applyManager=function(e,t){return e.map(((e,s)=>{const i=e.getMiddleware();return({dispatch:e,getState:n})=>(0===s&&(t.dispatch=e,t.getState=n),i(t))}))},e.createReducer=E,e.initialState=b,Object.defineProperty(e,"__esModule",{value:!0})}));
@@ -18,10 +18,10 @@ export function createFetch(endpoint, {
18
18
  };
19
19
  return {
20
20
  type: FETCH_TYPE,
21
- endpoint,
22
- args,
23
21
  key: endpoint.key(...args),
22
+ args,
23
+ endpoint,
24
24
  meta
25
25
  };
26
26
  }
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiY3JlYXRlRmV0Y2giLCJlbmRwb2ludCIsImFyZ3MiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIlByb21pc2UiLCJhIiwiYiIsIm1ldGEiLCJmZXRjaGVkQXQiLCJEYXRlIiwibm93IiwidHlwZSIsImtleSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlRmV0Y2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgTkkgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgRkVUQ0hfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmV0Y2hBY3Rpb24sIEZldGNoTWV0YSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogUmVxdWVzdGluZyBhIGZldGNoIHRvIGJlZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGZXRjaDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgeyBhcmdzIH06IHsgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIH0sXG4pOiBGZXRjaEFjdGlvbjxFPiB7XG4gIGxldCByZXNvbHZlOiAodmFsdWU/OiBhbnkgfCBQcm9taXNlTGlrZTxhbnk+KSA9PiB2b2lkID0gMCBhcyBhbnk7XG4gIGxldCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQgPSAwIGFzIGFueTtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKGEsIGIpID0+IHtcbiAgICBbcmVzb2x2ZSwgcmVqZWN0XSA9IFthLCBiXTtcbiAgfSk7XG4gIGNvbnN0IG1ldGE6IEZldGNoTWV0YSA9IHtcbiAgICBmZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgcmVzb2x2ZSxcbiAgICByZWplY3QsXG4gICAgcHJvbWlzZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6IEZFVENIX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgYXJncyxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgICBtZXRhLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxVQUFVLFFBQVEsc0JBQXNCO0FBSWpEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsV0FBV0EsQ0FHekJDLFFBQVcsRUFDWDtFQUFFQztBQUE0QyxDQUFDLEVBQy9CO0VBQ2hCLElBQUlDLE9BQWlELEdBQUcsQ0FBUTtFQUNoRSxJQUFJQyxNQUE4QixHQUFHLENBQVE7RUFDN0MsTUFBTUMsT0FBTyxHQUFHLElBQUlDLE9BQU8sQ0FBTSxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBSztJQUN6QyxDQUFDTCxPQUFPLEVBQUVDLE1BQU0sQ0FBQyxHQUFHLENBQUNHLENBQUMsRUFBRUMsQ0FBQyxDQUFDO0VBQzVCLENBQUMsQ0FBQztFQUNGLE1BQU1DLElBQWUsR0FBRztJQUN0QkMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCVCxPQUFPO0lBQ1BDLE1BQU07SUFDTkM7RUFDRixDQUFDO0VBRUQsT0FBTztJQUNMUSxJQUFJLEVBQUVkLFVBQVU7SUFDaEJFLFFBQVE7SUFDUkMsSUFBSTtJQUNKWSxHQUFHLEVBQUViLFFBQVEsQ0FBQ2EsR0FBRyxDQUFDLEdBQUdaLElBQUksQ0FBQztJQUMxQk87RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiY3JlYXRlRmV0Y2giLCJlbmRwb2ludCIsImFyZ3MiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIlByb21pc2UiLCJhIiwiYiIsIm1ldGEiLCJmZXRjaGVkQXQiLCJEYXRlIiwibm93IiwidHlwZSIsImtleSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlRmV0Y2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgTkkgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgRkVUQ0hfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmV0Y2hBY3Rpb24sIEZldGNoTWV0YSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogUmVxdWVzdGluZyBhIGZldGNoIHRvIGJlZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGZXRjaDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgeyBhcmdzIH06IHsgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIH0sXG4pOiBGZXRjaEFjdGlvbjxFPiB7XG4gIGxldCByZXNvbHZlOiAodmFsdWU/OiBhbnkgfCBQcm9taXNlTGlrZTxhbnk+KSA9PiB2b2lkID0gMCBhcyBhbnk7XG4gIGxldCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQgPSAwIGFzIGFueTtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKGEsIGIpID0+IHtcbiAgICBbcmVzb2x2ZSwgcmVqZWN0XSA9IFthLCBiXTtcbiAgfSk7XG4gIGNvbnN0IG1ldGE6IEZldGNoTWV0YSA9IHtcbiAgICBmZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgcmVzb2x2ZSxcbiAgICByZWplY3QsXG4gICAgcHJvbWlzZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6IEZFVENIX1RZUEUsXG4gICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gICAgYXJncyxcbiAgICBlbmRwb2ludCxcbiAgICBtZXRhLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxVQUFVLFFBQVEsc0JBQXNCO0FBSWpEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsV0FBV0EsQ0FHekJDLFFBQVcsRUFDWDtFQUFFQztBQUE0QyxDQUFDLEVBQy9CO0VBQ2hCLElBQUlDLE9BQWlELEdBQUcsQ0FBUTtFQUNoRSxJQUFJQyxNQUE4QixHQUFHLENBQVE7RUFDN0MsTUFBTUMsT0FBTyxHQUFHLElBQUlDLE9BQU8sQ0FBTSxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBSztJQUN6QyxDQUFDTCxPQUFPLEVBQUVDLE1BQU0sQ0FBQyxHQUFHLENBQUNHLENBQUMsRUFBRUMsQ0FBQyxDQUFDO0VBQzVCLENBQUMsQ0FBQztFQUNGLE1BQU1DLElBQWUsR0FBRztJQUN0QkMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCVCxPQUFPO0lBQ1BDLE1BQU07SUFDTkM7RUFDRixDQUFDO0VBRUQsT0FBTztJQUNMUSxJQUFJLEVBQUVkLFVBQVU7SUFDaEJlLEdBQUcsRUFBRWIsUUFBUSxDQUFDYSxHQUFHLENBQUMsR0FBR1osSUFBSSxDQUFDO0lBQzFCQSxJQUFJO0lBQ0pELFFBQVE7SUFDUlE7RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
@@ -8,10 +8,10 @@ export function createOptimistic(endpoint, args, fetchedAt) {
8
8
  }
9
9
  return {
10
10
  type: OPTIMISTIC_TYPE,
11
- endpoint,
12
- args,
13
11
  key: endpoint.key(...args),
12
+ args,
13
+ endpoint,
14
14
  meta: createMeta((_endpoint$dataExpiryL2 = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL2 : 60000, fetchedAt)
15
15
  };
16
16
  }
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiT1BUSU1JU1RJQ19UWVBFIiwiY3JlYXRlT3B0aW1pc3RpYyIsImVuZHBvaW50IiwiYXJncyIsImZldGNoZWRBdCIsIl9lbmRwb2ludCRkYXRhRXhwaXJ5TCIsIl9lbmRwb2ludCRkYXRhRXhwaXJ5TDIiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwiRXJyb3IiLCJ0eXBlIiwia2V5IiwibWV0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlT3B0aW1pc3RpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IGNyZWF0ZU1ldGEgfSBmcm9tICcuL2NyZWF0ZU1ldGEuanMnO1xuaW1wb3J0IHsgT1BUSU1JU1RJQ19UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBPcHRpbWlzdGljQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pc3RpYzxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICBmZXRjaGVkQXQ6IG51bWJlcixcbik6IE9wdGltaXN0aWNBY3Rpb248RT4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAoZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyAwKSA8IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWdhdGl2ZSBleHBpcnkgbGVuZ3RoIGFyZSBub3QgYWxsb3dlZC4nKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogT1BUSU1JU1RJQ19UWVBFLFxuICAgIGVuZHBvaW50LFxuICAgIGFyZ3MsXG4gICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gICAgbWV0YTogY3JlYXRlTWV0YShlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwLCBmZXRjaGVkQXQpLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxVQUFVLFFBQVEsaUJBQWlCO0FBQzVDLFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFJdEQsT0FBTyxTQUFTQyxnQkFBZ0JBLENBSzlCQyxRQUFXLEVBQ1hDLElBQWlDLEVBQ2pDQyxTQUFpQixFQUNJO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7RUFDckI7RUFDQSxJQUNFQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLGFBQWEsSUFDdEMsRUFBQUoscUJBQUEsR0FBQ0gsUUFBUSxDQUFDUSxnQkFBZ0IsWUFBQUwscUJBQUEsR0FBSSxDQUFDLElBQUksQ0FBQyxFQUNwQztJQUNBLE1BQU0sSUFBSU0sS0FBSyxDQUFDLHlDQUF5QyxDQUFDO0VBQzVEO0VBRUEsT0FBTztJQUNMQyxJQUFJLEVBQUVaLGVBQWU7SUFDckJFLFFBQVE7SUFDUkMsSUFBSTtJQUNKVSxHQUFHLEVBQUVYLFFBQVEsQ0FBQ1csR0FBRyxDQUFDLEdBQUdWLElBQUksQ0FBQztJQUMxQlcsSUFBSSxFQUFFZixVQUFVLEVBQUFPLHNCQUFBLEdBQUNKLFFBQVEsQ0FBQ1EsZ0JBQWdCLFlBQUFKLHNCQUFBLEdBQUksS0FBSyxFQUFFRixTQUFTO0VBQ2hFLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiT1BUSU1JU1RJQ19UWVBFIiwiY3JlYXRlT3B0aW1pc3RpYyIsImVuZHBvaW50IiwiYXJncyIsImZldGNoZWRBdCIsIl9lbmRwb2ludCRkYXRhRXhwaXJ5TCIsIl9lbmRwb2ludCRkYXRhRXhwaXJ5TDIiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwiRXJyb3IiLCJ0eXBlIiwia2V5IiwibWV0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlT3B0aW1pc3RpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IGNyZWF0ZU1ldGEgfSBmcm9tICcuL2NyZWF0ZU1ldGEuanMnO1xuaW1wb3J0IHsgT1BUSU1JU1RJQ19UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBPcHRpbWlzdGljQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pc3RpYzxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICBmZXRjaGVkQXQ6IG51bWJlcixcbik6IE9wdGltaXN0aWNBY3Rpb248RT4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAoZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyAwKSA8IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWdhdGl2ZSBleHBpcnkgbGVuZ3RoIGFyZSBub3QgYWxsb3dlZC4nKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogT1BUSU1JU1RJQ19UWVBFLFxuICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICAgIGFyZ3MsXG4gICAgZW5kcG9pbnQsXG4gICAgbWV0YTogY3JlYXRlTWV0YShlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwLCBmZXRjaGVkQXQpLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxVQUFVLFFBQVEsaUJBQWlCO0FBQzVDLFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFJdEQsT0FBTyxTQUFTQyxnQkFBZ0JBLENBSzlCQyxRQUFXLEVBQ1hDLElBQWlDLEVBQ2pDQyxTQUFpQixFQUNJO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7RUFDckI7RUFDQSxJQUNFQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLGFBQWEsSUFDdEMsRUFBQUoscUJBQUEsR0FBQ0gsUUFBUSxDQUFDUSxnQkFBZ0IsWUFBQUwscUJBQUEsR0FBSSxDQUFDLElBQUksQ0FBQyxFQUNwQztJQUNBLE1BQU0sSUFBSU0sS0FBSyxDQUFDLHlDQUF5QyxDQUFDO0VBQzVEO0VBRUEsT0FBTztJQUNMQyxJQUFJLEVBQUVaLGVBQWU7SUFDckJhLEdBQUcsRUFBRVgsUUFBUSxDQUFDVyxHQUFHLENBQUMsR0FBR1YsSUFBSSxDQUFDO0lBQzFCQSxJQUFJO0lBQ0pELFFBQVE7SUFDUlksSUFBSSxFQUFFZixVQUFVLEVBQUFPLHNCQUFBLEdBQUNKLFFBQVEsQ0FBQ1EsZ0JBQWdCLFlBQUFKLHNCQUFBLEdBQUksS0FBSyxFQUFFRixTQUFTO0VBQ2hFLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
@@ -8,10 +8,10 @@ export function createSet(schema, {
8
8
  }) {
9
9
  return {
10
10
  type: SET_TYPE,
11
- schema,
12
11
  value,
13
12
  args: args.map(ensurePojo),
13
+ schema,
14
14
  meta: createMeta(60000, fetchedAt)
15
15
  };
16
16
  }
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiU0VUX1RZUEUiLCJlbnN1cmVQb2pvIiwiY3JlYXRlU2V0Iiwic2NoZW1hIiwiYXJncyIsImZldGNoZWRBdCIsInZhbHVlIiwidHlwZSIsIm1hcCIsIm1ldGEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIERlbm9ybWFsaXplLFxuICBRdWVyeWFibGUsXG4gIFNjaGVtYUFyZ3MsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgeyBjcmVhdGVNZXRhIH0gZnJvbSAnLi9jcmVhdGVNZXRhLmpzJztcbmltcG9ydCB7IFNFVF9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXRBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuLi9lbnN1cmVQb2pvLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgc2NoZW1hOiBTLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgdmFsdWUsXG4gIH06IHtcbiAgICBhcmdzOiByZWFkb25seSBbLi4uU2NoZW1hQXJnczxTPl07XG4gICAgdmFsdWU6IHt9IHwgKChwcmV2aW91c1ZhbHVlOiBEZW5vcm1hbGl6ZTxTPikgPT4ge30pO1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgfSxcbik6IFNldEFjdGlvbjxTPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX1RZUEUsXG4gICAgc2NoZW1hLFxuICAgIHZhbHVlLFxuICAgIGFyZ3M6IGFyZ3MubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz4sXG4gICAgbWV0YTogY3JlYXRlTWV0YSg2MDAwMCwgZmV0Y2hlZEF0KSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBTUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxRQUFRLFFBQVEsc0JBQXNCO0FBRS9DLE9BQU9DLFVBQVUsTUFBTSxrQkFBa0I7QUFFekMsT0FBTyxTQUFTQyxTQUFTQSxDQUN2QkMsTUFBUyxFQUNUO0VBQ0VDLElBQUk7RUFDSkMsU0FBUztFQUNUQztBQUtGLENBQUMsRUFDYTtFQUNkLE9BQU87SUFDTEMsSUFBSSxFQUFFUCxRQUFRO0lBQ2RHLE1BQU07SUFDTkcsS0FBSztJQUNMRixJQUFJLEVBQUVBLElBQUksQ0FBQ0ksR0FBRyxDQUFDUCxVQUFVLENBQWtCO0lBQzNDUSxJQUFJLEVBQUVWLFVBQVUsQ0FBQyxLQUFLLEVBQUVNLFNBQVM7RUFDbkMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiU0VUX1RZUEUiLCJlbnN1cmVQb2pvIiwiY3JlYXRlU2V0Iiwic2NoZW1hIiwiYXJncyIsImZldGNoZWRBdCIsInZhbHVlIiwidHlwZSIsIm1hcCIsIm1ldGEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIERlbm9ybWFsaXplLFxuICBRdWVyeWFibGUsXG4gIFNjaGVtYUFyZ3MsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgeyBjcmVhdGVNZXRhIH0gZnJvbSAnLi9jcmVhdGVNZXRhLmpzJztcbmltcG9ydCB7IFNFVF9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXRBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuLi9lbnN1cmVQb2pvLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgc2NoZW1hOiBTLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgdmFsdWUsXG4gIH06IHtcbiAgICBhcmdzOiByZWFkb25seSBbLi4uU2NoZW1hQXJnczxTPl07XG4gICAgdmFsdWU6IHt9IHwgKChwcmV2aW91c1ZhbHVlOiBEZW5vcm1hbGl6ZTxTPikgPT4ge30pO1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgfSxcbik6IFNldEFjdGlvbjxTPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0VUX1RZUEUsXG4gICAgdmFsdWUsXG4gICAgYXJnczogYXJncy5tYXAoZW5zdXJlUG9qbykgYXMgU2NoZW1hQXJnczxTPixcbiAgICBzY2hlbWEsXG4gICAgbWV0YTogY3JlYXRlTWV0YSg2MDAwMCwgZmV0Y2hlZEF0KSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBTUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxRQUFRLFFBQVEsc0JBQXNCO0FBRS9DLE9BQU9DLFVBQVUsTUFBTSxrQkFBa0I7QUFFekMsT0FBTyxTQUFTQyxTQUFTQSxDQUN2QkMsTUFBUyxFQUNUO0VBQ0VDLElBQUk7RUFDSkMsU0FBUztFQUNUQztBQUtGLENBQUMsRUFDYTtFQUNkLE9BQU87SUFDTEMsSUFBSSxFQUFFUCxRQUFRO0lBQ2RNLEtBQUs7SUFDTEYsSUFBSSxFQUFFQSxJQUFJLENBQUNJLEdBQUcsQ0FBQ1AsVUFBVSxDQUFrQjtJQUMzQ0UsTUFBTTtJQUNOTSxJQUFJLEVBQUVWLFVBQVUsQ0FBQyxLQUFLLEVBQUVNLFNBQVM7RUFDbkMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
@@ -15,12 +15,12 @@ export function createSetResponse(endpoint, {
15
15
  }
16
16
  return {
17
17
  type: SET_RESPONSE_TYPE,
18
- endpoint,
18
+ key: endpoint.key(...args),
19
19
  response,
20
20
  args: args.map(ensurePojo),
21
- key: endpoint.key(...args),
21
+ endpoint,
22
22
  meta: createMeta(expiryLength, fetchedAt),
23
23
  error
24
24
  };
25
25
  }
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiU0VUX1JFU1BPTlNFX1RZUEUiLCJlbnN1cmVQb2pvIiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbmRwb2ludCIsImFyZ3MiLCJmZXRjaGVkQXQiLCJyZXNwb25zZSIsImVycm9yIiwiX2VuZHBvaW50JGVycm9yRXhwaXJ5IiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMIiwiZXhwaXJ5TGVuZ3RoIiwiZXJyb3JFeHBpcnlMZW5ndGgiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiRXJyb3IiLCJ0eXBlIiwibWFwIiwia2V5IiwibWV0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlU2V0UmVzcG9uc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgUmVzb2x2ZVR5cGUgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgY3JlYXRlTWV0YSB9IGZyb20gJy4vY3JlYXRlTWV0YS5qcyc7XG5pbXBvcnQgeyBTRVRfUkVTUE9OU0VfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2V0UmVzcG9uc2VBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuLi9lbnN1cmVQb2pvLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXRSZXNwb25zZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogRXJyb3I7XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yOiB0cnVlO1xuICB9LFxuKTogU2V0UmVzcG9uc2VBY3Rpb248RT47XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXRSZXNwb25zZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT47XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yPzogZmFsc2U7XG4gIH0sXG4pOiBTZXRSZXNwb25zZUFjdGlvbjxFPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldFJlc3BvbnNlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgcmVzcG9uc2UsXG4gICAgZXJyb3IgPSBmYWxzZSxcbiAgfToge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogYW55O1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgICBlcnJvcj86IGJvb2xlYW47XG4gIH0sXG4pOiBTZXRSZXNwb25zZUFjdGlvbjxFPiB7XG4gIGNvbnN0IGV4cGlyeUxlbmd0aDogbnVtYmVyID1cbiAgICBlcnJvciA/XG4gICAgICAoZW5kcG9pbnQuZXJyb3JFeHBpcnlMZW5ndGggPz8gMTAwMClcbiAgICA6IChlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGV4cGlyeUxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTRVRfUkVTUE9OU0VfVFlQRSxcbiAgICBlbmRwb2ludCxcbiAgICByZXNwb25zZSxcbiAgICBhcmdzOiBhcmdzLm1hcChlbnN1cmVQb2pvKSxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgICBtZXRhOiBjcmVhdGVNZXRhKGV4cGlyeUxlbmd0aCwgZmV0Y2hlZEF0KSxcbiAgICBlcnJvcixcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFFeEQsT0FBT0MsVUFBVSxNQUFNLGtCQUFrQjtBQStCekMsT0FBTyxTQUFTQyxpQkFBaUJBLENBSy9CQyxRQUFXLEVBQ1g7RUFDRUMsSUFBSTtFQUNKQyxTQUFTO0VBQ1RDLFFBQVE7RUFDUkMsS0FBSyxHQUFHO0FBTVYsQ0FBQyxFQUNxQjtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQ3RCLE1BQU1DLFlBQW9CLEdBQ3hCSCxLQUFLLElBQUFDLHFCQUFBLEdBQ0ZMLFFBQVEsQ0FBQ1EsaUJBQWlCLFlBQUFILHFCQUFBLEdBQUksSUFBSSxJQUFBQyxxQkFBQSxHQUNsQ04sUUFBUSxDQUFDUyxnQkFBZ0IsWUFBQUgscUJBQUEsR0FBSSxLQUFNO0VBQ3hDO0VBQ0EsSUFBSUksT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxhQUFhLElBQUlMLFlBQVksR0FBRyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxJQUFJTSxLQUFLLENBQUMseUNBQXlDLENBQUM7RUFDNUQ7RUFFQSxPQUFPO0lBQ0xDLElBQUksRUFBRWpCLGlCQUFpQjtJQUN2QkcsUUFBUTtJQUNSRyxRQUFRO0lBQ1JGLElBQUksRUFBRUEsSUFBSSxDQUFDYyxHQUFHLENBQUNqQixVQUFVLENBQUM7SUFDMUJrQixHQUFHLEVBQUVoQixRQUFRLENBQUNnQixHQUFHLENBQUMsR0FBR2YsSUFBSSxDQUFDO0lBQzFCZ0IsSUFBSSxFQUFFckIsVUFBVSxDQUFDVyxZQUFZLEVBQUVMLFNBQVMsQ0FBQztJQUN6Q0U7RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiU0VUX1JFU1BPTlNFX1RZUEUiLCJlbnN1cmVQb2pvIiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbmRwb2ludCIsImFyZ3MiLCJmZXRjaGVkQXQiLCJyZXNwb25zZSIsImVycm9yIiwiX2VuZHBvaW50JGVycm9yRXhwaXJ5IiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMIiwiZXhwaXJ5TGVuZ3RoIiwiZXJyb3JFeHBpcnlMZW5ndGgiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiRXJyb3IiLCJ0eXBlIiwia2V5IiwibWFwIiwibWV0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVyL2FjdGlvbnMvY3JlYXRlU2V0UmVzcG9uc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbmRwb2ludEludGVyZmFjZSwgUmVzb2x2ZVR5cGUgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgY3JlYXRlTWV0YSB9IGZyb20gJy4vY3JlYXRlTWV0YS5qcyc7XG5pbXBvcnQgeyBTRVRfUkVTUE9OU0VfVFlQRSB9IGZyb20gJy4uLy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2V0UmVzcG9uc2VBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuLi9lbnN1cmVQb2pvLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXRSZXNwb25zZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogRXJyb3I7XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yOiB0cnVlO1xuICB9LFxuKTogU2V0UmVzcG9uc2VBY3Rpb248RT47XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXRSZXNwb25zZTxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT47XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yPzogZmFsc2U7XG4gIH0sXG4pOiBTZXRSZXNwb25zZUFjdGlvbjxFPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldFJlc3BvbnNlPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7XG4gICAgYXJncyxcbiAgICBmZXRjaGVkQXQsXG4gICAgcmVzcG9uc2UsXG4gICAgZXJyb3IgPSBmYWxzZSxcbiAgfToge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogYW55O1xuICAgIGZldGNoZWRBdD86IG51bWJlcjtcbiAgICBlcnJvcj86IGJvb2xlYW47XG4gIH0sXG4pOiBTZXRSZXNwb25zZUFjdGlvbjxFPiB7XG4gIGNvbnN0IGV4cGlyeUxlbmd0aDogbnVtYmVyID1cbiAgICBlcnJvciA/XG4gICAgICAoZW5kcG9pbnQuZXJyb3JFeHBpcnlMZW5ndGggPz8gMTAwMClcbiAgICA6IChlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDYwMDAwKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGV4cGlyeUxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTRVRfUkVTUE9OU0VfVFlQRSxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgICByZXNwb25zZSxcbiAgICBhcmdzOiBhcmdzLm1hcChlbnN1cmVQb2pvKSxcbiAgICBlbmRwb2ludCxcbiAgICBtZXRhOiBjcmVhdGVNZXRhKGV4cGlyeUxlbmd0aCwgZmV0Y2hlZEF0KSxcbiAgICBlcnJvcixcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFFeEQsT0FBT0MsVUFBVSxNQUFNLGtCQUFrQjtBQStCekMsT0FBTyxTQUFTQyxpQkFBaUJBLENBSy9CQyxRQUFXLEVBQ1g7RUFDRUMsSUFBSTtFQUNKQyxTQUFTO0VBQ1RDLFFBQVE7RUFDUkMsS0FBSyxHQUFHO0FBTVYsQ0FBQyxFQUNxQjtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQ3RCLE1BQU1DLFlBQW9CLEdBQ3hCSCxLQUFLLElBQUFDLHFCQUFBLEdBQ0ZMLFFBQVEsQ0FBQ1EsaUJBQWlCLFlBQUFILHFCQUFBLEdBQUksSUFBSSxJQUFBQyxxQkFBQSxHQUNsQ04sUUFBUSxDQUFDUyxnQkFBZ0IsWUFBQUgscUJBQUEsR0FBSSxLQUFNO0VBQ3hDO0VBQ0EsSUFBSUksT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxhQUFhLElBQUlMLFlBQVksR0FBRyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxJQUFJTSxLQUFLLENBQUMseUNBQXlDLENBQUM7RUFDNUQ7RUFFQSxPQUFPO0lBQ0xDLElBQUksRUFBRWpCLGlCQUFpQjtJQUN2QmtCLEdBQUcsRUFBRWYsUUFBUSxDQUFDZSxHQUFHLENBQUMsR0FBR2QsSUFBSSxDQUFDO0lBQzFCRSxRQUFRO0lBQ1JGLElBQUksRUFBRUEsSUFBSSxDQUFDZSxHQUFHLENBQUNsQixVQUFVLENBQUM7SUFDMUJFLFFBQVE7SUFDUmlCLElBQUksRUFBRXJCLFVBQVUsQ0FBQ1csWUFBWSxFQUFFTCxTQUFTLENBQUM7SUFDekNFO0VBQ0YsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
@@ -14,9 +14,9 @@ export function createUnsubscription(endpoint, {
14
14
  }) {
15
15
  return {
16
16
  type: UNSUBSCRIBE_TYPE,
17
- endpoint,
17
+ key: endpoint.key(...args),
18
18
  args,
19
- key: endpoint.key(...args)
19
+ endpoint
20
20
  };
21
21
  }
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVUJTQ1JJQkVfVFlQRSIsIlVOU1VCU0NSSUJFX1RZUEUiLCJjcmVhdGVTdWJzY3JpcHRpb24iLCJlbmRwb2ludCIsImFyZ3MiLCJ0eXBlIiwia2V5IiwiY3JlYXRlVW5zdWJzY3JpcHRpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVN1YnNjcmlwdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IFNVQlNDUklCRV9UWVBFLCBVTlNVQlNDUklCRV9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpYmVBY3Rpb24sIFVuc3Vic2NyaWJlQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFN1YnNjcmliZUFjdGlvbjxFPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU1VCU0NSSUJFX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgYXJncyxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFVuc3Vic2NyaWJlQWN0aW9uPEU+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVTlNVQlNDUklCRV9UWVBFLFxuICAgIGVuZHBvaW50LFxuICAgIGFyZ3MsXG4gICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLGNBQWMsRUFBRUMsZ0JBQWdCLFFBQVEsc0JBQXNCO0FBR3ZFLE9BQU8sU0FBU0Msa0JBQWtCQSxDQUNoQ0MsUUFBVyxFQUNYO0VBQUVDO0FBQTRDLENBQUMsRUFDM0I7RUFDcEIsT0FBTztJQUNMQyxJQUFJLEVBQUVMLGNBQWM7SUFDcEJHLFFBQVE7SUFDUkMsSUFBSTtJQUNKRSxHQUFHLEVBQUVILFFBQVEsQ0FBQ0csR0FBRyxDQUFDLEdBQUdGLElBQUk7RUFDM0IsQ0FBQztBQUNIO0FBRUEsT0FBTyxTQUFTRyxvQkFBb0JBLENBQ2xDSixRQUFXLEVBQ1g7RUFBRUM7QUFBNEMsQ0FBQyxFQUN6QjtFQUN0QixPQUFPO0lBQ0xDLElBQUksRUFBRUosZ0JBQWdCO0lBQ3RCRSxRQUFRO0lBQ1JDLElBQUk7SUFDSkUsR0FBRyxFQUFFSCxRQUFRLENBQUNHLEdBQUcsQ0FBQyxHQUFHRixJQUFJO0VBQzNCLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVUJTQ1JJQkVfVFlQRSIsIlVOU1VCU0NSSUJFX1RZUEUiLCJjcmVhdGVTdWJzY3JpcHRpb24iLCJlbmRwb2ludCIsImFyZ3MiLCJ0eXBlIiwia2V5IiwiY3JlYXRlVW5zdWJzY3JpcHRpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZVN1YnNjcmlwdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IFNVQlNDUklCRV9UWVBFLCBVTlNVQlNDUklCRV9UWVBFIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpYmVBY3Rpb24sIFVuc3Vic2NyaWJlQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFN1YnNjcmliZUFjdGlvbjxFPiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU1VCU0NSSUJFX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgYXJncyxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc3Vic2NyaXB0aW9uPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IFVuc3Vic2NyaWJlQWN0aW9uPEU+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVTlNVQlNDUklCRV9UWVBFLFxuICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICAgIGFyZ3MsXG4gICAgZW5kcG9pbnQsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLGNBQWMsRUFBRUMsZ0JBQWdCLFFBQVEsc0JBQXNCO0FBR3ZFLE9BQU8sU0FBU0Msa0JBQWtCQSxDQUNoQ0MsUUFBVyxFQUNYO0VBQUVDO0FBQTRDLENBQUMsRUFDM0I7RUFDcEIsT0FBTztJQUNMQyxJQUFJLEVBQUVMLGNBQWM7SUFDcEJHLFFBQVE7SUFDUkMsSUFBSTtJQUNKRSxHQUFHLEVBQUVILFFBQVEsQ0FBQ0csR0FBRyxDQUFDLEdBQUdGLElBQUk7RUFDM0IsQ0FBQztBQUNIO0FBRUEsT0FBTyxTQUFTRyxvQkFBb0JBLENBQ2xDSixRQUFXLEVBQ1g7RUFBRUM7QUFBNEMsQ0FBQyxFQUN6QjtFQUN0QixPQUFPO0lBQ0xDLElBQUksRUFBRUosZ0JBQWdCO0lBQ3RCSyxHQUFHLEVBQUVILFFBQVEsQ0FBQ0csR0FBRyxDQUFDLEdBQUdGLElBQUksQ0FBQztJQUMxQkEsSUFBSTtJQUNKRDtFQUNGLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
@@ -21,6 +21,27 @@ if (process.env.NODE_ENV !== 'production') {
21
21
  DEFAULT_CONFIG = {
22
22
  name: `Data Client: ${(_globalThis$document = globalThis.document) == null ? void 0 : _globalThis$document.title}`,
23
23
  autoPause: true,
24
+ features: {
25
+ pause: true,
26
+ // start/pause recording of dispatched actions
27
+ lock: true,
28
+ // lock/unlock dispatching actions and side effects
29
+ persist: false,
30
+ // persist states on page reloading
31
+ export: true,
32
+ // export history of actions in a file
33
+ import: 'custom',
34
+ // import history of actions from a file
35
+ jump: true,
36
+ // jump back and forth (time travelling)
37
+ skip: true,
38
+ // skip (cancel) actions
39
+ reorder: true,
40
+ // drag and drop actions in the history list
41
+ dispatch: false,
42
+ // dispatch custom actions or action creators
43
+ test: false // generate tests for the selected actions
44
+ },
24
45
  actionSanitizer: action => {
25
46
  if (!('endpoint' in action)) return action;
26
47
  return Object.assign({}, action, {
@@ -92,6 +113,7 @@ export default class DevToolsManager {
92
113
  const reducer = createReducer(controller);
93
114
  let state = controller.getState();
94
115
  return next => action => {
116
+ const shouldSkip = skipLogging == null ? void 0 : skipLogging(action);
95
117
  const ret = next(action);
96
118
  if (this.started) {
97
119
  // we track state changes here since getState() will only update after a batch commit
@@ -100,7 +122,7 @@ export default class DevToolsManager {
100
122
  state = controller.getState();
101
123
  }
102
124
  ret.then(() => {
103
- if (skipLogging != null && skipLogging(action)) return;
125
+ if (shouldSkip) return;
104
126
  this.handleAction(action, state.optimistic.reduce(reducer, state));
105
127
  });
106
128
  return ret;
@@ -138,4 +160,4 @@ export default class DevToolsManager {
138
160
  return this.middleware;
139
161
  }
140
162
  }
141
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZWR1Y2VyIiwiREVGQVVMVF9DT05GSUciLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJfZ2xvYmFsVGhpcyRkb2N1bWVudCIsImV4dHJhRW5kcG9pbnRLZXlzIiwic2VyaWFsaXplRW5kcG9pbnQiLCJlbmRwb2ludCIsIl90b0pTT04iLCJfZW5kcG9pbnQkc2NoZW1hIiwic2VyaWFsIiwibmFtZSIsInNjaGVtYSIsInRvSlNPTiIsInNpZGVFZmZlY3QiLCJmb3JFYWNoIiwia2V5IiwiSEFTSU5UTCIsIkludGwiLCJnbG9iYWxUaGlzIiwiZG9jdW1lbnQiLCJ0aXRsZSIsImF1dG9QYXVzZSIsImFjdGlvblNhbml0aXplciIsImFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiIsInNlcmlhbGl6ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJyZXBsYWNlciIsInZhbHVlIiwiaXNGaW5pdGUiLCJlbmRzV2l0aCIsIkRhdGVUaW1lRm9ybWF0IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImZyYWN0aW9uYWxTZWNvbmREaWdpdHMiLCJmb3JtYXQiLCJEZXZUb29sc01hbmFnZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInNraXBMb2dnaW5nIiwic3RhcnRlZCIsImFjdGlvbnMiLCJtYXhCdWZmZXJMZW5ndGgiLCJkZXZUb29scyIsIndpbmRvdyIsIl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18iLCJjb25uZWN0IiwibWF4QWdlIiwic3Vic2NyaWJlIiwibXNnIiwidHlwZSIsImxlbmd0aCIsInN0YXRlIiwiaGFuZGxlQWN0aW9uIiwicGF5bG9hZCIsImNvbnRyb2xsZXIiLCJyZXNldEVudGlyZVN0b3JlIiwibWlkZGxld2FyZSIsInJlZHVjZXIiLCJnZXRTdGF0ZSIsIm5leHQiLCJyZXQiLCJ0aGVuIiwib3B0aW1pc3RpYyIsInJlZHVjZSIsInNlbmQiLCJzbGljZSIsInB1c2giLCJpbml0IiwiY2xlYW51cCIsImdldE1pZGRsZXdhcmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9EZXZ0b29sc01hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8taW5uZXItZGVjbGFyYXRpb25zICovXG5pbXBvcnQgdHlwZSB7IERldlRvb2xzQ29uZmlnIH0gZnJvbSAnLi9kZXZ0b29sc1R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJy4vTG9nb3V0TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBDb250cm9sbGVyLCBFbmRwb2ludEludGVyZmFjZSB9IGZyb20gJy4uL2luZGV4LmpzJztcbmltcG9ydCBjcmVhdGVSZWR1Y2VyIGZyb20gJy4uL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZXIsIFN0YXRlLCBBY3Rpb25UeXBlcyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBEZXZUb29sc0NvbmZpZyB9O1xuXG5sZXQgREVGQVVMVF9DT05GSUcgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3QgZXh0cmFFbmRwb2ludEtleXMgPSBbXG4gICAgJ2RhdGFFeHBpcnlMZW5ndGgnLFxuICAgICdlcnJvckV4cGlyeUxlbmd0aCcsXG4gICAgJ2Vycm9yUG9saWN5JyxcbiAgICAnaW52YWxpZElmU3RhbGUnLFxuICAgICdwb2xsRnJlcXVlbmN5JyxcbiAgICAnZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlJyxcbiAgICAndXBkYXRlJyxcbiAgXTtcblxuICBmdW5jdGlvbiBzZXJpYWxpemVFbmRwb2ludChlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UpIHtcbiAgICBjb25zdCBzZXJpYWw6IGFueSA9IHtcbiAgICAgIG5hbWU6IGVuZHBvaW50Lm5hbWUsXG4gICAgICBzY2hlbWE6IChlbmRwb2ludC5zY2hlbWEgYXMgYW55KT8udG9KU09OPy4oKSA/PyBlbmRwb2ludC5zY2hlbWEsXG4gICAgICBzaWRlRWZmZWN0OiBlbmRwb2ludC5zaWRlRWZmZWN0LFxuICAgIH07XG4gICAgZXh0cmFFbmRwb2ludEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBlbmRwb2ludClcbiAgICAgICAgc2VyaWFsW2tleV0gPSBlbmRwb2ludFtrZXkgYXMga2V5b2YgRW5kcG9pbnRJbnRlcmZhY2VdO1xuICAgIH0pO1xuICAgIHJldHVybiBzZXJpYWw7XG4gIH1cblxuICBjb25zdCBIQVNJTlRMID0gdHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnO1xuICBERUZBVUxUX0NPTkZJRyA9IHtcbiAgICBuYW1lOiBgRGF0YSBDbGllbnQ6ICR7Z2xvYmFsVGhpcy5kb2N1bWVudD8udGl0bGV9YCxcbiAgICBhdXRvUGF1c2U6IHRydWUsXG4gICAgYWN0aW9uU2FuaXRpemVyOiAoYWN0aW9uOiBBY3Rpb25UeXBlcykgPT4ge1xuICAgICAgaWYgKCEoJ2VuZHBvaW50JyBpbiBhY3Rpb24pKSByZXR1cm4gYWN0aW9uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICBlbmRwb2ludDogc2VyaWFsaXplRW5kcG9pbnQoYWN0aW9uLmVuZHBvaW50KSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IHtcbiAgICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXBsYWNlcjpcbiAgICAgICAgSEFTSU5UTCA/XG4gICAgICAgICAgKGtleTogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgIGlzRmluaXRlKHZhbHVlKSAmJlxuICAgICAgICAgICAgICAoa2V5ID09PSAnZGF0ZScgfHwga2V5LmVuZHNXaXRoKCdBdCcpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgc2Vjb25kOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMyxcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBJbnRlZ3JhdGVzIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtZGV2dG9vbHNcbiAqXG4gKiBPcHRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC1kZXZ0b29scy9ibG9iL21haW4vZXh0ZW5zaW9uL2RvY3MvQVBJL0FyZ3VtZW50cy5tZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0RldlRvb2xzTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXZUb29sc01hbmFnZXIgaW1wbGVtZW50cyBNYW5hZ2VyIHtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgbWlkZGxld2FyZTogTWlkZGxld2FyZTtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgZGV2VG9vbHM6IHVuZGVmaW5lZCB8IGFueTtcbiAgcHJvdGVjdGVkIHN0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFjdGlvbnM6IFtBY3Rpb25UeXBlcywgU3RhdGU8dW5rbm93bj5dW10gPSBbXTtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgY29udHJvbGxlcjogQ29udHJvbGxlcjtcbiAgbWF4QnVmZmVyTGVuZ3RoID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbmZpZz86IERldlRvb2xzQ29uZmlnLFxuICAgIHNraXBMb2dnaW5nPzogKGFjdGlvbjogQWN0aW9uVHlwZXMpID0+IGJvb2xlYW4sXG4gICkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhpcy5kZXZUb29scyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gJiZcbiAgICAgICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fLmNvbm5lY3Qoe1xuICAgICAgICAuLi5ERUZBVUxUX0NPTkZJRyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSk7XG4gICAgLy8gd2UgY3V0IGl0IGluIGhhbGYgc28gd2Ugc2hvdWxkIGRvdWJsZSBzbyB3ZSBkb24ndCBsb3NlXG4gICAgaWYgKGNvbmZpZz8ubWF4QWdlKSB0aGlzLm1heEJ1ZmZlckxlbmd0aCA9IGNvbmZpZy5tYXhBZ2UgKiAyO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHRoaXMuZGV2VG9vbHMpIHtcbiAgICAgIHRoaXMuZGV2VG9vbHMuc3Vic2NyaWJlKChtc2c6IGFueSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1zZy50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnU1RBUlQnOlxuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zLmZvckVhY2goKFthY3Rpb24sIHN0YXRlXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKGFjdGlvbiwgc3RhdGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdTVE9QJzpcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRElTUEFUQ0gnOlxuICAgICAgICAgICAgaWYgKG1zZy5wYXlsb2FkLnR5cGUgPT09ICdSRVNFVCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlc2V0RW50aXJlU3RvcmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmRldlRvb2xzKSB7XG4gICAgICB0aGlzLm1pZGRsZXdhcmUgPSBjb250cm9sbGVyID0+IHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICAgICAgY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoY29udHJvbGxlciBhcyBhbnkpO1xuICAgICAgICBsZXQgc3RhdGUgPSBjb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgICAgIHJldHVybiBuZXh0ID0+IGFjdGlvbiA9PiB7XG4gICAgICAgICAgY29uc3QgcmV0ID0gbmV4dChhY3Rpb24pO1xuICAgICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIC8vIHdlIHRyYWNrIHN0YXRlIGNoYW5nZXMgaGVyZSBzaW5jZSBnZXRTdGF0ZSgpIHdpbGwgb25seSB1cGRhdGUgYWZ0ZXIgYSBiYXRjaCBjb21taXRcbiAgICAgICAgICAgIHN0YXRlID0gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBjb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChza2lwTG9nZ2luZz8uKGFjdGlvbikpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKGFjdGlvbiwgc3RhdGUub3B0aW1pc3RpYy5yZWR1Y2UocmVkdWNlciwgc3RhdGUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5taWRkbGV3YXJlID0gKCkgPT4gbmV4dCA9PiBhY3Rpb24gPT4gbmV4dChhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihhY3Rpb246IGFueSwgc3RhdGU6IGFueSkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuZGV2VG9vbHMuc2VuZChhY3Rpb24sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXZvaWQgdGhpcyBnZXR0aW5nIHRvbyBiaWcgaW4gY2FzZSB0aGlzIGlzIGxvbmcgcnVubmluZ1xuICAgICAgLy8gd2UgY3V0IGluIGhhbGYgc28gd2UgYXJlbid0IGNvbnN0YW50bHkgcmVhbGxvY2F0aW5nXG4gICAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCA+IHRoaXMubWF4QnVmZmVyTGVuZ3RoKVxuICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuc2xpY2UodGhpcy5tYXhCdWZmZXJMZW5ndGggLyAyKTtcbiAgICAgIC8vIHF1ZXVlIGFjdGlvbnNcbiAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKFthY3Rpb24sIHN0YXRlXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIGluaXRpYWwgc3RhdGUgaXMgcmVhZHkgKi9cbiAgaW5pdChzdGF0ZTogU3RhdGU8YW55Pikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLmRldlRvb2xzKSB0aGlzLmRldlRvb2xzLmluaXQoc3RhdGUpO1xuICB9XG5cbiAgLyoqIEVuc3VyZXMgYWxsIHN1YnNjcmlwdGlvbnMgYXJlIGNsZWFuZWQgdXAuICovXG4gIGNsZWFudXAoKSB7fVxuXG4gIC8qKiBBdHRhY2hlcyBNYW5hZ2VyIHRvIHN0b3JlXG4gICAqXG4gICAqL1xuICBnZXRNaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiB0aGlzLm1pZGRsZXdhcmU7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBSUEsT0FBT0EsYUFBYSxNQUFNLG1DQUFtQztBQUs3RCxJQUFJQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLElBQUlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssWUFBWSxFQUFFO0VBQUEsSUFBQUMsb0JBQUE7RUFDekMsTUFBTUMsaUJBQWlCLEdBQUcsQ0FDeEIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsUUFBUSxDQUNUO0VBRUQsU0FBU0MsaUJBQWlCQSxDQUFDQyxRQUEyQixFQUFFO0lBQUEsSUFBQUMsT0FBQSxFQUFBQyxnQkFBQTtJQUN0RCxNQUFNQyxNQUFXLEdBQUc7TUFDbEJDLElBQUksRUFBRUosUUFBUSxDQUFDSSxJQUFJO01BQ25CQyxNQUFNLEdBQUFKLE9BQUEsSUFBQUMsZ0JBQUEsR0FBR0YsUUFBUSxDQUFDSyxNQUFNLGFBQWhCSCxnQkFBQSxDQUEwQkksTUFBTSxvQkFBaENKLGdCQUFBLENBQTBCSSxNQUFNLENBQUcsQ0FBQyxZQUFBTCxPQUFBLEdBQUlELFFBQVEsQ0FBQ0ssTUFBTTtNQUMvREUsVUFBVSxFQUFFUCxRQUFRLENBQUNPO0lBQ3ZCLENBQUM7SUFDRFQsaUJBQWlCLENBQUNVLE9BQU8sQ0FBQ0MsR0FBRyxJQUFJO01BQy9CLElBQUlB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
163
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZWR1Y2VyIiwiREVGQVVMVF9DT05GSUciLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJfZ2xvYmFsVGhpcyRkb2N1bWVudCIsImV4dHJhRW5kcG9pbnRLZXlzIiwic2VyaWFsaXplRW5kcG9pbnQiLCJlbmRwb2ludCIsIl90b0pTT04iLCJfZW5kcG9pbnQkc2NoZW1hIiwic2VyaWFsIiwibmFtZSIsInNjaGVtYSIsInRvSlNPTiIsInNpZGVFZmZlY3QiLCJmb3JFYWNoIiwia2V5IiwiSEFTSU5UTCIsIkludGwiLCJnbG9iYWxUaGlzIiwiZG9jdW1lbnQiLCJ0aXRsZSIsImF1dG9QYXVzZSIsImZlYXR1cmVzIiwicGF1c2UiLCJsb2NrIiwicGVyc2lzdCIsImV4cG9ydCIsImltcG9ydCIsImp1bXAiLCJza2lwIiwicmVvcmRlciIsImRpc3BhdGNoIiwidGVzdCIsImFjdGlvblNhbml0aXplciIsImFjdGlvbiIsIk9iamVjdCIsImFzc2lnbiIsInNlcmlhbGl6ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJyZXBsYWNlciIsInZhbHVlIiwiaXNGaW5pdGUiLCJlbmRzV2l0aCIsIkRhdGVUaW1lRm9ybWF0IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImZyYWN0aW9uYWxTZWNvbmREaWdpdHMiLCJmb3JtYXQiLCJEZXZUb29sc01hbmFnZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInNraXBMb2dnaW5nIiwic3RhcnRlZCIsImFjdGlvbnMiLCJtYXhCdWZmZXJMZW5ndGgiLCJkZXZUb29scyIsIndpbmRvdyIsIl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18iLCJjb25uZWN0IiwibWF4QWdlIiwic3Vic2NyaWJlIiwibXNnIiwidHlwZSIsImxlbmd0aCIsInN0YXRlIiwiaGFuZGxlQWN0aW9uIiwicGF5bG9hZCIsImNvbnRyb2xsZXIiLCJyZXNldEVudGlyZVN0b3JlIiwibWlkZGxld2FyZSIsInJlZHVjZXIiLCJnZXRTdGF0ZSIsIm5leHQiLCJzaG91bGRTa2lwIiwicmV0IiwidGhlbiIsIm9wdGltaXN0aWMiLCJyZWR1Y2UiLCJzZW5kIiwic2xpY2UiLCJwdXNoIiwiaW5pdCIsImNsZWFudXAiLCJnZXRNaWRkbGV3YXJlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hbmFnZXIvRGV2dG9vbHNNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWlubmVyLWRlY2xhcmF0aW9ucyAqL1xuaW1wb3J0IHR5cGUgeyBEZXZUb29sc0NvbmZpZyB9IGZyb20gJy4vZGV2dG9vbHNUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcuL0xvZ291dE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5pbXBvcnQgY3JlYXRlUmVkdWNlciBmcm9tICcuLi9zdGF0ZS9yZWR1Y2VyL2NyZWF0ZVJlZHVjZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VyLCBTdGF0ZSwgQWN0aW9uVHlwZXMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgRGV2VG9vbHNDb25maWcgfTtcblxubGV0IERFRkFVTFRfQ09ORklHID0ge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IGV4dHJhRW5kcG9pbnRLZXlzID0gW1xuICAgICdkYXRhRXhwaXJ5TGVuZ3RoJyxcbiAgICAnZXJyb3JFeHBpcnlMZW5ndGgnLFxuICAgICdlcnJvclBvbGljeScsXG4gICAgJ2ludmFsaWRJZlN0YWxlJyxcbiAgICAncG9sbEZyZXF1ZW5jeScsXG4gICAgJ2dldE9wdGltaXN0aWNSZXNwb25zZScsXG4gICAgJ3VwZGF0ZScsXG4gIF07XG5cbiAgZnVuY3Rpb24gc2VyaWFsaXplRW5kcG9pbnQoZW5kcG9pbnQ6IEVuZHBvaW50SW50ZXJmYWNlKSB7XG4gICAgY29uc3Qgc2VyaWFsOiBhbnkgPSB7XG4gICAgICBuYW1lOiBlbmRwb2ludC5uYW1lLFxuICAgICAgc2NoZW1hOiAoZW5kcG9pbnQuc2NoZW1hIGFzIGFueSk/LnRvSlNPTj8uKCkgPz8gZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgc2lkZUVmZmVjdDogZW5kcG9pbnQuc2lkZUVmZmVjdCxcbiAgICB9O1xuICAgIGV4dHJhRW5kcG9pbnRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkgaW4gZW5kcG9pbnQpXG4gICAgICAgIHNlcmlhbFtrZXldID0gZW5kcG9pbnRba2V5IGFzIGtleW9mIEVuZHBvaW50SW50ZXJmYWNlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VyaWFsO1xuICB9XG5cbiAgY29uc3QgSEFTSU5UTCA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcbiAgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgbmFtZTogYERhdGEgQ2xpZW50OiAke2dsb2JhbFRoaXMuZG9jdW1lbnQ/LnRpdGxlfWAsXG4gICAgYXV0b1BhdXNlOiB0cnVlLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBwYXVzZTogdHJ1ZSwgLy8gc3RhcnQvcGF1c2UgcmVjb3JkaW5nIG9mIGRpc3BhdGNoZWQgYWN0aW9uc1xuICAgICAgbG9jazogdHJ1ZSwgLy8gbG9jay91bmxvY2sgZGlzcGF0Y2hpbmcgYWN0aW9ucyBhbmQgc2lkZSBlZmZlY3RzXG4gICAgICBwZXJzaXN0OiBmYWxzZSwgLy8gcGVyc2lzdCBzdGF0ZXMgb24gcGFnZSByZWxvYWRpbmdcbiAgICAgIGV4cG9ydDogdHJ1ZSwgLy8gZXhwb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBpbiBhIGZpbGVcbiAgICAgIGltcG9ydDogJ2N1c3RvbScsIC8vIGltcG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgZnJvbSBhIGZpbGVcbiAgICAgIGp1bXA6IHRydWUsIC8vIGp1bXAgYmFjayBhbmQgZm9ydGggKHRpbWUgdHJhdmVsbGluZylcbiAgICAgIHNraXA6IHRydWUsIC8vIHNraXAgKGNhbmNlbCkgYWN0aW9uc1xuICAgICAgcmVvcmRlcjogdHJ1ZSwgLy8gZHJhZyBhbmQgZHJvcCBhY3Rpb25zIGluIHRoZSBoaXN0b3J5IGxpc3RcbiAgICAgIGRpc3BhdGNoOiBmYWxzZSwgLy8gZGlzcGF0Y2ggY3VzdG9tIGFjdGlvbnMgb3IgYWN0aW9uIGNyZWF0b3JzXG4gICAgICB0ZXN0OiBmYWxzZSwgLy8gZ2VuZXJhdGUgdGVzdHMgZm9yIHRoZSBzZWxlY3RlZCBhY3Rpb25zXG4gICAgfSxcbiAgICBhY3Rpb25TYW5pdGl6ZXI6IChhY3Rpb246IEFjdGlvblR5cGVzKSA9PiB7XG4gICAgICBpZiAoISgnZW5kcG9pbnQnIGluIGFjdGlvbikpIHJldHVybiBhY3Rpb247XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgIGVuZHBvaW50OiBzZXJpYWxpemVFbmRwb2ludChhY3Rpb24uZW5kcG9pbnQpLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHNlcmlhbGl6ZToge1xuICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJlcGxhY2VyOlxuICAgICAgICBIQVNJTlRMID9cbiAgICAgICAgICAoa2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgaXNGaW5pdGUodmFsdWUpICYmXG4gICAgICAgICAgICAgIChrZXkgPT09ICdkYXRlJyB8fCBrZXkuZW5kc1dpdGgoJ0F0JykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtaW51dGU6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOiAzLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIEludGVncmF0ZXMgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC1kZXZ0b29sc1xuICpcbiAqIE9wdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LWRldnRvb2xzL2Jsb2IvbWFpbi9leHRlbnNpb24vZG9jcy9BUEkvQXJndW1lbnRzLm1kXG4gKlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvRGV2VG9vbHNNYW5hZ2VyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERldlRvb2xzTWFuYWdlciBpbXBsZW1lbnRzIE1hbmFnZXIge1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBkZXZUb29sczogdW5kZWZpbmVkIHwgYW55O1xuICBwcm90ZWN0ZWQgc3RhcnRlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYWN0aW9uczogW0FjdGlvblR5cGVzLCBTdGF0ZTx1bmtub3duPl1bXSA9IFtdO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBjb250cm9sbGVyOiBDb250cm9sbGVyO1xuICBtYXhCdWZmZXJMZW5ndGggPSAxMDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29uZmlnPzogRGV2VG9vbHNDb25maWcsXG4gICAgc2tpcExvZ2dpbmc/OiAoYWN0aW9uOiBBY3Rpb25UeXBlcykgPT4gYm9vbGVhbixcbiAgKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aGlzLmRldlRvb2xzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyAmJlxuICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18uY29ubmVjdCh7XG4gICAgICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9KTtcbiAgICAvLyB3ZSBjdXQgaXQgaW4gaGFsZiBzbyB3ZSBzaG91bGQgZG91YmxlIHNvIHdlIGRvbid0IGxvc2VcbiAgICBpZiAoY29uZmlnPy5tYXhBZ2UpIHRoaXMubWF4QnVmZmVyTGVuZ3RoID0gY29uZmlnLm1heEFnZSAqIDI7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdGhpcy5kZXZUb29scykge1xuICAgICAgdGhpcy5kZXZUb29scy5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XG4gICAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdTVEFSVCc6XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaCgoW2FjdGlvbiwgc3RhdGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLCBzdGF0ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1NUT1AnOlxuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdESVNQQVRDSCc6XG4gICAgICAgICAgICBpZiAobXNnLnBheWxvYWQudHlwZSA9PT0gJ1JFU0VUJykge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIucmVzZXRFbnRpcmVTdG9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuZGV2VG9vbHMpIHtcbiAgICAgIHRoaXMubWlkZGxld2FyZSA9IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgICAgICBjb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihjb250cm9sbGVyIGFzIGFueSk7XG4gICAgICAgIGxldCBzdGF0ZSA9IGNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIG5leHQgPT4gYWN0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBzaG91bGRTa2lwID0gc2tpcExvZ2dpbmc/LihhY3Rpb24pO1xuICAgICAgICAgIGNvbnN0IHJldCA9IG5leHQoYWN0aW9uKTtcbiAgICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICAvLyB3ZSB0cmFjayBzdGF0ZSBjaGFuZ2VzIGhlcmUgc2luY2UgZ2V0U3RhdGUoKSB3aWxsIG9ubHkgdXBkYXRlIGFmdGVyIGEgYmF0Y2ggY29tbWl0XG4gICAgICAgICAgICBzdGF0ZSA9IHJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXQudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2tpcCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLCBzdGF0ZS5vcHRpbWlzdGljLnJlZHVjZShyZWR1Y2VyLCBzdGF0ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1pZGRsZXdhcmUgPSAoKSA9PiBuZXh0ID0+IGFjdGlvbiA9PiBuZXh0KGFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogYW55LCBzdGF0ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5kZXZUb29scy5zZW5kKGFjdGlvbiwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdm9pZCB0aGlzIGdldHRpbmcgdG9vIGJpZyBpbiBjYXNlIHRoaXMgaXMgbG9uZyBydW5uaW5nXG4gICAgICAvLyB3ZSBjdXQgaW4gaGFsZiBzbyB3ZSBhcmVuJ3QgY29uc3RhbnRseSByZWFsbG9jYXRpbmdcbiAgICAgIGlmICh0aGlzLmFjdGlvbnMubGVuZ3RoID4gdGhpcy5tYXhCdWZmZXJMZW5ndGgpXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5zbGljZSh0aGlzLm1heEJ1ZmZlckxlbmd0aCAvIDIpO1xuICAgICAgLy8gcXVldWUgYWN0aW9uc1xuICAgICAgdGhpcy5hY3Rpb25zLnB1c2goW2FjdGlvbiwgc3RhdGVdKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gaW5pdGlhbCBzdGF0ZSBpcyByZWFkeSAqL1xuICBpbml0KHN0YXRlOiBTdGF0ZTxhbnk+KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMuZGV2VG9vbHMpIHRoaXMuZGV2VG9vbHMuaW5pdChzdGF0ZSk7XG4gIH1cblxuICAvKiogRW5zdXJlcyBhbGwgc3Vic2NyaXB0aW9ucyBhcmUgY2xlYW5lZCB1cC4gKi9cbiAgY2xlYW51cCgpIHt9XG5cbiAgLyoqIEF0dGFjaGVzIE1hbmFnZXIgdG8gc3RvcmVcbiAgICpcbiAgICovXG4gIGdldE1pZGRsZXdhcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWlkZGxld2FyZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFJQSxPQUFPQSxhQUFhLE1BQU0sbUNBQW1DO0FBSzdELElBQUlDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFFdkIsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLEVBQUU7RUFBQSxJQUFBQyxvQkFBQTtFQUN6QyxNQUFNQyxpQkFBaUIsR0FBRyxDQUN4QixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixRQUFRLENBQ1Q7RUFFRCxTQUFTQyxpQkFBaUJBLENBQUNDLFFBQTJCLEVBQUU7SUFBQSxJQUFBQyxPQUFBLEVBQUFDLGdCQUFBO0lBQ3RELE1BQU1DLE1BQVcsR0FBRztNQUNsQkMsSUFBSSxFQUFFSixRQUFRLENBQUNJLElBQUk7TUFDbkJDLE1BQU0sR0FBQUosT0FBQSxJQUFBQyxnQkFBQSxHQUFHRixRQUFRLENBQUNLLE1BQU0sYUFBaEJILGdCQUFBLENBQTBCSSxNQUFNLG9CQUFoQ0osZ0JBQUEsQ0FBMEJJLE1BQU0sQ0FBRyxDQUFDLFlBQUFMLE9BQUEsR0FBSUQsUUFBUSxDQUFDSyxNQUFNO01BQy9ERSxVQUFVLEVBQUVQLFFBQVEsQ0FBQ087SUFDdkIsQ0FBQztJQUNEVCxpQkFBaUIsQ0FBQ1UsT0FBTyxDQUFDQyxHQUFHLElBQUk7TUFDL0IsSUFBSUEsR0FBRyxJQUFJVCxRQUFRLEVBQ2pCRyxNQUFNLENBQUNNLEdBQUcsQ0FBQyxHQUFHVCxRQUFRLENBQUNTLEdBQUcsQ0FBNEI7SUFDMUQsQ0FBQyxDQUFDO0lBQ0YsT0FB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