@data-client/core 0.15.4 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/index.js +28 -11
- package/dist/index.umd.min.js +1 -1
- package/dist/mock.js +24 -11
- package/legacy/controller/actions/createOptimistic.js +3 -2
- package/legacy/manager/ConnectionListener.js +1 -1
- package/legacy/manager/DevtoolsManager.js +18 -4
- package/legacy/manager/NetworkManager.js +2 -2
- package/legacy/state/GCPolicy.js +4 -1
- package/legacy/state/reducer/setReducer.js +1 -1
- package/legacy/state/reducer/setResponseReducer.js +1 -1
- package/lib/controller/actions/createOptimistic.d.ts.map +1 -1
- package/lib/controller/actions/createOptimistic.js +3 -2
- package/lib/manager/ConnectionListener.d.ts +12 -0
- package/lib/manager/ConnectionListener.d.ts.map +1 -1
- package/lib/manager/ConnectionListener.js +1 -1
- package/lib/manager/DevtoolsManager.d.ts +1 -0
- package/lib/manager/DevtoolsManager.d.ts.map +1 -1
- package/lib/manager/DevtoolsManager.js +19 -5
- package/lib/manager/NetworkManager.d.ts +1 -1
- package/lib/manager/NetworkManager.js +2 -2
- package/lib/state/GCPolicy.d.ts.map +1 -1
- package/lib/state/GCPolicy.js +4 -1
- package/lib/state/reducer/expireReducer.d.ts +2 -2
- package/lib/state/reducer/invalidateReducer.d.ts +2 -2
- package/lib/state/reducer/setReducer.d.ts +1 -27
- package/lib/state/reducer/setReducer.d.ts.map +1 -1
- package/lib/state/reducer/setReducer.js +1 -1
- package/lib/state/reducer/setResponseReducer.d.ts +1 -30
- package/lib/state/reducer/setResponseReducer.d.ts.map +1 -1
- package/lib/state/reducer/setResponseReducer.js +1 -1
- package/package.json +3 -3
- package/src/controller/__tests__/get.ts +8 -8
- package/src/controller/actions/createOptimistic.ts +2 -1
- package/src/manager/ConnectionListener.ts +12 -0
- package/src/manager/DevtoolsManager.ts +21 -6
- package/src/manager/NetworkManager.ts +1 -1
- package/src/state/GCPolicy.ts +3 -0
- package/src/state/__tests__/GCPolicy.test.ts +2 -0
- package/src/state/reducer/setReducer.ts +1 -1
- package/src/state/reducer/setResponseReducer.ts +1 -1
- package/ts3.4/manager/ConnectionListener.d.ts +12 -0
- package/ts3.4/manager/DevtoolsManager.d.ts +1 -0
- package/ts3.4/manager/NetworkManager.d.ts +1 -1
- package/ts3.4/state/reducer/expireReducer.d.ts +2 -2
- package/ts3.4/state/reducer/invalidateReducer.d.ts +2 -2
- package/ts3.4/state/reducer/setReducer.d.ts +1 -27
- package/ts3.4/state/reducer/setResponseReducer.d.ts +1 -30
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @data-client/core
|
|
2
2
|
|
|
3
|
+
## 0.16.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#3753](https://github.com/reactive/data-client/pull/3753) [`e54c9b6`](https://github.com/reactive/data-client/commit/e54c9b6e6a48939263f41496a90387ee614d35f5) - Add `globalThis.__DC_CONTROLLERS__` Map in dev mode for programmatic store access from browser DevTools MCP, React Native debuggers, and other development tooling.
|
|
8
|
+
|
|
9
|
+
Each [DataProvider](/docs/api/DataProvider) registers its [Controller](/docs/api/Controller) keyed by the devtools connection name, supporting multiple providers on the same page.
|
|
10
|
+
|
|
11
|
+
- [#3823](https://github.com/reactive/data-client/pull/3823) [`869f28f`](https://github.com/reactive/data-client/commit/869f28fc651ca5e8b0f935089fc0b8d8ce8585cb) - Fix stack overflow during denormalization of large bidirectional entity graphs.
|
|
12
|
+
|
|
13
|
+
Add entity depth limit (64) to prevent `RangeError: Maximum call stack size exceeded`
|
|
14
|
+
when denormalizing cross-type chains with thousands of unique entities
|
|
15
|
+
(e.g., Department → Building → Department → ...). Entities beyond the depth limit
|
|
16
|
+
are returned with unresolved ids instead of fully denormalized nested objects.
|
|
17
|
+
|
|
18
|
+
The limit can be configured per-Entity with [`static maxEntityDepth`](/rest/api/Entity#maxEntityDepth):
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
class Department extends Entity {
|
|
22
|
+
static maxEntityDepth = 16;
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- [#3774](https://github.com/reactive/data-client/pull/3774) [`0e0ff1a`](https://github.com/reactive/data-client/commit/0e0ff1ab49b1a58477b07dba3dfc73df6d4af3f5) - GCPolicy interval no longer blocks Node.js process exit
|
|
27
|
+
|
|
28
|
+
Call `.unref()` on GCPolicy's `setInterval` in Node.js environments, preventing the GC sweep timer from keeping Jest workers or other Node.js processes alive.
|
|
29
|
+
|
|
30
|
+
- Updated dependencies [[`869f28f`](https://github.com/reactive/data-client/commit/869f28fc651ca5e8b0f935089fc0b8d8ce8585cb)]:
|
|
31
|
+
- @data-client/normalizr@0.16.0
|
|
32
|
+
|
|
33
|
+
## 0.15.7
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- [#3738](https://github.com/reactive/data-client/pull/3738) [`4425a37`](https://github.com/reactive/data-client/commit/4425a371484d3eaed66240ea8c9c1c8874e220f1) - Optimistic updates support FormData
|
|
38
|
+
|
|
39
|
+
- Updated dependencies []:
|
|
40
|
+
- @data-client/normalizr@0.15.4
|
|
41
|
+
|
|
3
42
|
## 0.15.4
|
|
4
43
|
|
|
5
44
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -79,6 +79,11 @@ var actionTypes = /*#__PURE__*/Object.freeze({
|
|
|
79
79
|
UNSUBSCRIBE_TYPE: UNSUBSCRIBE_TYPE
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
+
const ensurePojo =
|
|
83
|
+
// FormData doesn't exist in node
|
|
84
|
+
/* istanbul ignore else we don't run coverage when we test node*/
|
|
85
|
+
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */body => body;
|
|
86
|
+
|
|
82
87
|
function createOptimistic(endpoint, args, fetchedAt) {
|
|
83
88
|
var _endpoint$dataExpiryL, _endpoint$dataExpiryL2;
|
|
84
89
|
/* istanbul ignore next */
|
|
@@ -88,7 +93,7 @@ function createOptimistic(endpoint, args, fetchedAt) {
|
|
|
88
93
|
return {
|
|
89
94
|
type: OPTIMISTIC,
|
|
90
95
|
key: endpoint.key(...args),
|
|
91
|
-
args,
|
|
96
|
+
args: args.map(ensurePojo),
|
|
92
97
|
endpoint,
|
|
93
98
|
meta: createMeta((_endpoint$dataExpiryL2 = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL2 : 60000, fetchedAt)
|
|
94
99
|
};
|
|
@@ -368,11 +373,6 @@ function createUnsubscription(endpoint, {
|
|
|
368
373
|
};
|
|
369
374
|
}
|
|
370
375
|
|
|
371
|
-
const ensurePojo =
|
|
372
|
-
// FormData doesn't exist in node
|
|
373
|
-
/* istanbul ignore else we don't run coverage when we test node*/
|
|
374
|
-
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */body => body;
|
|
375
|
-
|
|
376
376
|
function createSetResponse(endpoint, {
|
|
377
377
|
args,
|
|
378
378
|
fetchedAt,
|
|
@@ -507,6 +507,9 @@ class GCPolicy {
|
|
|
507
507
|
timeout: 1000
|
|
508
508
|
});
|
|
509
509
|
}, this.options.intervalMS);
|
|
510
|
+
if (typeof this.intervalId === 'object' && 'unref' in this.intervalId) {
|
|
511
|
+
this.intervalId.unref();
|
|
512
|
+
}
|
|
510
513
|
}
|
|
511
514
|
cleanup() {
|
|
512
515
|
clearInterval(this.intervalId);
|
|
@@ -1289,7 +1292,7 @@ class NetworkManager {
|
|
|
1289
1292
|
* create a new promise and call fetch.
|
|
1290
1293
|
*
|
|
1291
1294
|
* Note: The new promise is not actually tied to fetch at all,
|
|
1292
|
-
* but is resolved when the expected '
|
|
1295
|
+
* but is resolved when the expected 'receive' action is processed.
|
|
1293
1296
|
* This ensures promises are resolved only once their data is processed
|
|
1294
1297
|
* by the reducer.
|
|
1295
1298
|
*/
|
|
@@ -1714,14 +1717,17 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1714
1717
|
*/
|
|
1715
1718
|
class DevToolsManager {
|
|
1716
1719
|
constructor(config, skipLogging) {
|
|
1720
|
+
var _options$name, _globalThis$document2;
|
|
1717
1721
|
this.started = false;
|
|
1718
1722
|
this.actions = [];
|
|
1719
1723
|
this.maxBufferLength = 100;
|
|
1720
1724
|
/* istanbul ignore next */
|
|
1721
|
-
|
|
1725
|
+
const options = {
|
|
1722
1726
|
...DEFAULT_CONFIG,
|
|
1723
1727
|
...config
|
|
1724
|
-
}
|
|
1728
|
+
};
|
|
1729
|
+
this.devtoolsName = (_options$name = options.name) != null ? _options$name : `Data Client: ${(_globalThis$document2 = globalThis.document) == null ? void 0 : _globalThis$document2.title}`;
|
|
1730
|
+
this.devTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__.connect(options);
|
|
1725
1731
|
// we cut it in half so we should double so we don't lose
|
|
1726
1732
|
if (config != null && config.maxAge) this.maxBufferLength = config.maxAge * 2;
|
|
1727
1733
|
if (skipLogging) this.skipLogging = skipLogging;
|
|
@@ -1740,6 +1746,10 @@ class DevToolsManager {
|
|
|
1740
1746
|
|
|
1741
1747
|
/** Called when initial state is ready */
|
|
1742
1748
|
init(state) {
|
|
1749
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1750
|
+
var _ref, _ref$__DC_CONTROLLERS;
|
|
1751
|
+
((_ref$__DC_CONTROLLERS = (_ref = globalThis).__DC_CONTROLLERS__) != null ? _ref$__DC_CONTROLLERS : _ref.__DC_CONTROLLERS__ = new Map()).set(this.devtoolsName, this.controller);
|
|
1752
|
+
}
|
|
1743
1753
|
if (process.env.NODE_ENV !== 'production' && this.devTools) {
|
|
1744
1754
|
this.devTools.init(state);
|
|
1745
1755
|
this.devTools.subscribe(msg => {
|
|
@@ -1767,7 +1777,14 @@ class DevToolsManager {
|
|
|
1767
1777
|
}
|
|
1768
1778
|
|
|
1769
1779
|
/** Ensures all subscriptions are cleaned up. */
|
|
1770
|
-
cleanup() {
|
|
1780
|
+
cleanup() {
|
|
1781
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1782
|
+
const map = globalThis.__DC_CONTROLLERS__;
|
|
1783
|
+
if ((map == null ? void 0 : map.get(this.devtoolsName)) === this.controller) {
|
|
1784
|
+
map.delete(this.devtoolsName);
|
|
1785
|
+
}
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1771
1788
|
}
|
|
1772
1789
|
_DevToolsManager = DevToolsManager;
|
|
1773
1790
|
(() => {
|
|
@@ -1775,8 +1792,8 @@ _DevToolsManager = DevToolsManager;
|
|
|
1775
1792
|
/* istanbul ignore next */
|
|
1776
1793
|
if (process.env.NODE_ENV !== 'production') {
|
|
1777
1794
|
_DevToolsManager.prototype.middleware = function (controller) {
|
|
1778
|
-
if (!this.devTools) return next => action => next(action);
|
|
1779
1795
|
this.controller = controller;
|
|
1796
|
+
if (!this.devTools) return next => action => next(action);
|
|
1780
1797
|
const reducer = createReducer(controller);
|
|
1781
1798
|
let state = controller.getState();
|
|
1782
1799
|
return next => action => {
|
package/dist/index.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}))}(this,(function(e){"use strict";class t{constructor(){this.localCache=new Map}getEntity(e,t,n,i){const s=t.key;this.localCache.has(s)||this.localCache.set(s,new Map);const r=this.localCache.get(s);return r.get(e)||i(r),r.get(e)}getResults(e,t,n){return{data:n(),paths:[]}}}const n=Symbol("INVALID"),i={};function s(e){return null!==e&&void 0!==e.pk}const r=e=>e[0],o=e=>void 0!==e&&"symbol"!=typeof e,a=(e,t,n,i,s,o)=>{e=r(e);const a=(e=>Array.isArray(e)?e:Object.keys(e).map((t=>e[t])))(t);return a.map((t=>o(e,t,n,i,s)))},c=(e,t,n,i)=>(e=r(e),t.map?t.map((t=>i(e,t))).filter(o):t);function h(){}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},l.apply(null,arguments)}const u=(e,t,n,i,s,r)=>{const o=l({},t),a=Object.keys(e);for(let n=0;n<a.length;n++){const i=a[n],c=r(e[i],t[i],t,i,s);void 0===c?delete o[i]:o[i]=c}return o},d=(e,t,i,s)=>{if(function(e){return!("function"!=typeof e.hasOwnProperty||!(Object.hasOwnProperty.call(e,"__ownerID")||e._map&&Object.hasOwnProperty.call(e._map,"__ownerID")))}(t))return function(e,t,i,s){let r=!1;const o=Object.keys(e).reduce(((t,n)=>{const i=`${n}`,o=s(e[i],t.get(i));return"symbol"==typeof o&&(r=!0),t.has(i)?t.set(i,o):t}),t);return r?n:o}(e,t,0,s);const r=l({},t);let o=!1;const a=Object.keys(e);for(let t=0;t<a.length;t++){const n=a[t],i=s(e[n],r[n]);void 0!==r[n]&&(r[n]=i),"symbol"==typeof i&&(o=!0)}return o?n:r};function p(e,t,n,i){const s={};for(const r of Object.keys(e))s[r]=n(e[r],t,i);return s}const f=(e,t,n,s)=>function(r,o){const a="object"!=typeof o,c=a?e({key:r.key,pk:o}):o;if("symbol"==typeof c)return r.denormalize(c,n,s);if(void 0===c&&a&&""!==o&&"undefined"!==o)return t.getEntity(o,r,i,(e=>{e.set(o,void 0)}));if("object"!=typeof c||null===c)return c;let h=a?o:r.pk(c,void 0,void 0,n);return void 0===h||""===h||"undefined"===h?function(e){const t=new Map;return e(t),t.get("")}((e=>y(r,c,"",e,n,s))):("string"!=typeof h&&(h=`${h}`),t.getEntity(h,r,c,(e=>y(r,c,h,e,n,s))))};function y(e,t,i,s,r,o){const a=e.createIfValid(t);void 0===a?s.set(i,n):(s.set(i,a),s.set(i,e.denormalize(a,r,o)))}const g=(e,t,n)=>{const i=f(e,t,n,r);function r(e,t){if(!e)return t;if(null==t)return t;if("function"==typeof e.denormalize)return s(e)?i(e,t):e.denormalize(t,n,r);if("function"==typeof e)return e(t);if("object"==typeof e){return(Array.isArray(e)?c:d)(e,t,n,r)}return t}return(e,n)=>{const i=Object(n)===n&&Object(e)===e;return t.getResults(n,i,(()=>r(e,n)))}};class m{constructor({entities:e,indexes:t}){this.entities=e,this.indexes=t}tracked(e){const t=this,i=[{path:[""],entity:e}];return[{INVALID:n,getIndex(...e){const n=t.getIndex(...e);return i.push({path:e,entity:n}),t.getIndexEnd(n,e[2])},getEntity(...e){const n=t.getEntity(...e);return i.push({path:e,entity:n}),n},getEntities(e){const n=t.getEntitiesObject(e);return i.push({path:[e],entity:n}),t.getEntities(e)}},i]}}class v extends m{constructor(e){super(e)}getEntitiesObject(e){return this.entities[e]}getEntities(e){const t=this.entities[e];if(void 0!==t)return{keys:()=>Object.keys(t),entries:()=>Object.entries(t)}}getEntity(e,t){var n;return null==(n=this.entities[e])?void 0:n[t]}getIndex(e,t){var n;return null==(n=this.indexes[e])?void 0:n[t]}getIndexEnd(e,t){return null==e?void 0:e[t]}}const E={QueryDelegate:v,getEntities:e=>({key:t,pk:n})=>{var i;return null==(i=e[t])?void 0:i[n]}};class w{constructor(){this.next=new WeakMap,this.nextPath=void 0}get(e,t){let n=this.next.get(e);if(!n)return x;for(;n.nextPath;){var s;const e=null!=(s=t(n.nextPath))?s:i;if(n=n.next.get(e),!n)return x}return[n.value,n.journey]}set(e,t){if(e.length<1)throw new k;let n=this;for(const{path:t,entity:s}of e){let e=n.next.get(s);e||(e=new b,n.next.set(null!=s?s:i,e)),n.nextPath=t,n=e}n.nextPath=void 0,n.value=t,n.journey=e.map((e=>e.path))}}const x=[void 0,void 0];class b{constructor(){this.next=new WeakMap,this.nextPath=void 0,this.value=void 0,this.journey=[]}}class k extends Error{constructor(...e){super(...e),this.message="Keys must include at least one member"}}class I extends v{constructor(e,t){super(e),this.newEntities=new Map,this.newIndexes=new Map,this.entitiesMeta=e.entitiesMeta,this.meta=t,this.checkLoop=function(){const e=new Map;return function(t,n,i){let s=e.get(t);s||(s=new Map,e.set(t,s));let r=s.get(n);return r||(r=new Set,s.set(n,r)),!!r.has(i)||(r.add(i),!1)}}()}getNewEntity(e,t){return this.getNewEntities(e).get(t)}getNewEntities(e){return this.newEntities.has(e)||(this.newEntities.set(e,new Map),this.entities[e]=l({},this.entities[e]),this.entitiesMeta[e]=l({},this.entitiesMeta[e])),this.newEntities.get(e)}getNewIndexes(e){return this.newIndexes.has(e)||(this.newIndexes.set(e,new Map),this.indexes[e]=l({},this.indexes[e])),this.newIndexes.get(e)}mergeEntity(e,t,n){const i=e.key;let s=n,r=this.meta,o=this.getNewEntity(i,t);if(o)s=e.merge(o,n);else if(o=this.getEntity(i,t),o){const a=this.getMeta(i,t);s=e.mergeWithStore(a,r,o,n),r=e.mergeMetaWithStore(a,r,o,n)}this.setEntity(e,t,s,r)}setEntity(e,t,i,s=this.meta){const r=e.key,o=this.getNewEntities(r),a=!o.has(t);o.set(t,i),e.indexes&&function(e,t,i,s,r,o){for(const a of t){i.has(a)||i.set(a,s[a]={});const t=i.get(a);o[e]&&delete t[o[e][a]],o&&o[e]&&o[e][a]!==r[a]&&(t[o[e][a]]=n),a in r&&(t[r[a]]=e)}}(t,e.indexes,this.getNewIndexes(r),this.indexes[r],i,this.entities[r]),this._setEntity(r,t,i),a&&this._setMeta(r,t,s)}invalidate({key:e},t){this.setEntity({key:e},t,n)}_setEntity(e,t,n){this.entities[e][t]=n}_setMeta(e,t,n){this.entitiesMeta[e][t]=n}getMeta(e,t){return this.entitiesMeta[e][t]}}const A=(e,t,n=[],{entities:i,indexes:s,entitiesMeta:r}=L,o={fetchedAt:0,date:Date.now(),expiresAt:1/0})=>{if(null==e)return{result:t,entities:i,indexes:s,entitiesMeta:r};const c=function(e){return["object","function"].includes(typeof e)?"object":typeof e}(e);if(null===t||typeof t!==c&&(void 0===e.key||void 0!==e.pk||"string"!=typeof t))throw new Error(`Unexpected input given to normalize. Expected type to be "${c}", found "${null===t?"null":typeof t}".`);const h={result:"",entities:l({},i),indexes:l({},s),entitiesMeta:l({},r)},d=(e=>{const t=(n,i,s,r,o)=>i&&n?n.normalize&&"function"==typeof n.normalize?"object"!=typeof i?n.pk?`${i}`:i:n.normalize(i,s,r,o,t,e):"object"!=typeof i||"object"!=typeof n?i:(Array.isArray(n)?a:u)(n,i,s,r,o,t):i;return t})(new I(h,o));return h.result=d(e,t,t,void 0,n),h};const L={entities:{},indexes:{},entitiesMeta:{}};class S{constructor(e,t,n){this.dependencies=[],this.cycleCache=new Map,this.cycleIndex=-1,this.localCache=new Map,this._getEntity=e,this._getCache=t,this._resultCache=n}getEntity(e,t,n,i){const s=t.key,{localCacheKey:r,cycleCacheKey:o}=this.getCacheKey(s);if(r.get(e))o.has(e)?this.cycleIndex=o.get(e):this.dependencies.push({path:{key:s,pk:e},entity:n});else{const a=this._getCache(e,t),[c,h]=a.get(n,this._getEntity);if(h)return r.set(e,c.value),this.dependencies.push(...c.dependencies),c.value;{const t=this.dependencies.length;o.set(e,t),this.dependencies.push({path:{key:s,pk:e},entity:n}),i(r),o.delete(e);const c=this.dependencies.slice(-1===this.cycleIndex?t:this.cycleIndex),h={dependencies:c,value:r.get(e)};a.set(c,h),this.cycleIndex===t&&(this.cycleIndex=-1)}}return r.get(e)}getCacheKey(e){this.localCache.has(e)||this.localCache.set(e,new Map),this.cycleCache.has(e)||this.cycleCache.set(e,new Map);return{localCacheKey:this.localCache.get(e),cycleCacheKey:this.cycleCache.get(e)}}getResults(e,t,n){if(!t)return{data:n(),paths:this.paths()};let[i,s]=this._resultCache.get(e,this._getEntity);return void 0===s?(i=n(),s=this.paths(),this.dependencies.unshift({path:{key:"",pk:""},entity:e}),this._resultCache.set(this.dependencies,i)):s.shift(),{data:i,paths:s}}paths(){return this.dependencies.map((e=>e.path))}}function M(e){return void 0!==e&&(!(e&&"object"==typeof e&&!Array.isArray(e))||Object.values(e).every(M))}class C{constructor(e=E){var t;this.endpoints=new w,this.queryKeys=new Map,this.policy=e,this._getCache=(t=new Map,(e,n)=>{var i;const s=n.key,r=null!=(i=n.cacheWith)?i:n;t.has(s)||t.set(s,new Map);const o=t.get(s);o.has(e)||o.set(e,new WeakMap);const a=o.get(e);let c=a.get(r);return c||(c=new w,a.set(r,c)),c})}denormalize(e,t,n,i=[]){if(void 0===e)return{data:t,paths:[]};if(void 0===t)return{data:void 0,paths:[]};const s=this.policy.getEntities(n);return g(s,new S(s,this._getCache,this.endpoints),i)(e,t)}query(e,t,n,i=JSON.stringify(t)){const s=this.buildQueryKey(e,t,n,i);return s?this.denormalize(e,s,n.entities,t):{data:void 0,paths:[]}}buildQueryKey(e,t,n,i=JSON.stringify(t)){if("object"!=typeof e&&"function"!=typeof e.queryKey||!e)return e;let s=this.queryKeys.get(i);s||(s=new w,this.queryKeys.set(i,s));const r=new this.policy.QueryDelegate(n);let[o,a]=s.get(e,(c=r,e=>c[["","getEntitiesObject","getEntity","getIndex"][e.length]](...e)));var c;if(!a){const[n,i]=r.tracked(e);o=function(e){return function t(n,i){return function(e){return!!e&&"function"==typeof e.queryKey}(n)?n.queryKey(i,t,e):"object"==typeof n&&n?(Array.isArray(n)?h:p)(n,i,t,e):n}}(n)(e,t),s.set(i,o)}return o}}var O={Invalid:1,InvalidIfStale:2,Valid:3};function _(e,t){const n=Date.now();return{fetchedAt:null!=t?t:n,date:n,expiresAt:n+e}}const R="rdc/fetch",P="rdc/set",j="rdc/setresponse",T="rdc/optimistic",q="rdc/reset",D="rdc/subscribe",N="rdc/unsubscribe",K="rdc/invalidate",z="rdc/invalidateall",Q="rdc/expireall",H="rdc/gc",F=R,V=P,B=j,U=T,Y=q,$=D,W=N,X=K,G=z,J=Q,Z=H;var ee=Object.freeze({__proto__:null,EXPIREALL:Q,EXPIREALL_TYPE:J,FETCH:R,FETCH_TYPE:F,GC:H,GC_TYPE:Z,INVALIDATE:K,INVALIDATEALL:z,INVALIDATEALL_TYPE:G,INVALIDATE_TYPE:X,OPTIMISTIC:T,OPTIMISTIC_TYPE:U,RESET:q,RESET_TYPE:Y,SET:P,SET_RESPONSE:j,SET_RESPONSE_TYPE:B,SET_TYPE:V,SUBSCRIBE:D,SUBSCRIBE_TYPE:$,UNSUBSCRIBE:N,UNSUBSCRIBE_TYPE:W});function te(e,t,n){var i;return{type:T,key:e.key(...t),args:t,endpoint:e,meta:_(null!=(i=e.dataExpiryLength)?i:6e4,n)}}class ne extends Error{}function ie(e,t,n){return"AbortError"===n.name?l({},e,{optimistic:se(e,t)}):l({},e,{meta:l({},e.meta,{[t.key]:{date:t.meta.date,fetchedAt:t.meta.fetchedAt,expiresAt:t.meta.expiresAt,error:n,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(n)}}),optimistic:se(e,t)})}function se(e,t){return e.optimistic.filter((e=>e.key!==t.key||(e.type===T?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}const re={entities:{},endpoints:{},indexes:{},meta:{},entitiesMeta:{},optimistic:[],lastReset:0};var oe=Object.freeze({__proto__:null,INVALID:n,MemoCache:C,initialState:re});function ae(e,{args:t}){return{type:D,key:e.key(...t),args:t,endpoint:e}}function ce(e,{args:t}){return{type:N,key:e.key(...t),args:t,endpoint:e}}const he="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function le(e,{args:t,fetchedAt:n,response:i,error:s=!1}){var r,o;const a=s?null!=(r=e.errorExpiryLength)?r:1e3:null!=(o=e.dataExpiryLength)?o:6e4;return{type:j,key:e.key(...t),response:i,args:t.map(he),endpoint:e,meta:_(a,n),error:s}}function ue(e,{args:t,fetchedAt:n,value:i}){return{type:P,value:i,args:t.map(he),schema:e,meta:_(6e4,n)}}function de(){return{type:q,date:Date.now()}}function pe(e){return{type:z,testKey:e}}function fe(e,{args:t}){return{type:K,key:e.key(...t)}}function ye(e,{args:t}){let n=0,i=0;const s=new Promise(((e,t)=>{[n,i]=[e,t]})),r={fetchedAt:Date.now(),resolve:n,reject:i,promise:s};return{type:R,key:e.key(...t),args:t,endpoint:e,meta:r}}function ge(e){return{type:Q,testKey:e}}var me=Object.freeze({__proto__:null,createExpireAll:ge,createFetch:ye,createInvalidate:fe,createInvalidateAll:pe,createMeta:_,createOptimistic:te,createReset:de,createSet:ue,createSetResponse:le,createSubscription:ae,createUnsubscription:ce});class ve{init(){}cleanup(){}createCountRef(){return()=>()=>{}}}function Ee(e,t){return e.meta[t]}const we=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},xe=()=>re;class be{constructor({dispatch:e=we,getState:n=xe,memo:i=new C,gcPolicy:s=new ve}={}){this.fetch=(e,...n)=>{const i=ye(e,{args:n});return this.dispatch(i),e.schema?i.meta.promise.then((i=>function(e,n,i,s=[]){return void 0===e||void 0===n?n:g(E.getEntities(i),new t,s)(e,n).data}(e.schema,i,{},n))):i.meta.promise},this.fetchIfStale=(e,...t)=>{const{data:n,expiresAt:i,expiryStatus:s}=this.getResponseMeta(e,...t,this.getState());return s!==O.Invalid&&Date.now()<=i?n:this.fetch(e,...t)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(fe(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch(pe((t=>e.testKey(t)))),this.expireAll=e=>this.dispatch(ge((t=>e.testKey(t)))),this.resetEntireStore=()=>this.dispatch(de()),this.setResponse=(e,...t)=>{const n=t[t.length-1],i=le(e,{args:t.slice(0,t.length-1),response:n});return this.dispatch(i)},this.setError=(e,...t)=>{const n=t[t.length-1],i=le(e,{args:t.slice(0,t.length-1),response:n,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(le(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(ae(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(ce(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new Ie(this,e,t),this._dispatch=e,this.getState=n,this.memo=i,this.gcPolicy=s}set dispatch(e){this._dispatch=e}get dispatch(){return this._dispatch}bindMiddleware({dispatch:e,getState:t}){this._dispatch=e,this.getState=t}set(e,...t){const n=t[t.length-1],i=ue(e,{args:t.slice(0,t.length-1),value:n});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const n=t[t.length-1],i=t.slice(0,t.length-1),s=e.key(...i),r=Ee(n,s);return void 0===n.endpoints[s]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...t){return this.getResponseMeta(e,...t)}getResponseMeta(e,...t){const[n,i]=Ae(t),s=1!==i.length||null!==i[0],r=s?e.key(...i):"",o=s?n.endpoints[r]:void 0,a=e.schema,c=Ee(n,r);let h=null==c?void 0:c.expiresAt;const l=void 0===o&&void 0!==a,u=l?this.memo.buildQueryKey(a,i,n,r):o;if(!s)return{data:u,expiryStatus:O.Valid,expiresAt:1/0,countRef:()=>()=>{}};let d=!1;if(l)d=!M(u);else if(!a||!ke(a))return{data:o,expiryStatus:this.getExpiryStatus(!o,!!e.invalidIfStale,c),expiresAt:h||0,countRef:this.gcPolicy.createCountRef({key:r})};const{data:p,paths:f}=this.memo.denormalize(a,u,n.entities,i);return h||(h=d?1:function(e,t){let n=1/0;for(const{key:s,pk:r}of e){var i;const e=null==(i=t[s])||null==(i=i[r])?void 0:i.expiresAt;e<n&&(n=e)}return n}(f,n.entitiesMeta)),{data:p,expiryStatus:this.getExpiryStatus("symbol"==typeof p,!!e.invalidIfStale||d,c),expiresAt:h,countRef:this.gcPolicy.createCountRef({key:r,paths:f})}}get(e,...t){const[n,i]=Ae(t),{data:s}=this.memo.query(e,i,n);return"symbol"==typeof s?void 0:s}getQueryMeta(e,...t){const[n,i]=Ae(t),{data:s,paths:r}=this.memo.query(e,i,n);return{data:"symbol"==typeof s?void 0:s,countRef:this.gcPolicy.createCountRef({paths:r})}}getExpiryStatus(e,t,n={}){return n.invalidated||e&&!n.error?O.Invalid:e||t?O.InvalidIfStale:O.Valid}}function ke(e){if(s(e))return!0;if(Array.isArray(e))return 0!==e.length&&ke(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?ke(t):Object.values(t).some((e=>ke(e)))}return!1}class Ie{constructor(e,t,n=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=Ie.abort,this.state=t,this.controller=e,this.fetchedAt=n}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getResponseMeta(e,...t){return this.controller.getResponseMeta(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)}getQueryMeta(e,...t){return this.controller.getQueryMeta(e,...t,this.state)}}function Ae(e){const t=e.length,n=new Array(t-1);for(let i=0;i<t-1;i++)n[i]=he(e[i]);return[e[t-1],n]}Ie.abort=new ne;class Le extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class Se{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 Me{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Ce;Ce="undefined"!=typeof navigator&&"function"==typeof addEventListener?Se:Me;var Oe=Ce;let _e={};class Re{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(l({},_e,e)),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),t&&(this.skipLogging=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){}cleanup(){}}Re.prototype.middleware=()=>e=>t=>e(t);e.Controller=be,e.DefaultConnectionListener=Oe,e.DevToolsManager=Re,e.ExpiryStatus=O,e.GCPolicy=class{constructor({intervalMS:e=3e5,expiryMultiplier:t=2,expiresAt:n}={}){this.endpointCount=new Map,this.entityCount=new Map,this.endpointsQ=new Set,this.entitiesQ=[],n&&(this.expiresAt=n.bind(this)),this.options={intervalMS:e,expiryMultiplier:t}}init(e){this.controller=e,this.intervalId=setInterval((()=>{this.idleCallback((()=>this.runSweep()),{timeout:1e3})}),this.options.intervalMS)}cleanup(){clearInterval(this.intervalId)}createCountRef({key:e,paths:t=[]}){return()=>{var n;return e&&this.endpointCount.set(e,(null!=(n=this.endpointCount.get(e))?n:0)+1),t.forEach((e=>{var t;const{key:n,pk:i}=e;this.entityCount.has(n)||this.entityCount.set(n,new Map);const s=this.entityCount.get(n);s.set(i,(null!=(t=s.get(i))?t:0)+1)})),()=>{if(e){const t=this.endpointCount.get(e);void 0!==t&&(t<=1?(this.endpointCount.delete(e),this.endpointsQ.add(e)):this.endpointCount.set(e,t-1))}t.forEach((e=>{const{key:t,pk:n}=e;if(!this.entityCount.has(t))return;const i=this.entityCount.get(t),s=i.get(n);void 0!==s&&(s<=1?(i.delete(n),this.entitiesQ.push(e)):i.set(n,s-1))}))}}}expiresAt({fetchedAt:e,expiresAt:t}){return Math.max((t-e)*this.options.expiryMultiplier,12e4)+e}runSweep(){const e=this.controller.getState(),t=[],n=[],i=Date.now(),s=new Set;for(const t of this.endpointsQ){var r;!this.endpointCount.has(t)&&this.expiresAt(null!=(r=e.meta[t])?r:{fetchedAt:0,date:0,expiresAt:0})<i?n.push(t):s.add(t)}this.endpointsQ=s;const o=[];for(const n of this.entitiesQ){var a,c,h;(null==(a=this.entityCount.get(n.key))||!a.has(n.pk))&&this.expiresAt(null!=(c=null==(h=e.entitiesMeta[n.key])?void 0:h[n.pk])?c:{fetchedAt:0,date:0,expiresAt:0})<i?t.push(n):o.push(n)}this.entitiesQ=o,(t.length||n.length)&&this.controller.dispatch({type:H,entities:t,endpoints:n})}idleCallback(e,t){"function"==typeof requestIdleCallback?requestIdleCallback(e,t):e()}},e.ImmortalGCPolicy=ve,e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){this.middleware=e=>t=>async n=>{await t(n),n.type===j&&n.error&&this.shouldLogout(n.response)&&this.handleLogout(e)},e&&(this.handleLogout=e),t&&(this.shouldLogout=t)}cleanup(){}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor({dataExpiryLength:e=6e4,errorExpiryLength:t=1e3}={}){this.fetching=new Map,this.controller=new be,this.middleware=e=>(this.controller=e,t=>n=>{switch(n.type){case R:return this.handleFetch(n),void 0!==n.endpoint.getOptimisticResponse&&n.endpoint.sideEffect?t(n):Promise.resolve();case j:return t(n).then((()=>{if(this.fetching.has(n.key)){var t;const i=null==(t=e.getState().meta[n.key])?void 0:t.error;i?this.handleSet(le(n.endpoint,{args:n.args,response:i,fetchedAt:n.meta.fetchedAt,error:!0})):this.handleSet(n)}}));case q:{const e=Array.from(this.fetching.values());return this.clearAll(),t(n).then((()=>{for(const{reject:t}of e)t(new Le)}))}default:return t(n)}}),this.dataExpiryLength=e,this.errorExpiryLength=t}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}skipLogging(e){return e.type===R&&this.fetching.has(e.key)}allSettled(){if(this.fetching.size)return Promise.allSettled(this.fetching.values().map((({promise:e})=>e)))}clearAll(){for(const e of this.fetching.keys())this.clear(e)}clear(e){this.fetching.has(e)&&(this.fetching.get(e).promise.catch((()=>{})),this.fetching.delete(e))}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const{resolve:t,reject:n,fetchedAt:i}=e.meta,s=!e.endpoint.sideEffect,r=()=>{let r=e.endpoint(...e.args);return s||(r=(e=>e.then((e=>(t(e),e))).catch((e=>{throw n(e),e})))(r)),r=r.then((t=>{let n=this.getLastReset();return i>=n&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i}),t})).catch((t=>{const n=this.getLastReset();throw i>=n&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i,error:!0}),t})),r};return s?this.throttle(e.key,r,i).then((e=>t(e))).catch((e=>n(e))):r().catch((()=>{}))}handleSet(e){if(this.fetching.has(e.key)){const{reject:t,resolve:n}=this.fetching.get(e.key);e.error?t(e.response):n(e.response),this.clear(e.key)}}throttle(e,t,n){const i=this.getLastReset();let s=this.fetching.get(e);return s&&s.fetchedAt>i||(s=function(e){const t={fetchedAt:e};return t.promise=new Promise(((e,n)=>{t.resolve=e,t.reject=n})),t}(n),this.fetching.set(e,s),this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),s.promise}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,n){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=n||new Oe,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=Le,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new be,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case D:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case N:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}}),this.Subscription=e}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.key;if(t in this.subscriptions){const n=e.endpoint.pollFrequency;this.subscriptions[t].add(n)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.key;if(t in this.subscriptions){const n=e.endpoint.pollFrequency;this.subscriptions[t].remove(n)&&delete this.subscriptions[t]}}},e.__INTERNAL__=oe,e.actionTypes=ee,e.actions=me,e.applyManager=function(e,t){return e.map(((e,n)=>(e.middleware||(e.middleware=null==e.getMiddleware?void 0:e.getMiddleware()),i=>(0===n&&t.bindMiddleware(i),e.middleware(t)))))},e.createReducer=function(e){return function(t,n){switch(t||(t=re),n.type){case H:return n.entities.forEach((({key:e,pk:n})=>{var i,s;null==(i=t.entities[e])||delete i[n],null==(s=t.entitiesMeta[e])||delete s[n]})),n.endpoints.forEach((e=>{delete t.endpoints[e],delete t.meta[e]})),t;case R:return function(e,t){if(t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect){const n=te(t.endpoint,t.args,t.meta.fetchedAt);return l({},e,{optimistic:[...e.optimistic,n]})}return e}(t,n);case T:case j:return function(e,t,n){if(t.error)return ie(e,t,t.response);try{var i;let s;if(t.type===T){if(!t.endpoint.getOptimisticResponse)return e;try{s=t.endpoint.getOptimisticResponse.call(t.endpoint,n.snapshot(e,t.meta.fetchedAt),...t.args)}catch(t){if(t.constructor===ne)return e;throw t}}else s=t.response;const{result:r,entities:o,indexes:a,entitiesMeta:c}=A(t.endpoint.schema,s,t.args,e,t.meta),h=l({},e.endpoints,{[t.key]:r});try{if(t.endpoint.update){const e=t.endpoint.update(r,...t.args);Object.keys(e).forEach((t=>{h[t]=e[t](h[t])}))}}catch(e){console.error(`Endpoint.update() error: ${t.key}`),console.error(e)}return{entities:o,endpoints:h,indexes:a,meta:l({},e.meta,{[t.key]:{date:t.meta.date,fetchedAt:t.meta.fetchedAt,expiresAt:t.meta.expiresAt,prevExpiresAt:null==(i=e.meta[t.key])?void 0:i.expiresAt}}),entitiesMeta:c,optimistic:se(e,t),lastReset:e.lastReset}}catch(n){return"object"==typeof n&&(n.message=`Error processing ${t.key}\n\nFull Schema: ${JSON.stringify(t.endpoint.schema,void 0,2)}\n\nError:\n${n.message}`,"response"in t&&(n.response=t.response),n.status=400),ie(e,t,n)}}(t,n,e);case P:return function(e,t,n){let i;if("function"==typeof t.value){const s=n.get(t.schema,...t.args,e);if(void 0===s)return e;i=t.value(s)}else i=t.value;try{const{entities:n,indexes:s,entitiesMeta:r}=A(t.schema,i,t.args,e,t.meta);return{entities:n,endpoints:e.endpoints,indexes:s,meta:e.meta,entitiesMeta:r,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(t,n,e);case z:case K:return function(e,t){const n=l({},e.endpoints),i=l({},e.meta),s=e=>{delete n[e];const t=l({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===K?s(t.key):Object.keys(n).forEach((e=>{t.testKey(e)&&s(e)})),l({},e,{endpoints:n,meta:i})}(t,n);case Q:return function(e,t){const n=l({},e.meta);return Object.keys(n).forEach((e=>{t.testKey(e)&&(n[e]=l({},n[e],{expiresAt:1}))})),l({},e,{meta:n})}(t,n);case q:return l({},re,{lastReset:n.date});default:return t}}},e.initManager=function(e,t,n){return()=>(e.forEach((e=>{null==e.init||e.init(n)})),t.gcPolicy.init(t),()=>{e.forEach((e=>{e.cleanup()})),t.gcPolicy.cleanup()})},e.initialState=re}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}))}(this,(function(e){"use strict";class t{constructor(){this.localCache=new Map}getEntity(e,t,n,i){const s=t.key;this.localCache.has(s)||this.localCache.set(s,new Map);const r=this.localCache.get(s);return r.get(e)||i(r),r.get(e)}getResults(e,t,n){return{data:n(),paths:[]}}}const n=Symbol("INVALID"),i={};function s(e){return null!==e&&void 0!==e.pk}const r=e=>e[0],o=e=>void 0!==e&&"symbol"!=typeof e,a=(e,t,n,i,s,o)=>{e=r(e);const a=(e=>Array.isArray(e)?e:Object.keys(e).map((t=>e[t])))(t);return a.map((t=>o(e,t,n,i,s)))},c=(e,t,n,i)=>(e=r(e),t.map?t.map((t=>i(e,t))).filter(o):t);function h(){}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},l.apply(null,arguments)}const u=(e,t,n,i,s,r)=>{const o=l({},t),a=Object.keys(e);for(let n=0;n<a.length;n++){const i=a[n],c=r(e[i],t[i],t,i,s);void 0===c?delete o[i]:o[i]=c}return o},d=(e,t,i,s)=>{if(function(e){return!("function"!=typeof e.hasOwnProperty||!(Object.hasOwnProperty.call(e,"__ownerID")||e._map&&Object.hasOwnProperty.call(e._map,"__ownerID")))}(t))return function(e,t,i,s){let r=!1;const o=Object.keys(e).reduce(((t,n)=>{const i=`${n}`,o=s(e[i],t.get(i));return"symbol"==typeof o&&(r=!0),t.has(i)?t.set(i,o):t}),t);return r?n:o}(e,t,0,s);const r=l({},t);let o=!1;const a=Object.keys(e);for(let t=0;t<a.length;t++){const n=a[t],i=s(e[n],r[n]);void 0!==r[n]&&(r[n]=i),"symbol"==typeof i&&(o=!0)}return o?n:r};function p(e,t,n,i){const s={};for(const r of Object.keys(e))s[r]=n(e[r],t,i);return s}const f=(e,t,n,s)=>function(r,o){const a="object"!=typeof o,c=a?e({key:r.key,pk:o}):o;if("symbol"==typeof c)return r.denormalize(c,n,s);if(void 0===c&&a&&""!==o&&"undefined"!==o)return t.getEntity(o,r,i,(e=>{e.set(o,void 0)}));if("object"!=typeof c||null===c)return c;let h=a?o:r.pk(c,void 0,void 0,n);return void 0===h||""===h||"undefined"===h?function(e){const t=new Map;return e(t),t.get("")}((e=>y(r,c,"",e,n,s))):("string"!=typeof h&&(h=`${h}`),t.getEntity(h,r,c,(e=>y(r,c,h,e,n,s))))};function y(e,t,i,s,r,o){const a=e.createIfValid(t);void 0===a?s.set(i,n):(s.set(i,a),s.set(i,e.denormalize(a,r,o)))}const g=(e,t,i)=>{let r=0;const o=f(e,t,i,a);function a(t,h){if(!t)return h;if(null==h)return h;if("function"==typeof t.denormalize){if(s(t)){var l;if(r>=(null!=(l=t.maxEntityDepth)?l:64))return function(e,t,i){var s;const r="object"!=typeof i?e({key:t.key,pk:i}):i;return"object"!=typeof r||null===r?r:null!=(s=t.createIfValid(r))?s:n}(e,t,h);r++;const i=o(t,h);return r--,i}return t.denormalize(h,i,a)}if("function"==typeof t)return t(h);if("object"==typeof t){return(Array.isArray(t)?c:d)(t,h,i,a)}return h}return(e,n)=>{const i=Object(n)===n&&Object(e)===e;return t.getResults(n,i,(()=>a(e,n)))}};class m{constructor({entities:e,indexes:t}){this.entities=e,this.indexes=t}tracked(e){const t=this,i=[{path:[""],entity:e}];return[{INVALID:n,getIndex(...e){const n=t.getIndex(...e);return i.push({path:e,entity:n}),t.getIndexEnd(n,e[2])},getEntity(...e){const n=t.getEntity(...e);return i.push({path:e,entity:n}),n},getEntities(e){const n=t.getEntitiesObject(e);return i.push({path:[e],entity:n}),t.getEntities(e)}},i]}}class v extends m{constructor(e){super(e)}getEntitiesObject(e){return this.entities[e]}getEntities(e){const t=this.entities[e];if(void 0!==t)return{keys:()=>Object.keys(t),entries:()=>Object.entries(t)}}getEntity(e,t){var n;return null==(n=this.entities[e])?void 0:n[t]}getIndex(e,t){var n;return null==(n=this.indexes[e])?void 0:n[t]}getIndexEnd(e,t){return null==e?void 0:e[t]}}const E={QueryDelegate:v,getEntities:e=>({key:t,pk:n})=>{var i;return null==(i=e[t])?void 0:i[n]}};class w{constructor(){this.next=new WeakMap,this.nextPath=void 0}get(e,t){let n=this.next.get(e);if(!n)return x;for(;n.nextPath;){var s;const e=null!=(s=t(n.nextPath))?s:i;if(n=n.next.get(e),!n)return x}return[n.value,n.journey]}set(e,t){if(e.length<1)throw new k;let n=this;for(const{path:t,entity:s}of e){let e=n.next.get(s);e||(e=new b,n.next.set(null!=s?s:i,e)),n.nextPath=t,n=e}n.nextPath=void 0,n.value=t,n.journey=e.map((e=>e.path))}}const x=[void 0,void 0];class b{constructor(){this.next=new WeakMap,this.nextPath=void 0,this.value=void 0,this.journey=[]}}class k extends Error{constructor(...e){super(...e),this.message="Keys must include at least one member"}}class I extends v{constructor(e,t){super(e),this.newEntities=new Map,this.newIndexes=new Map,this.entitiesMeta=e.entitiesMeta,this.meta=t,this.checkLoop=function(){const e=new Map;return function(t,n,i){let s=e.get(t);s||(s=new Map,e.set(t,s));let r=s.get(n);return r||(r=new Set,s.set(n,r)),!!r.has(i)||(r.add(i),!1)}}()}getNewEntity(e,t){return this.getNewEntities(e).get(t)}getNewEntities(e){return this.newEntities.has(e)||(this.newEntities.set(e,new Map),this.entities[e]=l({},this.entities[e]),this.entitiesMeta[e]=l({},this.entitiesMeta[e])),this.newEntities.get(e)}getNewIndexes(e){return this.newIndexes.has(e)||(this.newIndexes.set(e,new Map),this.indexes[e]=l({},this.indexes[e])),this.newIndexes.get(e)}mergeEntity(e,t,n){const i=e.key;let s=n,r=this.meta,o=this.getNewEntity(i,t);if(o)s=e.merge(o,n);else if(o=this.getEntity(i,t),o){const a=this.getMeta(i,t);s=e.mergeWithStore(a,r,o,n),r=e.mergeMetaWithStore(a,r,o,n)}this.setEntity(e,t,s,r)}setEntity(e,t,i,s=this.meta){const r=e.key,o=this.getNewEntities(r),a=!o.has(t);o.set(t,i),e.indexes&&function(e,t,i,s,r,o){for(const a of t){i.has(a)||i.set(a,s[a]={});const t=i.get(a);o[e]&&delete t[o[e][a]],o&&o[e]&&o[e][a]!==r[a]&&(t[o[e][a]]=n),a in r&&(t[r[a]]=e)}}(t,e.indexes,this.getNewIndexes(r),this.indexes[r],i,this.entities[r]),this._setEntity(r,t,i),a&&this._setMeta(r,t,s)}invalidate({key:e},t){this.setEntity({key:e},t,n)}_setEntity(e,t,n){this.entities[e][t]=n}_setMeta(e,t,n){this.entitiesMeta[e][t]=n}getMeta(e,t){return this.entitiesMeta[e][t]}}const A=(e,t,n=[],{entities:i,indexes:s,entitiesMeta:r}=L,o={fetchedAt:0,date:Date.now(),expiresAt:1/0})=>{if(null==e)return{result:t,entities:i,indexes:s,entitiesMeta:r};const c=function(e){return["object","function"].includes(typeof e)?"object":typeof e}(e);if(null===t||typeof t!==c&&(void 0===e.key||void 0!==e.pk||"string"!=typeof t))throw new Error(`Unexpected input given to normalize. Expected type to be "${c}", found "${null===t?"null":typeof t}".`);const h={result:"",entities:l({},i),indexes:l({},s),entitiesMeta:l({},r)},d=(e=>{const t=(n,i,s,r,o)=>i&&n?n.normalize&&"function"==typeof n.normalize?"object"!=typeof i?n.pk?`${i}`:i:n.normalize(i,s,r,o,t,e):"object"!=typeof i||"object"!=typeof n?i:(Array.isArray(n)?a:u)(n,i,s,r,o,t):i;return t})(new I(h,o));return h.result=d(e,t,t,void 0,n),h};const L={entities:{},indexes:{},entitiesMeta:{}};class S{constructor(e,t,n){this.dependencies=[],this.cycleCache=new Map,this.cycleIndex=-1,this.localCache=new Map,this._getEntity=e,this._getCache=t,this._resultCache=n}getEntity(e,t,n,i){const s=t.key,{localCacheKey:r,cycleCacheKey:o}=this.getCacheKey(s);if(r.get(e))o.has(e)?this.cycleIndex=o.get(e):this.dependencies.push({path:{key:s,pk:e},entity:n});else{const a=this._getCache(e,t),[c,h]=a.get(n,this._getEntity);if(h)return r.set(e,c.value),this.dependencies.push(...c.dependencies),c.value;{const t=this.dependencies.length;o.set(e,t),this.dependencies.push({path:{key:s,pk:e},entity:n}),i(r),o.delete(e);const c=this.dependencies.slice(-1===this.cycleIndex?t:this.cycleIndex),h={dependencies:c,value:r.get(e)};a.set(c,h),this.cycleIndex===t&&(this.cycleIndex=-1)}}return r.get(e)}getCacheKey(e){this.localCache.has(e)||this.localCache.set(e,new Map),this.cycleCache.has(e)||this.cycleCache.set(e,new Map);return{localCacheKey:this.localCache.get(e),cycleCacheKey:this.cycleCache.get(e)}}getResults(e,t,n){if(!t)return{data:n(),paths:this.paths()};let[i,s]=this._resultCache.get(e,this._getEntity);return void 0===s?(i=n(),s=this.paths(),this.dependencies.unshift({path:{key:"",pk:""},entity:e}),this._resultCache.set(this.dependencies,i)):s.shift(),{data:i,paths:s}}paths(){return this.dependencies.map((e=>e.path))}}function M(e){return void 0!==e&&(!(e&&"object"==typeof e&&!Array.isArray(e))||Object.values(e).every(M))}class C{constructor(e=E){var t;this.endpoints=new w,this.queryKeys=new Map,this.policy=e,this._getCache=(t=new Map,(e,n)=>{var i;const s=n.key,r=null!=(i=n.cacheWith)?i:n;t.has(s)||t.set(s,new Map);const o=t.get(s);o.has(e)||o.set(e,new WeakMap);const a=o.get(e);let c=a.get(r);return c||(c=new w,a.set(r,c)),c})}denormalize(e,t,n,i=[]){if(void 0===e)return{data:t,paths:[]};if(void 0===t)return{data:void 0,paths:[]};const s=this.policy.getEntities(n);return g(s,new S(s,this._getCache,this.endpoints),i)(e,t)}query(e,t,n,i=JSON.stringify(t)){const s=this.buildQueryKey(e,t,n,i);return s?this.denormalize(e,s,n.entities,t):{data:void 0,paths:[]}}buildQueryKey(e,t,n,i=JSON.stringify(t)){if("object"!=typeof e&&"function"!=typeof e.queryKey||!e)return e;let s=this.queryKeys.get(i);s||(s=new w,this.queryKeys.set(i,s));const r=new this.policy.QueryDelegate(n);let[o,a]=s.get(e,(c=r,e=>c[["","getEntitiesObject","getEntity","getIndex"][e.length]](...e)));var c;if(!a){const[n,i]=r.tracked(e);o=function(e){return function t(n,i){return function(e){return!!e&&"function"==typeof e.queryKey}(n)?n.queryKey(i,t,e):"object"==typeof n&&n?(Array.isArray(n)?h:p)(n,i,t,e):n}}(n)(e,t),s.set(i,o)}return o}}var O={Invalid:1,InvalidIfStale:2,Valid:3};function _(e,t){const n=Date.now();return{fetchedAt:null!=t?t:n,date:n,expiresAt:n+e}}const R="rdc/fetch",j="rdc/set",P="rdc/setresponse",T="rdc/optimistic",q="rdc/reset",D="rdc/subscribe",N="rdc/unsubscribe",K="rdc/invalidate",z="rdc/invalidateall",Q="rdc/expireall",H="rdc/gc",F=R,V=j,B=P,U=T,Y=q,$=D,W=N,X=K,G=z,J=Q,Z=H;var ee=Object.freeze({__proto__:null,EXPIREALL:Q,EXPIREALL_TYPE:J,FETCH:R,FETCH_TYPE:F,GC:H,GC_TYPE:Z,INVALIDATE:K,INVALIDATEALL:z,INVALIDATEALL_TYPE:G,INVALIDATE_TYPE:X,OPTIMISTIC:T,OPTIMISTIC_TYPE:U,RESET:q,RESET_TYPE:Y,SET:j,SET_RESPONSE:P,SET_RESPONSE_TYPE:B,SET_TYPE:V,SUBSCRIBE:D,SUBSCRIBE_TYPE:$,UNSUBSCRIBE:N,UNSUBSCRIBE_TYPE:W});const te="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function ne(e,t,n){var i;return{type:T,key:e.key(...t),args:t.map(te),endpoint:e,meta:_(null!=(i=e.dataExpiryLength)?i:6e4,n)}}class ie extends Error{}function se(e,t,n){return"AbortError"===n.name?l({},e,{optimistic:re(e,t)}):l({},e,{meta:l({},e.meta,{[t.key]:{date:t.meta.date,fetchedAt:t.meta.fetchedAt,expiresAt:t.meta.expiresAt,error:n,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(n)}}),optimistic:re(e,t)})}function re(e,t){return e.optimistic.filter((e=>e.key!==t.key||(e.type===T?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}const oe={entities:{},endpoints:{},indexes:{},meta:{},entitiesMeta:{},optimistic:[],lastReset:0};var ae=Object.freeze({__proto__:null,INVALID:n,MemoCache:C,initialState:oe});function ce(e,{args:t}){return{type:D,key:e.key(...t),args:t,endpoint:e}}function he(e,{args:t}){return{type:N,key:e.key(...t),args:t,endpoint:e}}function le(e,{args:t,fetchedAt:n,response:i,error:s=!1}){var r,o;const a=s?null!=(r=e.errorExpiryLength)?r:1e3:null!=(o=e.dataExpiryLength)?o:6e4;return{type:P,key:e.key(...t),response:i,args:t.map(te),endpoint:e,meta:_(a,n),error:s}}function ue(e,{args:t,fetchedAt:n,value:i}){return{type:j,value:i,args:t.map(te),schema:e,meta:_(6e4,n)}}function de(){return{type:q,date:Date.now()}}function pe(e){return{type:z,testKey:e}}function fe(e,{args:t}){return{type:K,key:e.key(...t)}}function ye(e,{args:t}){let n=0,i=0;const s=new Promise(((e,t)=>{[n,i]=[e,t]})),r={fetchedAt:Date.now(),resolve:n,reject:i,promise:s};return{type:R,key:e.key(...t),args:t,endpoint:e,meta:r}}function ge(e){return{type:Q,testKey:e}}var me=Object.freeze({__proto__:null,createExpireAll:ge,createFetch:ye,createInvalidate:fe,createInvalidateAll:pe,createMeta:_,createOptimistic:ne,createReset:de,createSet:ue,createSetResponse:le,createSubscription:ce,createUnsubscription:he});class ve{init(){}cleanup(){}createCountRef(){return()=>()=>{}}}function Ee(e,t){return e.meta[t]}const we=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},xe=()=>oe;class be{constructor({dispatch:e=we,getState:n=xe,memo:i=new C,gcPolicy:s=new ve}={}){this.fetch=(e,...n)=>{const i=ye(e,{args:n});return this.dispatch(i),e.schema?i.meta.promise.then((i=>function(e,n,i,s=[]){return void 0===e||void 0===n?n:g(E.getEntities(i),new t,s)(e,n).data}(e.schema,i,{},n))):i.meta.promise},this.fetchIfStale=(e,...t)=>{const{data:n,expiresAt:i,expiryStatus:s}=this.getResponseMeta(e,...t,this.getState());return s!==O.Invalid&&Date.now()<=i?n:this.fetch(e,...t)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(fe(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch(pe((t=>e.testKey(t)))),this.expireAll=e=>this.dispatch(ge((t=>e.testKey(t)))),this.resetEntireStore=()=>this.dispatch(de()),this.setResponse=(e,...t)=>{const n=t[t.length-1],i=le(e,{args:t.slice(0,t.length-1),response:n});return this.dispatch(i)},this.setError=(e,...t)=>{const n=t[t.length-1],i=le(e,{args:t.slice(0,t.length-1),response:n,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(le(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(ce(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(he(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new Ie(this,e,t),this._dispatch=e,this.getState=n,this.memo=i,this.gcPolicy=s}set dispatch(e){this._dispatch=e}get dispatch(){return this._dispatch}bindMiddleware({dispatch:e,getState:t}){this._dispatch=e,this.getState=t}set(e,...t){const n=t[t.length-1],i=ue(e,{args:t.slice(0,t.length-1),value:n});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const n=t[t.length-1],i=t.slice(0,t.length-1),s=e.key(...i),r=Ee(n,s);return void 0===n.endpoints[s]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...t){return this.getResponseMeta(e,...t)}getResponseMeta(e,...t){const[n,i]=Ae(t),s=1!==i.length||null!==i[0],r=s?e.key(...i):"",o=s?n.endpoints[r]:void 0,a=e.schema,c=Ee(n,r);let h=null==c?void 0:c.expiresAt;const l=void 0===o&&void 0!==a,u=l?this.memo.buildQueryKey(a,i,n,r):o;if(!s)return{data:u,expiryStatus:O.Valid,expiresAt:1/0,countRef:()=>()=>{}};let d=!1;if(l)d=!M(u);else if(!a||!ke(a))return{data:o,expiryStatus:this.getExpiryStatus(!o,!!e.invalidIfStale,c),expiresAt:h||0,countRef:this.gcPolicy.createCountRef({key:r})};const{data:p,paths:f}=this.memo.denormalize(a,u,n.entities,i);return h||(h=d?1:function(e,t){let n=1/0;for(const{key:s,pk:r}of e){var i;const e=null==(i=t[s])||null==(i=i[r])?void 0:i.expiresAt;e<n&&(n=e)}return n}(f,n.entitiesMeta)),{data:p,expiryStatus:this.getExpiryStatus("symbol"==typeof p,!!e.invalidIfStale||d,c),expiresAt:h,countRef:this.gcPolicy.createCountRef({key:r,paths:f})}}get(e,...t){const[n,i]=Ae(t),{data:s}=this.memo.query(e,i,n);return"symbol"==typeof s?void 0:s}getQueryMeta(e,...t){const[n,i]=Ae(t),{data:s,paths:r}=this.memo.query(e,i,n);return{data:"symbol"==typeof s?void 0:s,countRef:this.gcPolicy.createCountRef({paths:r})}}getExpiryStatus(e,t,n={}){return n.invalidated||e&&!n.error?O.Invalid:e||t?O.InvalidIfStale:O.Valid}}function ke(e){if(s(e))return!0;if(Array.isArray(e))return 0!==e.length&&ke(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?ke(t):Object.values(t).some((e=>ke(e)))}return!1}class Ie{constructor(e,t,n=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=Ie.abort,this.state=t,this.controller=e,this.fetchedAt=n}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getResponseMeta(e,...t){return this.controller.getResponseMeta(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)}getQueryMeta(e,...t){return this.controller.getQueryMeta(e,...t,this.state)}}function Ae(e){const t=e.length,n=new Array(t-1);for(let i=0;i<t-1;i++)n[i]=te(e[i]);return[e[t-1],n]}Ie.abort=new ie;class Le extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class Se{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 Me{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Ce;Ce="undefined"!=typeof navigator&&"function"==typeof addEventListener?Se:Me;var Oe=Ce;let _e={};class Re{constructor(e,t){var n,i;this.started=!1,this.actions=[],this.maxBufferLength=100;const s=l({},_e,e);this.devtoolsName=null!=(n=s.name)?n:`Data Client: ${null==(i=globalThis.document)?void 0:i.title}`,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(s),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),t&&(this.skipLogging=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){}cleanup(){}}Re.prototype.middleware=()=>e=>t=>e(t);e.Controller=be,e.DefaultConnectionListener=Oe,e.DevToolsManager=Re,e.ExpiryStatus=O,e.GCPolicy=class{constructor({intervalMS:e=3e5,expiryMultiplier:t=2,expiresAt:n}={}){this.endpointCount=new Map,this.entityCount=new Map,this.endpointsQ=new Set,this.entitiesQ=[],n&&(this.expiresAt=n.bind(this)),this.options={intervalMS:e,expiryMultiplier:t}}init(e){this.controller=e,this.intervalId=setInterval((()=>{this.idleCallback((()=>this.runSweep()),{timeout:1e3})}),this.options.intervalMS),"object"==typeof this.intervalId&&"unref"in this.intervalId&&this.intervalId.unref()}cleanup(){clearInterval(this.intervalId)}createCountRef({key:e,paths:t=[]}){return()=>{var n;return e&&this.endpointCount.set(e,(null!=(n=this.endpointCount.get(e))?n:0)+1),t.forEach((e=>{var t;const{key:n,pk:i}=e;this.entityCount.has(n)||this.entityCount.set(n,new Map);const s=this.entityCount.get(n);s.set(i,(null!=(t=s.get(i))?t:0)+1)})),()=>{if(e){const t=this.endpointCount.get(e);void 0!==t&&(t<=1?(this.endpointCount.delete(e),this.endpointsQ.add(e)):this.endpointCount.set(e,t-1))}t.forEach((e=>{const{key:t,pk:n}=e;if(!this.entityCount.has(t))return;const i=this.entityCount.get(t),s=i.get(n);void 0!==s&&(s<=1?(i.delete(n),this.entitiesQ.push(e)):i.set(n,s-1))}))}}}expiresAt({fetchedAt:e,expiresAt:t}){return Math.max((t-e)*this.options.expiryMultiplier,12e4)+e}runSweep(){const e=this.controller.getState(),t=[],n=[],i=Date.now(),s=new Set;for(const t of this.endpointsQ){var r;!this.endpointCount.has(t)&&this.expiresAt(null!=(r=e.meta[t])?r:{fetchedAt:0,date:0,expiresAt:0})<i?n.push(t):s.add(t)}this.endpointsQ=s;const o=[];for(const n of this.entitiesQ){var a,c,h;(null==(a=this.entityCount.get(n.key))||!a.has(n.pk))&&this.expiresAt(null!=(c=null==(h=e.entitiesMeta[n.key])?void 0:h[n.pk])?c:{fetchedAt:0,date:0,expiresAt:0})<i?t.push(n):o.push(n)}this.entitiesQ=o,(t.length||n.length)&&this.controller.dispatch({type:H,entities:t,endpoints:n})}idleCallback(e,t){"function"==typeof requestIdleCallback?requestIdleCallback(e,t):e()}},e.ImmortalGCPolicy=ve,e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){this.middleware=e=>t=>async n=>{await t(n),n.type===P&&n.error&&this.shouldLogout(n.response)&&this.handleLogout(e)},e&&(this.handleLogout=e),t&&(this.shouldLogout=t)}cleanup(){}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor({dataExpiryLength:e=6e4,errorExpiryLength:t=1e3}={}){this.fetching=new Map,this.controller=new be,this.middleware=e=>(this.controller=e,t=>n=>{switch(n.type){case R:return this.handleFetch(n),void 0!==n.endpoint.getOptimisticResponse&&n.endpoint.sideEffect?t(n):Promise.resolve();case P:return t(n).then((()=>{if(this.fetching.has(n.key)){var t;const i=null==(t=e.getState().meta[n.key])?void 0:t.error;i?this.handleSet(le(n.endpoint,{args:n.args,response:i,fetchedAt:n.meta.fetchedAt,error:!0})):this.handleSet(n)}}));case q:{const e=Array.from(this.fetching.values());return this.clearAll(),t(n).then((()=>{for(const{reject:t}of e)t(new Le)}))}default:return t(n)}}),this.dataExpiryLength=e,this.errorExpiryLength=t}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}skipLogging(e){return e.type===R&&this.fetching.has(e.key)}allSettled(){if(this.fetching.size)return Promise.allSettled(this.fetching.values().map((({promise:e})=>e)))}clearAll(){for(const e of this.fetching.keys())this.clear(e)}clear(e){this.fetching.has(e)&&(this.fetching.get(e).promise.catch((()=>{})),this.fetching.delete(e))}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const{resolve:t,reject:n,fetchedAt:i}=e.meta,s=!e.endpoint.sideEffect,r=()=>{let r=e.endpoint(...e.args);return s||(r=(e=>e.then((e=>(t(e),e))).catch((e=>{throw n(e),e})))(r)),r=r.then((t=>{let n=this.getLastReset();return i>=n&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i}),t})).catch((t=>{const n=this.getLastReset();throw i>=n&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i,error:!0}),t})),r};return s?this.throttle(e.key,r,i).then((e=>t(e))).catch((e=>n(e))):r().catch((()=>{}))}handleSet(e){if(this.fetching.has(e.key)){const{reject:t,resolve:n}=this.fetching.get(e.key);e.error?t(e.response):n(e.response),this.clear(e.key)}}throttle(e,t,n){const i=this.getLastReset();let s=this.fetching.get(e);return s&&s.fetchedAt>i||(s=function(e){const t={fetchedAt:e};return t.promise=new Promise(((e,n)=>{t.resolve=e,t.reject=n})),t}(n),this.fetching.set(e,s),this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),s.promise}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,n){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=n||new Oe,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=Le,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new be,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case D:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case N:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}}),this.Subscription=e}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.key;if(t in this.subscriptions){const n=e.endpoint.pollFrequency;this.subscriptions[t].add(n)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.key;if(t in this.subscriptions){const n=e.endpoint.pollFrequency;this.subscriptions[t].remove(n)&&delete this.subscriptions[t]}}},e.__INTERNAL__=ae,e.actionTypes=ee,e.actions=me,e.applyManager=function(e,t){return e.map(((e,n)=>(e.middleware||(e.middleware=null==e.getMiddleware?void 0:e.getMiddleware()),i=>(0===n&&t.bindMiddleware(i),e.middleware(t)))))},e.createReducer=function(e){return function(t,n){switch(t||(t=oe),n.type){case H:return n.entities.forEach((({key:e,pk:n})=>{var i,s;null==(i=t.entities[e])||delete i[n],null==(s=t.entitiesMeta[e])||delete s[n]})),n.endpoints.forEach((e=>{delete t.endpoints[e],delete t.meta[e]})),t;case R:return function(e,t){if(t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect){const n=ne(t.endpoint,t.args,t.meta.fetchedAt);return l({},e,{optimistic:[...e.optimistic,n]})}return e}(t,n);case T:case P:return function(e,t,n){if(t.error)return se(e,t,t.response);try{var i;let s;if(t.type===T){if(!t.endpoint.getOptimisticResponse)return e;try{s=t.endpoint.getOptimisticResponse.call(t.endpoint,n.snapshot(e,t.meta.fetchedAt),...t.args)}catch(t){if(t.constructor===ie)return e;throw t}}else s=t.response;const{result:r,entities:o,indexes:a,entitiesMeta:c}=A(t.endpoint.schema,s,t.args,e,t.meta),h=l({},e.endpoints,{[t.key]:r});try{if(t.endpoint.update){const e=t.endpoint.update(r,...t.args);Object.keys(e).forEach((t=>{h[t]=e[t](h[t])}))}}catch(e){console.error(`Endpoint.update() error: ${t.key}`),console.error(e)}return{entities:o,endpoints:h,indexes:a,meta:l({},e.meta,{[t.key]:{date:t.meta.date,fetchedAt:t.meta.fetchedAt,expiresAt:t.meta.expiresAt,prevExpiresAt:null==(i=e.meta[t.key])?void 0:i.expiresAt}}),entitiesMeta:c,optimistic:re(e,t),lastReset:e.lastReset}}catch(n){return"object"==typeof n&&(n.message=`Error processing ${t.key}\n\nFull Schema: ${JSON.stringify(t.endpoint.schema,void 0,2)}\n\nError:\n${n.message}`,"response"in t&&(n.response=t.response),n.status=400),se(e,t,n)}}(t,n,e);case j:return function(e,t,n){let i;if("function"==typeof t.value){const s=n.get(t.schema,...t.args,e);if(void 0===s)return e;i=t.value(s)}else i=t.value;try{const{entities:n,indexes:s,entitiesMeta:r}=A(t.schema,i,t.args,e,t.meta);return{entities:n,endpoints:e.endpoints,indexes:s,meta:e.meta,entitiesMeta:r,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(t,n,e);case z:case K:return function(e,t){const n=l({},e.endpoints),i=l({},e.meta),s=e=>{delete n[e];const t=l({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===K?s(t.key):Object.keys(n).forEach((e=>{t.testKey(e)&&s(e)})),l({},e,{endpoints:n,meta:i})}(t,n);case Q:return function(e,t){const n=l({},e.meta);return Object.keys(n).forEach((e=>{t.testKey(e)&&(n[e]=l({},n[e],{expiresAt:1}))})),l({},e,{meta:n})}(t,n);case q:return l({},oe,{lastReset:n.date});default:return t}}},e.initManager=function(e,t,n){return()=>(e.forEach((e=>{null==e.init||e.init(n)})),t.gcPolicy.init(t),()=>{e.forEach((e=>{e.cleanup()})),t.gcPolicy.cleanup()})},e.initialState=oe}));
|
package/dist/mock.js
CHANGED
|
@@ -43,6 +43,11 @@ const EXPIREALL = 'rdc/expireall';
|
|
|
43
43
|
const GC = 'rdc/gc';
|
|
44
44
|
const FETCH_TYPE = FETCH;
|
|
45
45
|
|
|
46
|
+
const ensurePojo =
|
|
47
|
+
// FormData doesn't exist in node
|
|
48
|
+
/* istanbul ignore else we don't run coverage when we test node*/
|
|
49
|
+
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */body => body;
|
|
50
|
+
|
|
46
51
|
function createOptimistic(endpoint, args, fetchedAt) {
|
|
47
52
|
var _endpoint$dataExpiryL, _endpoint$dataExpiryL2;
|
|
48
53
|
/* istanbul ignore next */
|
|
@@ -52,7 +57,7 @@ function createOptimistic(endpoint, args, fetchedAt) {
|
|
|
52
57
|
return {
|
|
53
58
|
type: OPTIMISTIC,
|
|
54
59
|
key: endpoint.key(...args),
|
|
55
|
-
args,
|
|
60
|
+
args: args.map(ensurePojo),
|
|
56
61
|
endpoint,
|
|
57
62
|
meta: createMeta((_endpoint$dataExpiryL2 = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL2 : 60000, fetchedAt)
|
|
58
63
|
};
|
|
@@ -306,7 +311,6 @@ const initialState$1 = {
|
|
|
306
311
|
|
|
307
312
|
var __INTERNAL__ = /*#__PURE__*/Object.freeze({
|
|
308
313
|
__proto__: null,
|
|
309
|
-
INVALID: normalizr.INVALID,
|
|
310
314
|
MemoCache: normalizr.MemoCache,
|
|
311
315
|
initialState: initialState$1
|
|
312
316
|
});
|
|
@@ -332,11 +336,6 @@ function createUnsubscription(endpoint, {
|
|
|
332
336
|
};
|
|
333
337
|
}
|
|
334
338
|
|
|
335
|
-
const ensurePojo =
|
|
336
|
-
// FormData doesn't exist in node
|
|
337
|
-
/* istanbul ignore else we don't run coverage when we test node*/
|
|
338
|
-
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */body => body;
|
|
339
|
-
|
|
340
339
|
function createSetResponse(endpoint, {
|
|
341
340
|
args,
|
|
342
341
|
fetchedAt,
|
|
@@ -945,14 +944,17 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
945
944
|
*/
|
|
946
945
|
class DevToolsManager {
|
|
947
946
|
constructor(config, skipLogging) {
|
|
947
|
+
var _options$name, _globalThis$document2;
|
|
948
948
|
this.started = false;
|
|
949
949
|
this.actions = [];
|
|
950
950
|
this.maxBufferLength = 100;
|
|
951
951
|
/* istanbul ignore next */
|
|
952
|
-
|
|
952
|
+
const options = {
|
|
953
953
|
...DEFAULT_CONFIG,
|
|
954
954
|
...config
|
|
955
|
-
}
|
|
955
|
+
};
|
|
956
|
+
this.devtoolsName = (_options$name = options.name) != null ? _options$name : `Data Client: ${(_globalThis$document2 = globalThis.document) == null ? void 0 : _globalThis$document2.title}`;
|
|
957
|
+
this.devTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__.connect(options);
|
|
956
958
|
// we cut it in half so we should double so we don't lose
|
|
957
959
|
if (config != null && config.maxAge) this.maxBufferLength = config.maxAge * 2;
|
|
958
960
|
if (skipLogging) this.skipLogging = skipLogging;
|
|
@@ -971,6 +973,10 @@ class DevToolsManager {
|
|
|
971
973
|
|
|
972
974
|
/** Called when initial state is ready */
|
|
973
975
|
init(state) {
|
|
976
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
977
|
+
var _ref, _ref$__DC_CONTROLLERS;
|
|
978
|
+
((_ref$__DC_CONTROLLERS = (_ref = globalThis).__DC_CONTROLLERS__) != null ? _ref$__DC_CONTROLLERS : _ref.__DC_CONTROLLERS__ = new Map()).set(this.devtoolsName, this.controller);
|
|
979
|
+
}
|
|
974
980
|
if (process.env.NODE_ENV !== 'production' && this.devTools) {
|
|
975
981
|
this.devTools.init(state);
|
|
976
982
|
this.devTools.subscribe(msg => {
|
|
@@ -998,7 +1004,14 @@ class DevToolsManager {
|
|
|
998
1004
|
}
|
|
999
1005
|
|
|
1000
1006
|
/** Ensures all subscriptions are cleaned up. */
|
|
1001
|
-
cleanup() {
|
|
1007
|
+
cleanup() {
|
|
1008
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
1009
|
+
const map = globalThis.__DC_CONTROLLERS__;
|
|
1010
|
+
if ((map == null ? void 0 : map.get(this.devtoolsName)) === this.controller) {
|
|
1011
|
+
map.delete(this.devtoolsName);
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1002
1015
|
}
|
|
1003
1016
|
_DevToolsManager = DevToolsManager;
|
|
1004
1017
|
(() => {
|
|
@@ -1006,8 +1019,8 @@ _DevToolsManager = DevToolsManager;
|
|
|
1006
1019
|
/* istanbul ignore next */
|
|
1007
1020
|
if (process.env.NODE_ENV !== 'production') {
|
|
1008
1021
|
_DevToolsManager.prototype.middleware = function (controller) {
|
|
1009
|
-
if (!this.devTools) return next => action => next(action);
|
|
1010
1022
|
this.controller = controller;
|
|
1023
|
+
if (!this.devTools) return next => action => next(action);
|
|
1011
1024
|
const reducer = createReducer(controller);
|
|
1012
1025
|
let state = controller.getState();
|
|
1013
1026
|
return next => action => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createMeta } from './createMeta.js';
|
|
2
2
|
import { OPTIMISTIC } from '../../actionTypes.js';
|
|
3
|
+
import ensurePojo from '../ensurePojo.js';
|
|
3
4
|
export function createOptimistic(endpoint, args, fetchedAt) {
|
|
4
5
|
var _endpoint$dataExpiryL, _endpoint$dataExpiryL2;
|
|
5
6
|
/* istanbul ignore next */
|
|
@@ -9,9 +10,9 @@ export function createOptimistic(endpoint, args, fetchedAt) {
|
|
|
9
10
|
return {
|
|
10
11
|
type: OPTIMISTIC,
|
|
11
12
|
key: endpoint.key(...args),
|
|
12
|
-
args,
|
|
13
|
+
args: args.map(ensurePojo),
|
|
13
14
|
endpoint,
|
|
14
15
|
meta: createMeta((_endpoint$dataExpiryL2 = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL2 : 60000, fetchedAt)
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNZXRhIiwiT1BUSU1JU1RJQyIsImVuc3VyZVBvam8iLCJjcmVhdGVPcHRpbWlzdGljIiwiZW5kcG9pbnQiLCJhcmdzIiwiZmV0Y2hlZEF0IiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMIiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMMiIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRhdGFFeHBpcnlMZW5ndGgiLCJFcnJvciIsInR5cGUiLCJrZXkiLCJtYXAiLCJtZXRhIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyb2xsZXIvYWN0aW9ucy9jcmVhdGVPcHRpbWlzdGljLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgY3JlYXRlTWV0YSB9IGZyb20gJy4vY3JlYXRlTWV0YS5qcyc7XG5pbXBvcnQgeyBPUFRJTUlTVElDIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBPcHRpbWlzdGljQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IGVuc3VyZVBvam8gZnJvbSAnLi4vZW5zdXJlUG9qby5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWlzdGljPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gIGZldGNoZWRBdDogbnVtYmVyLFxuKTogT3B0aW1pc3RpY0FjdGlvbjxFPiB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJlxuICAgIChlbmRwb2ludC5kYXRhRXhwaXJ5TGVuZ3RoID8/IDApIDwgMFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBPUFRJTUlTVElDLFxuICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICAgIGFyZ3M6IGFyZ3MubWFwKGVuc3VyZVBvam8pLFxuICAgIGVuZHBvaW50LFxuICAgIG1ldGE6IGNyZWF0ZU1ldGEoZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyA2MDAwMCwgZmV0Y2hlZEF0KSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsVUFBVSxRQUFRLGlCQUFpQjtBQUM1QyxTQUFTQyxVQUFVLFFBQVEsc0JBQXNCO0FBRWpELE9BQU9DLFVBQVUsTUFBTSxrQkFBa0I7QUFHekMsT0FBTyxTQUFTQyxnQkFBZ0JBLENBSzlCQyxRQUFXLEVBQ1hDLElBQWlDLEVBQ2pDQyxTQUFpQixFQUNJO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7RUFDckI7RUFDQSxJQUNFQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLGFBQWEsSUFDdEMsRUFBQUoscUJBQUEsR0FBQ0gsUUFBUSxDQUFDUSxnQkFBZ0IsWUFBQUwscUJBQUEsR0FBSSxDQUFDLElBQUksQ0FBQyxFQUNwQztJQUNBLE1BQU0sSUFBSU0sS0FBSyxDQUFDLHlDQUF5QyxDQUFDO0VBQzVEO0VBRUEsT0FBTztJQUNMQyxJQUFJLEVBQUViLFVBQVU7SUFDaEJjLEdBQUcsRUFBRVgsUUFBUSxDQUFDVyxHQUFHLENBQUMsR0FBR1YsSUFBSSxDQUFDO0lBQzFCQSxJQUFJLEVBQUVBLElBQUksQ0FBQ1csR0FBRyxDQUFDZCxVQUFVLENBQUM7SUFDMUJFLFFBQVE7SUFDUmEsSUFBSSxFQUFFakIsVUFBVSxFQUFBUSxzQkFBQSxHQUFDSixRQUFRLENBQUNRLGdCQUFnQixZQUFBSixzQkFBQSxHQUFJLEtBQUssRUFBRUYsU0FBUztFQUNoRSxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hbmFnZXIvQ29ubmVjdGlvbkxpc3RlbmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBMaXN0ZW5zIHRvIG9ubGluZS9vZmZsaW5lIGV2ZW50cyBmb3IgdHJpZ2dlcmluZyByZS1mZXRjaGVzIG9uIHJlY29ubmVjdC5cbiAqXG4gKiBJbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgdG8gcHJvdmlkZSBjdXN0b20gY29ubmVjdGl2aXR5IGRldGVjdGlvblxuICogKGUuZy4sIGZvciBSZWFjdCBOYXRpdmUgb3IgTm9kZS5qcyBlbnZpcm9ubWVudHMpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1BvbGxpbmdTdWJzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgaW50ZXJmYWNlIENvbm5lY3Rpb25MaXN0ZW5lciB7XG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsaWVudCBpcyBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBuZXR3b3JrLiAqL1xuICBpc09ubGluZTogKCkgPT4gYm9vbGVhbjtcbiAgLyoqIFJlZ2lzdGVyIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IGNvbWVzIGJhY2sgb25saW5lLiAqL1xuICBhZGRPbmxpbmVMaXN0ZW5lcjogKGhhbmRsZXI6ICgpID0+IHZvaWQpID0+IHZvaWQ7XG4gIC8qKiBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgb25saW5lIGhhbmRsZXIuICovXG4gIHJlbW92ZU9ubGluZUxpc3RlbmVyOiAoaGFuZGxlcjogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgLyoqIFJlZ2lzdGVyIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY2xpZW50IGdvZXMgb2ZmbGluZS4gKi9cbiAgYWRkT2ZmbGluZUxpc3RlbmVyOiAoaGFuZGxlcjogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgLyoqIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBvZmZsaW5lIGhhbmRsZXIuICovXG4gIHJlbW92ZU9mZmxpbmVMaXN0ZW5lcjogKGhhbmRsZXI6ICgpID0+IHZvaWQpID0+IHZvaWQ7XG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -74,11 +74,14 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
74
74
|
*/
|
|
75
75
|
export default class DevToolsManager {
|
|
76
76
|
constructor(config, skipLogging) {
|
|
77
|
+
var _options$name, _globalThis$document2;
|
|
77
78
|
this.started = false;
|
|
78
79
|
this.actions = [];
|
|
79
80
|
this.maxBufferLength = 100;
|
|
80
81
|
/* istanbul ignore next */
|
|
81
|
-
|
|
82
|
+
const options = _extends({}, DEFAULT_CONFIG, config);
|
|
83
|
+
this.devtoolsName = (_options$name = options.name) != null ? _options$name : `Data Client: ${(_globalThis$document2 = globalThis.document) == null ? void 0 : _globalThis$document2.title}`;
|
|
84
|
+
this.devTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__.connect(options);
|
|
82
85
|
// we cut it in half so we should double so we don't lose
|
|
83
86
|
if (config != null && config.maxAge) this.maxBufferLength = config.maxAge * 2;
|
|
84
87
|
if (skipLogging) this.skipLogging = skipLogging;
|
|
@@ -97,6 +100,10 @@ export default class DevToolsManager {
|
|
|
97
100
|
|
|
98
101
|
/** Called when initial state is ready */
|
|
99
102
|
init(state) {
|
|
103
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
104
|
+
var _ref, _ref$__DC_CONTROLLERS;
|
|
105
|
+
((_ref$__DC_CONTROLLERS = (_ref = globalThis).__DC_CONTROLLERS__) != null ? _ref$__DC_CONTROLLERS : _ref.__DC_CONTROLLERS__ = new Map()).set(this.devtoolsName, this.controller);
|
|
106
|
+
}
|
|
100
107
|
if (process.env.NODE_ENV !== 'production' && this.devTools) {
|
|
101
108
|
this.devTools.init(state);
|
|
102
109
|
this.devTools.subscribe(msg => {
|
|
@@ -124,7 +131,14 @@ export default class DevToolsManager {
|
|
|
124
131
|
}
|
|
125
132
|
|
|
126
133
|
/** Ensures all subscriptions are cleaned up. */
|
|
127
|
-
cleanup() {
|
|
134
|
+
cleanup() {
|
|
135
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
136
|
+
const map = globalThis.__DC_CONTROLLERS__;
|
|
137
|
+
if ((map == null ? void 0 : map.get(this.devtoolsName)) === this.controller) {
|
|
138
|
+
map.delete(this.devtoolsName);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
128
142
|
}
|
|
129
143
|
_DevToolsManager = DevToolsManager;
|
|
130
144
|
(() => {
|
|
@@ -132,8 +146,8 @@ _DevToolsManager = DevToolsManager;
|
|
|
132
146
|
/* istanbul ignore next */
|
|
133
147
|
if (process.env.NODE_ENV !== 'production') {
|
|
134
148
|
_DevToolsManager.prototype.middleware = function (controller) {
|
|
135
|
-
if (!this.devTools) return next => action => next(action);
|
|
136
149
|
this.controller = controller;
|
|
150
|
+
if (!this.devTools) return next => action => next(action);
|
|
137
151
|
const reducer = createReducer(controller);
|
|
138
152
|
let state = controller.getState();
|
|
139
153
|
return next => action => {
|
|
@@ -157,4 +171,4 @@ _DevToolsManager = DevToolsManager;
|
|
|
157
171
|
_DevToolsManager.prototype.middleware = () => next => action => next(action);
|
|
158
172
|
}
|
|
159
173
|
})();
|
|
160
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZWR1Y2VyIiwiREVGQVVMVF9DT05GSUciLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJfZ2xvYmFsVGhpcyRkb2N1bWVudCIsImV4dHJhRW5kcG9pbnRLZXlzIiwic2VyaWFsaXplRW5kcG9pbnQiLCJlbmRwb2ludCIsIl90b0pTT04iLCJfZW5kcG9pbnQkc2NoZW1hIiwic2VyaWFsIiwibmFtZSIsInNjaGVtYSIsInRvSlNPTiIsInNpZGVFZmZlY3QiLCJmb3JFYWNoIiwia2V5IiwiSEFTSU5UTCIsIkludGwiLCJnbG9iYWxUaGlzIiwiZG9jdW1lbnQiLCJ0aXRsZSIsImF1dG9QYXVzZSIsImZlYXR1cmVzIiwicGF1c2UiLCJsb2NrIiwicGVyc2lzdCIsImV4cG9ydCIsImltcG9ydCIsImp1bXAiLCJza2lwIiwicmVvcmRlciIsImRpc3BhdGNoIiwidGVzdCIsImFjdGlvblNhbml0aXplciIsImFjdGlvbiIsIl9leHRlbmRzIiwic2VyaWFsaXplIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsInJlcGxhY2VyIiwidmFsdWUiLCJpc0Zpbml0ZSIsImVuZHNXaXRoIiwiRGF0ZVRpbWVGb3JtYXQiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyIsImZvcm1hdCIsIkRldlRvb2xzTWFuYWdlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic2tpcExvZ2dpbmciLCJzdGFydGVkIiwiYWN0aW9ucyIsIm1heEJ1ZmZlckxlbmd0aCIsImRldlRvb2xzIiwid2luZG93IiwiX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyIsImNvbm5lY3QiLCJtYXhBZ2UiLCJoYW5kbGVBY3Rpb24iLCJzdGF0ZSIsInNlbmQiLCJsZW5ndGgiLCJzbGljZSIsInB1c2giLCJpbml0Iiwic3Vic2NyaWJlIiwibXNnIiwidHlwZSIsInBheWxvYWQiLCJjb250cm9sbGVyIiwicmVzZXRFbnRpcmVTdG9yZSIsImNsZWFudXAiLCJfRGV2VG9vbHNNYW5hZ2VyIiwicHJvdG90eXBlIiwibWlkZGxld2FyZSIsIm5leHQiLCJyZWR1Y2VyIiwiZ2V0U3RhdGUiLCJfdGhpcyRza2lwTG9nZ2luZyIsInNob3VsZFNraXAiLCJjYWxsIiwicmV0IiwidGhlbiIsIm9wdGltaXN0aWMiLCJyZWR1Y2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9EZXZ0b29sc01hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXZUb29sc0NvbmZpZyB9IGZyb20gJy4vZGV2dG9vbHNUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIsIEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAnLi4vbWlkZGxld2FyZVR5cGVzLmpzJztcbmltcG9ydCBjcmVhdGVSZWR1Y2VyIGZyb20gJy4uL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZXIsIFN0YXRlLCBBY3Rpb25UeXBlcyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBEZXZUb29sc0NvbmZpZyB9O1xuXG5sZXQgREVGQVVMVF9DT05GSUcgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3QgZXh0cmFFbmRwb2ludEtleXMgPSBbXG4gICAgJ2RhdGFFeHBpcnlMZW5ndGgnLFxuICAgICdlcnJvckV4cGlyeUxlbmd0aCcsXG4gICAgJ2Vycm9yUG9saWN5JyxcbiAgICAnaW52YWxpZElmU3RhbGUnLFxuICAgICdwb2xsRnJlcXVlbmN5JyxcbiAgICAnZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlJyxcbiAgICAndXBkYXRlJyxcbiAgXTtcblxuICBmdW5jdGlvbiBzZXJpYWxpemVFbmRwb2ludChlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UpIHtcbiAgICBjb25zdCBzZXJpYWw6IGFueSA9IHtcbiAgICAgIG5hbWU6IGVuZHBvaW50Lm5hbWUsXG4gICAgICBzY2hlbWE6IChlbmRwb2ludC5zY2hlbWEgYXMgYW55KT8udG9KU09OPy4oKSA/PyBlbmRwb2ludC5zY2hlbWEsXG4gICAgICBzaWRlRWZmZWN0OiBlbmRwb2ludC5zaWRlRWZmZWN0LFxuICAgIH07XG4gICAgZXh0cmFFbmRwb2ludEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBlbmRwb2ludClcbiAgICAgICAgc2VyaWFsW2tleV0gPSBlbmRwb2ludFtrZXkgYXMga2V5b2YgRW5kcG9pbnRJbnRlcmZhY2VdO1xuICAgIH0pO1xuICAgIHJldHVybiBzZXJpYWw7XG4gIH1cblxuICBjb25zdCBIQVNJTlRMID0gdHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnO1xuICBERUZBVUxUX0NPTkZJRyA9IHtcbiAgICBuYW1lOiBgRGF0YSBDbGllbnQ6ICR7Z2xvYmFsVGhpcy5kb2N1bWVudD8udGl0bGV9YCxcbiAgICBhdXRvUGF1c2U6IHRydWUsXG4gICAgZmVhdHVyZXM6IHtcbiAgICAgIHBhdXNlOiB0cnVlLCAvLyBzdGFydC9wYXVzZSByZWNvcmRpbmcgb2YgZGlzcGF0Y2hlZCBhY3Rpb25zXG4gICAgICBsb2NrOiB0cnVlLCAvLyBsb2NrL3VubG9jayBkaXNwYXRjaGluZyBhY3Rpb25zIGFuZCBzaWRlIGVmZmVjdHNcbiAgICAgIHBlcnNpc3Q6IGZhbHNlLCAvLyBwZXJzaXN0IHN0YXRlcyBvbiBwYWdlIHJlbG9hZGluZ1xuICAgICAgZXhwb3J0OiB0cnVlLCAvLyBleHBvcnQgaGlzdG9yeSBvZiBhY3Rpb25zIGluIGEgZmlsZVxuICAgICAgaW1wb3J0OiAnY3VzdG9tJywgLy8gaW1wb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBmcm9tIGEgZmlsZVxuICAgICAganVtcDogdHJ1ZSwgLy8ganVtcCBiYWNrIGFuZCBmb3J0aCAodGltZSB0cmF2ZWxsaW5nKVxuICAgICAgc2tpcDogdHJ1ZSwgLy8gc2tpcCAoY2FuY2VsKSBhY3Rpb25zXG4gICAgICByZW9yZGVyOiB0cnVlLCAvLyBkcmFnIGFuZCBkcm9wIGFjdGlvbnMgaW4gdGhlIGhpc3RvcnkgbGlzdFxuICAgICAgZGlzcGF0Y2g6IGZhbHNlLCAvLyBkaXNwYXRjaCBjdXN0b20gYWN0aW9ucyBvciBhY3Rpb24gY3JlYXRvcnNcbiAgICAgIHRlc3Q6IGZhbHNlLCAvLyBnZW5lcmF0ZSB0ZXN0cyBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbnNcbiAgICB9LFxuICAgIGFjdGlvblNhbml0aXplcjogKGFjdGlvbjogQWN0aW9uVHlwZXMpID0+IHtcbiAgICAgIGlmICghKCdlbmRwb2ludCcgaW4gYWN0aW9uKSkgcmV0dXJuIGFjdGlvbjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjdGlvbixcbiAgICAgICAgZW5kcG9pbnQ6IHNlcmlhbGl6ZUVuZHBvaW50KGFjdGlvbi5lbmRwb2ludCksXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiB7XG4gICAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmVwbGFjZXI6XG4gICAgICAgIEhBU0lOVEwgP1xuICAgICAgICAgIChrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgdmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICBpc0Zpbml0ZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgKGtleSA9PT0gJ2RhdGUnIHx8IGtleS5lbmRzV2l0aCgnQXQnKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIHNlY29uZDogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMsXG4gICAgICAgICAgICAgIH0pLmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogSW50ZWdyYXRlcyB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LWRldnRvb2xzXG4gKlxuICogT3B0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtZGV2dG9vbHMvYmxvYi9tYWluL2V4dGVuc2lvbi9kb2NzL0FQSS9Bcmd1bWVudHMubWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9EZXZUb29sc01hbmFnZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV2VG9vbHNNYW5hZ2VyIGltcGxlbWVudHMgTWFuYWdlciB7XG4gIGRlY2xhcmUgbWlkZGxld2FyZTogTWlkZGxld2FyZTtcbiAgZGVjbGFyZSBwcm90ZWN0ZWQgZGV2VG9vbHM6IHVuZGVmaW5lZCB8IGFueTtcbiAgcHJvdGVjdGVkIHN0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGFjdGlvbnM6IFtBY3Rpb25UeXBlcywgU3RhdGU8dW5rbm93bj5dW10gPSBbXTtcbiAgZGVjbGFyZSBwcm90ZWN0ZWQgY29udHJvbGxlcjogQ29udHJvbGxlcjtcbiAgZGVjbGFyZSBza2lwTG9nZ2luZz86IChhY3Rpb246IEFjdGlvblR5cGVzKSA9PiBib29sZWFuO1xuICBtYXhCdWZmZXJMZW5ndGggPSAxMDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29uZmlnPzogRGV2VG9vbHNDb25maWcsXG4gICAgc2tpcExvZ2dpbmc/OiAoYWN0aW9uOiBBY3Rpb25UeXBlcykgPT4gYm9vbGVhbixcbiAgKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aGlzLmRldlRvb2xzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyAmJlxuICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18uY29ubmVjdCh7XG4gICAgICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9KTtcbiAgICAvLyB3ZSBjdXQgaXQgaW4gaGFsZiBzbyB3ZSBzaG91bGQgZG91YmxlIHNvIHdlIGRvbid0IGxvc2VcbiAgICBpZiAoY29uZmlnPy5tYXhBZ2UpIHRoaXMubWF4QnVmZmVyTGVuZ3RoID0gY29uZmlnLm1heEFnZSAqIDI7XG4gICAgaWYgKHNraXBMb2dnaW5nKSB0aGlzLnNraXBMb2dnaW5nID0gc2tpcExvZ2dpbmc7XG4gIH1cblxuICBzdGF0aWMge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRoaXMucHJvdG90eXBlLm1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoY29udHJvbGxlcikge1xuICAgICAgICBpZiAoIXRoaXMuZGV2VG9vbHMpIHJldHVybiBuZXh0ID0+IGFjdGlvbiA9PiBuZXh0KGFjdGlvbik7XG4gICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICAgIGNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGNvbnRyb2xsZXIgYXMgYW55KTtcbiAgICAgICAgbGV0IHN0YXRlID0gY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZFNraXAgPSB0aGlzLnNraXBMb2dnaW5nPy4oYWN0aW9uKTtcbiAgICAgICAgICBjb25zdCByZXQgPSBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgLy8gd2UgdHJhY2sgc3RhdGUgY2hhbmdlcyBoZXJlIHNpbmNlIGdldFN0YXRlKCkgd2lsbCBvbmx5IHVwZGF0ZSBhZnRlciBhIGJhdGNoIGNvbW1pdFxuICAgICAgICAgICAgc3RhdGUgPSByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZFNraXApIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKGFjdGlvbiwgc3RhdGUub3B0aW1pc3RpYy5yZWR1Y2UocmVkdWNlciwgc3RhdGUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm90b3R5cGUubWlkZGxld2FyZSA9ICgpID0+IG5leHQgPT4gYWN0aW9uID0+IG5leHQoYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBhbnksIHN0YXRlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLmRldlRvb2xzLnNlbmQoYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF2b2lkIHRoaXMgZ2V0dGluZyB0b28gYmlnIGluIGNhc2UgdGhpcyBpcyBsb25nIHJ1bm5pbmdcbiAgICAgIC8vIHdlIGN1dCBpbiBoYWxmIHNvIHdlIGFyZW4ndCBjb25zdGFudGx5IHJlYWxsb2NhdGluZ1xuICAgICAgaWYgKHRoaXMuYWN0aW9ucy5sZW5ndGggPiB0aGlzLm1heEJ1ZmZlckxlbmd0aClcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zLnNsaWNlKHRoaXMubWF4QnVmZmVyTGVuZ3RoIC8gMik7XG4gICAgICAvLyBxdWV1ZSBhY3Rpb25zXG4gICAgICB0aGlzLmFjdGlvbnMucHVzaChbYWN0aW9uLCBzdGF0ZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYWxsZWQgd2hlbiBpbml0aWFsIHN0YXRlIGlzIHJlYWR5ICovXG4gIGluaXQoc3RhdGU6IFN0YXRlPGFueT4pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLmRldlRvb2xzKSB7XG4gICAgICB0aGlzLmRldlRvb2xzLmluaXQoc3RhdGUpO1xuICAgICAgdGhpcy5kZXZUb29scy5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XG4gICAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdTVEFSVCc6XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaCgoW2FjdGlvbiwgc3RhdGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLCBzdGF0ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1NUT1AnOlxuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdESVNQQVRDSCc6XG4gICAgICAgICAgICBpZiAobXNnLnBheWxvYWQudHlwZSA9PT0gJ1JFU0VUJykge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIucmVzZXRFbnRpcmVTdG9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbnN1cmVzIGFsbCBzdWJzY3JpcHRpb25zIGFyZSBjbGVhbmVkIHVwLiAqL1xuICBjbGVhbnVwKCkge31cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFHQSxPQUFPQSxhQUFhLE1BQU0sbUNBQW1DO0FBSzdELElBQUlDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFFdkIsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLEVBQUU7RUFBQSxJQUFBQyxvQkFBQTtFQUN6QyxNQUFNQyxpQkFBaUIsR0FBRyxDQUN4QixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixRQUFRLENBQ1Q7RUFFRCxTQUFTQyxpQkFBaUJBLENBQUNDLFFBQTJCLEVBQUU7SUFBQSxJQUFBQyxPQUFBLEVBQUFDLGdCQUFBO0lBQ3RELE1BQU1DLE1BQVcsR0FBRztNQUNsQkMsSUFBSSxFQUFFSixRQUFRLENBQUNJLElBQUk7TUFDbkJDLE1BQU0sR0FBQUosT0FBQSxJQUFBQyxnQkFBQSxHQUFHRixRQUFRLENBQUNLLE1BQU0sYUFBaEJILGdCQUFBLENBQTBCSSxNQUFNLG9CQUFoQ0osZ0JBQUEsQ0FBMEJJLE1BQU0sQ0FBRyxDQUFDLFlBQUFMLE9BQUEsR0FBSUQsUUFBUSxDQUFDSyxNQUFNO01BQy9ERSxVQUFVLEVBQUVQLFFBQVEsQ0FBQ087SUFDdkIsQ0FBQztJQUNEVCxpQkFBaUIsQ0FBQ1UsT0FBTyxDQUFDQyxHQUFHLElBQUk7TUFDL0IsSUFBSUEsR0FBRyxJ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
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZWR1Y2VyIiwiREVGQVVMVF9DT05GSUciLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJfZ2xvYmFsVGhpcyRkb2N1bWVudCIsImV4dHJhRW5kcG9pbnRLZXlzIiwic2VyaWFsaXplRW5kcG9pbnQiLCJlbmRwb2ludCIsIl90b0pTT04iLCJfZW5kcG9pbnQkc2NoZW1hIiwic2VyaWFsIiwibmFtZSIsInNjaGVtYSIsInRvSlNPTiIsInNpZGVFZmZlY3QiLCJmb3JFYWNoIiwia2V5IiwiSEFTSU5UTCIsIkludGwiLCJnbG9iYWxUaGlzIiwiZG9jdW1lbnQiLCJ0aXRsZSIsImF1dG9QYXVzZSIsImZlYXR1cmVzIiwicGF1c2UiLCJsb2NrIiwicGVyc2lzdCIsImV4cG9ydCIsImltcG9ydCIsImp1bXAiLCJza2lwIiwicmVvcmRlciIsImRpc3BhdGNoIiwidGVzdCIsImFjdGlvblNhbml0aXplciIsImFjdGlvbiIsIl9leHRlbmRzIiwic2VyaWFsaXplIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsInJlcGxhY2VyIiwidmFsdWUiLCJpc0Zpbml0ZSIsImVuZHNXaXRoIiwiRGF0ZVRpbWVGb3JtYXQiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiZnJhY3Rpb25hbFNlY29uZERpZ2l0cyIsImZvcm1hdCIsIkRldlRvb2xzTWFuYWdlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic2tpcExvZ2dpbmciLCJfb3B0aW9ucyRuYW1lIiwiX2dsb2JhbFRoaXMkZG9jdW1lbnQyIiwic3RhcnRlZCIsImFjdGlvbnMiLCJtYXhCdWZmZXJMZW5ndGgiLCJkZXZ0b29sc05hbWUiLCJkZXZUb29scyIsIndpbmRvdyIsIl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18iLCJjb25uZWN0IiwibWF4QWdlIiwiaGFuZGxlQWN0aW9uIiwic3RhdGUiLCJzZW5kIiwibGVuZ3RoIiwic2xpY2UiLCJwdXNoIiwiaW5pdCIsIl9yZWYiLCJfcmVmJF9fRENfQ09OVFJPTExFUlMiLCJfX0RDX0NPTlRST0xMRVJTX18iLCJNYXAiLCJzZXQiLCJjb250cm9sbGVyIiwic3Vic2NyaWJlIiwibXNnIiwidHlwZSIsInBheWxvYWQiLCJyZXNldEVudGlyZVN0b3JlIiwiY2xlYW51cCIsIm1hcCIsImdldCIsImRlbGV0ZSIsIl9EZXZUb29sc01hbmFnZXIiLCJwcm90b3R5cGUiLCJtaWRkbGV3YXJlIiwibmV4dCIsInJlZHVjZXIiLCJnZXRTdGF0ZSIsIl90aGlzJHNraXBMb2dnaW5nIiwic2hvdWxkU2tpcCIsImNhbGwiLCJyZXQiLCJ0aGVuIiwib3B0aW1pc3RpYyIsInJlZHVjZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyL0RldnRvb2xzTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERldlRvb2xzQ29uZmlnIH0gZnJvbSAnLi9kZXZ0b29sc1R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciwgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcuLi9taWRkbGV3YXJlVHlwZXMuanMnO1xuaW1wb3J0IGNyZWF0ZVJlZHVjZXIgZnJvbSAnLi4vc3RhdGUvcmVkdWNlci9jcmVhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCB0eXBlIHsgTWFuYWdlciwgU3RhdGUsIEFjdGlvblR5cGVzIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IERldlRvb2xzQ29uZmlnIH07XG5cbmxldCBERUZBVUxUX0NPTkZJRyA9IHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCBleHRyYUVuZHBvaW50S2V5cyA9IFtcbiAgICAnZGF0YUV4cGlyeUxlbmd0aCcsXG4gICAgJ2Vycm9yRXhwaXJ5TGVuZ3RoJyxcbiAgICAnZXJyb3JQb2xpY3knLFxuICAgICdpbnZhbGlkSWZTdGFsZScsXG4gICAgJ3BvbGxGcmVxdWVuY3knLFxuICAgICdnZXRPcHRpbWlzdGljUmVzcG9uc2UnLFxuICAgICd1cGRhdGUnLFxuICBdO1xuXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZUVuZHBvaW50KGVuZHBvaW50OiBFbmRwb2ludEludGVyZmFjZSkge1xuICAgIGNvbnN0IHNlcmlhbDogYW55ID0ge1xuICAgICAgbmFtZTogZW5kcG9pbnQubmFtZSxcbiAgICAgIHNjaGVtYTogKGVuZHBvaW50LnNjaGVtYSBhcyBhbnkpPy50b0pTT04/LigpID8/IGVuZHBvaW50LnNjaGVtYSxcbiAgICAgIHNpZGVFZmZlY3Q6IGVuZHBvaW50LnNpZGVFZmZlY3QsXG4gICAgfTtcbiAgICBleHRyYUVuZHBvaW50S2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoa2V5IGluIGVuZHBvaW50KVxuICAgICAgICBzZXJpYWxba2V5XSA9IGVuZHBvaW50W2tleSBhcyBrZXlvZiBFbmRwb2ludEludGVyZmFjZV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlcmlhbDtcbiAgfVxuXG4gIGNvbnN0IEhBU0lOVEwgPSB0eXBlb2YgSW50bCAhPT0gJ3VuZGVmaW5lZCc7XG4gIERFRkFVTFRfQ09ORklHID0ge1xuICAgIG5hbWU6IGBEYXRhIENsaWVudDogJHtnbG9iYWxUaGlzLmRvY3VtZW50Py50aXRsZX1gLFxuICAgIGF1dG9QYXVzZTogdHJ1ZSxcbiAgICBmZWF0dXJlczoge1xuICAgICAgcGF1c2U6IHRydWUsIC8vIHN0YXJ0L3BhdXNlIHJlY29yZGluZyBvZiBkaXNwYXRjaGVkIGFjdGlvbnNcbiAgICAgIGxvY2s6IHRydWUsIC8vIGxvY2svdW5sb2NrIGRpc3BhdGNoaW5nIGFjdGlvbnMgYW5kIHNpZGUgZWZmZWN0c1xuICAgICAgcGVyc2lzdDogZmFsc2UsIC8vIHBlcnNpc3Qgc3RhdGVzIG9uIHBhZ2UgcmVsb2FkaW5nXG4gICAgICBleHBvcnQ6IHRydWUsIC8vIGV4cG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgaW4gYSBmaWxlXG4gICAgICBpbXBvcnQ6ICdjdXN0b20nLCAvLyBpbXBvcnQgaGlzdG9yeSBvZiBhY3Rpb25zIGZyb20gYSBmaWxlXG4gICAgICBqdW1wOiB0cnVlLCAvLyBqdW1wIGJhY2sgYW5kIGZvcnRoICh0aW1lIHRyYXZlbGxpbmcpXG4gICAgICBza2lwOiB0cnVlLCAvLyBza2lwIChjYW5jZWwpIGFjdGlvbnNcbiAgICAgIHJlb3JkZXI6IHRydWUsIC8vIGRyYWcgYW5kIGRyb3AgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsaXN0XG4gICAgICBkaXNwYXRjaDogZmFsc2UsIC8vIGRpc3BhdGNoIGN1c3RvbSBhY3Rpb25zIG9yIGFjdGlvbiBjcmVhdG9yc1xuICAgICAgdGVzdDogZmFsc2UsIC8vIGdlbmVyYXRlIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgYWN0aW9uc1xuICAgIH0sXG4gICAgYWN0aW9uU2FuaXRpemVyOiAoYWN0aW9uOiBBY3Rpb25UeXBlcykgPT4ge1xuICAgICAgaWYgKCEoJ2VuZHBvaW50JyBpbiBhY3Rpb24pKSByZXR1cm4gYWN0aW9uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICBlbmRwb2ludDogc2VyaWFsaXplRW5kcG9pbnQoYWN0aW9uLmVuZHBvaW50KSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IHtcbiAgICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXBsYWNlcjpcbiAgICAgICAgSEFTSU5UTCA/XG4gICAgICAgICAgKGtleTogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgIGlzRmluaXRlKHZhbHVlKSAmJlxuICAgICAgICAgICAgICAoa2V5ID09PSAnZGF0ZScgfHwga2V5LmVuZHNXaXRoKCdBdCcpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgc2Vjb25kOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMyxcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBJbnRlZ3JhdGVzIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtZGV2dG9vbHNcbiAqXG4gKiBPcHRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC1kZXZ0b29scy9ibG9iL21haW4vZXh0ZW5zaW9uL2RvY3MvQVBJL0FyZ3VtZW50cy5tZFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0RldlRvb2xzTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXZUb29sc01hbmFnZXIgaW1wbGVtZW50cyBNYW5hZ2VyIHtcbiAgZGVjbGFyZSBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlO1xuICBkZWNsYXJlIHByb3RlY3RlZCBkZXZUb29sczogdW5kZWZpbmVkIHwgYW55O1xuICBwcm90ZWN0ZWQgc3RhcnRlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYWN0aW9uczogW0FjdGlvblR5cGVzLCBTdGF0ZTx1bmtub3duPl1bXSA9IFtdO1xuICBkZWNsYXJlIHByb3RlY3RlZCBjb250cm9sbGVyOiBDb250cm9sbGVyO1xuICBkZWNsYXJlIHNraXBMb2dnaW5nPzogKGFjdGlvbjogQWN0aW9uVHlwZXMpID0+IGJvb2xlYW47XG4gIGRlY2xhcmUgZGV2dG9vbHNOYW1lOiBzdHJpbmc7XG4gIG1heEJ1ZmZlckxlbmd0aCA9IDEwMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb25maWc/OiBEZXZUb29sc0NvbmZpZyxcbiAgICBza2lwTG9nZ2luZz86IChhY3Rpb246IEFjdGlvblR5cGVzKSA9PiBib29sZWFuLFxuICApIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICB0aGlzLmRldnRvb2xzTmFtZSA9XG4gICAgICBvcHRpb25zLm5hbWUgPz8gYERhdGEgQ2xpZW50OiAke2dsb2JhbFRoaXMuZG9jdW1lbnQ/LnRpdGxlfWA7XG4gICAgdGhpcy5kZXZUb29scyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gJiZcbiAgICAgICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fLmNvbm5lY3Qob3B0aW9ucyk7XG4gICAgLy8gd2UgY3V0IGl0IGluIGhhbGYgc28gd2Ugc2hvdWxkIGRvdWJsZSBzbyB3ZSBkb24ndCBsb3NlXG4gICAgaWYgKGNvbmZpZz8ubWF4QWdlKSB0aGlzLm1heEJ1ZmZlckxlbmd0aCA9IGNvbmZpZy5tYXhBZ2UgKiAyO1xuICAgIGlmIChza2lwTG9nZ2luZykgdGhpcy5za2lwTG9nZ2luZyA9IHNraXBMb2dnaW5nO1xuICB9XG5cbiAgc3RhdGljIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLnByb3RvdHlwZS5taWRkbGV3YXJlID0gZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICAgICAgaWYgKCF0aGlzLmRldlRvb2xzKSByZXR1cm4gbmV4dCA9PiBhY3Rpb24gPT4gbmV4dChhY3Rpb24pO1xuICAgICAgICBjb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihjb250cm9sbGVyIGFzIGFueSk7XG4gICAgICAgIGxldCBzdGF0ZSA9IGNvbnRyb2xsZXIuZ2V0U3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIG5leHQgPT4gYWN0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBzaG91bGRTa2lwID0gdGhpcy5za2lwTG9nZ2luZz8uKGFjdGlvbik7XG4gICAgICAgICAgY29uc3QgcmV0ID0gbmV4dChhY3Rpb24pO1xuICAgICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIC8vIHdlIHRyYWNrIHN0YXRlIGNoYW5nZXMgaGVyZSBzaW5jZSBnZXRTdGF0ZSgpIHdpbGwgb25seSB1cGRhdGUgYWZ0ZXIgYSBiYXRjaCBjb21taXRcbiAgICAgICAgICAgIHN0YXRlID0gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBjb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTa2lwKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbihhY3Rpb24sIHN0YXRlLm9wdGltaXN0aWMucmVkdWNlKHJlZHVjZXIsIHN0YXRlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvdG90eXBlLm1pZGRsZXdhcmUgPSAoKSA9PiBuZXh0ID0+IGFjdGlvbiA9PiBuZXh0KGFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogYW55LCBzdGF0ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5kZXZUb29scy5zZW5kKGFjdGlvbiwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdm9pZCB0aGlzIGdldHRpbmcgdG9vIGJpZyBpbiBjYXNlIHRoaXMgaXMgbG9uZyBydW5uaW5nXG4gICAgICAvLyB3ZSBjdXQgaW4gaGFsZiBzbyB3ZSBhcmVuJ3QgY29uc3RhbnRseSByZWFsbG9jYXRpbmdcbiAgICAgIGlmICh0aGlzLmFjdGlvbnMubGVuZ3RoID4gdGhpcy5tYXhCdWZmZXJMZW5ndGgpXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5zbGljZSh0aGlzLm1heEJ1ZmZlckxlbmd0aCAvIDIpO1xuICAgICAgLy8gcXVldWUgYWN0aW9uc1xuICAgICAgdGhpcy5hY3Rpb25zLnB1c2goW2FjdGlvbiwgc3RhdGVdKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gaW5pdGlhbCBzdGF0ZSBpcyByZWFkeSAqL1xuICBpbml0KHN0YXRlOiBTdGF0ZTxhbnk+KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICgoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fRENfQ09OVFJPTExFUlNfXyA/Pz0gbmV3IE1hcCgpKS5zZXQoXG4gICAgICAgIHRoaXMuZGV2dG9vbHNOYW1lLFxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLmRldlRvb2xzKSB7XG4gICAgICB0aGlzLmRldlRvb2xzLmluaXQoc3RhdGUpO1xuICAgICAgdGhpcy5kZXZUb29scy5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XG4gICAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdTVEFSVCc6XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaCgoW2FjdGlvbiwgc3RhdGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLCBzdGF0ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1NUT1AnOlxuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdESVNQQVRDSCc6XG4gICAgICAgICAgICBpZiAobXNnLnBheWxvYWQudHlwZSA9PT0gJ1JFU0VUJykge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIucmVzZXRFbnRpcmVTdG9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbnN1cmVzIGFsbCBzdWJzY3JpcHRpb25zIGFyZSBjbGVhbmVkIHVwLiAqL1xuICBjbGVhbnVwKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBtYXA6IE1hcDxzdHJpbmcsIENvbnRyb2xsZXI+IHwgdW5kZWZpbmVkID0gKGdsb2JhbFRoaXMgYXMgYW55KVxuICAgICAgICAuX19EQ19DT05UUk9MTEVSU19fO1xuICAgICAgaWYgKG1hcD8uZ2V0KHRoaXMuZGV2dG9vbHNOYW1lKSA9PT0gdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAgIG1hcC5kZWxldGUodGhpcy5kZXZ0b29sc05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUdBLE9BQU9BLGFBQWEsTUFBTSxtQ0FBbUM7QUFLN0QsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2QixJQUFJQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLFlBQVksRUFBRTtFQUFBLElBQUFDLG9CQUFBO0VBQ3pDLE1BQU1DLGlCQUFpQixHQUFHLENBQ3hCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFFBQVEsQ0FDVDtFQUVELFNBQVNDLGlCQUFpQkEsQ0FBQ0MsUUFBMkIsRUFBRTtJQUFBLElBQUFDLE9BQUEsRUFBQUMsZ0JBQUE7SUFDdEQsTUFBTUMsTUFBVyxHQUFHO01BQ2xCQyxJQUFJLEVBQUVKLFFBQVEsQ0FBQ0ksSUFBSTtNQUNuQkMsTUFBTSxHQUFBSixPQUFBLElBQUFDLGdCQUFBLEdBQUdGLFFBQVEsQ0FBQ0ssTUFBTSxhQUFoQkgsZ0JBQUEsQ0FBMEJJLE1BQU0sb0JBQWhDSixnQkFBQSxDQUEwQkksTUFBTSxDQUFHLENBQUMsWUFBQUwsT0FBQSxHQUFJRCxRQUFRLENBQUNLLE1BQU07TUFDL0RFLFVBQVUsRUFBRVAsUUFBUSxDQUFDTztJQUN2QixDQUFDO0lBQ0RULGlCQUFpQixDQUFDVSxPQUFPLENBQUNDLEdBQUcsSUFBSTtNQUMvQixJQUFJQSxHQUFHLElBQUlULFFBQVEsRUFDakJHLE1BQU0sQ0FBQ00sR0FBRyxDQUFDLEdBQUdULFFBQVEsQ0FBQ1MsR0FBRyxDQUE0QjtJQUMxRCxDQUFDLENBQUM7SUFDRixPQUFPTixNQUFNO0VBQ2Y7RUFFQSxNQUFNTyxPQUFPLEdBQUcsT0FBT0MsSUFBSSxLQUFLLFdBQVc7RUFDM0NsQixjQUFjLEdBQUc7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
|